2012-10-08 199 views
0

我知道這是一個深入討論的話題,我知道有很多關於它的線程(我已經閱讀了所有內容),但我仍然只是不明白它。全局和局部變量的問題

未定義的變量(包括本地和全局)是我在Python中遇到的最大問題,我不知道在嘗試修復它們時我在做什麼。我會通過並添加一個x = 0或一個var = func(var)某些地方和某些時候它的工作,有時它不。這非常令人沮喪,我真的需要一些幫助。我問過我的老師,但通常需要她一段時間才能回到我身邊,我希望能夠解決這個問題。

這裏就是我的工作內容:http://pastebin.com/KTuh7D2p(這是學校。)

能有人請解釋變量的東西給我嗎?

我一直得到象這樣的錯誤:

Traceback (most recent call last): 
    File "Project1-v2.py", line 144, in <module> 
    main() 
    File "Project1-v2.py", line 12, in main 
    itemsSave = tagYell(items, itemsSale, itemsSave) 
UnboundLocalError: local variable 'itemsSave' referenced before assignment 

回答

2

在這種特殊情況下,我猜想,這是因爲你要使用itemSave來定義自身。這等於說是這樣的:

x = 5 + x 

定義x的第一次。

您需要提供一些關於itemSave是什麼的情況,然後才能嘗試使用它的值。

例如,此程序:

myNum = 5 
x = float(myNum+x) 
print x 

能給我的錯誤消息:

x = float(myNum+x) 
NameError: name 'x' is not defined 

然而,這將做工精細,並打印 「15」:

myNum = 5 
x = 10 
x = float(myNum+x) 
print x 
+0

哦!好的。我記得現在在早先的作業中這樣做。 (:但是如何讓X在後面的不同模塊中打印?只需使用'return x'?或者我可以執行'addX(x)'然後將它作爲'printInfo(x)'傳遞? – Chelsea

2

所以這裏是你問的一段代碼

def main(): 
    print "Welcome to the shop!" 
    menu() 
    itemsSale = 0 
    items = getItems() 
    itemsSave = tagYell(items, itemsSale, itemsSave) 
    itemsSale = calcTax(itemsSale) 
    taxTags(items) 
    printInfo(items, itemsSale, itemsSave) 
    enterItem = input("To enter another item number, press 1. To end, press 0: ") 
    print #Line break  

此行是導致錯誤

itemsSave = tagYell(items, itemsSale, itemsSave) 

您正在試圖通過itemsSavetagYell()功能,但它不具有價值呢。

Python知道,因爲你在同一範圍內分配itemsSave即。 itemsSave = ...它必須是一個未綁定的局部變量,所以它甚至不會查看全局變量以查看它是否在那裏定義。

+0

因此?意味着我不應該有 'itemsSave = tagYell(項目,itemsSale,itemsSave' 它會在'itemsSale = itemsSale + itemsYell' – Chelsea

+0

@Chelsea定義本身:什麼'itemsSale = itemsSale + itemsYell'? – martineau