2012-10-08 99 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