我是Python的新手,我真的很喜欢这些代码。我正在尝试重新创建一个人口模拟器,我在Python中看到了我的朋友。它非常基本,目前只使用3个变量。这是我的代码:
pop = 7000000000
int = 5
#Clear
def cls():
print "\n" * 80
#Main script
def MS():
cls()
print "Population =", pop, "Intelligence =", int
print ""
print "Do You:"
print "A) Increase Population"
print "B) Increase Intelligence"
choice = raw_input("Option:")
if choice == "a" :
print "option a"
elif choice == "A" :
print "option A"
elif choice == "b" :
intel()
elif choice == "B" :
intel()
#Increase Intelligence
def intel():
int = int + 3
MS()
我正在Code-Academy学习Python,并且正在使用Python 2.7.2版本在他们的实验室中测试我的代码。 Int是我的智能变量和intel我的智能增加功能名称。我想知道为什么我得到"本地变量' int'在转让前引用"当我调用int()函数以及如何修复它并且能够在多个函数中使用我的变量时出错。我只想修改int变量并将其增加3,并在另一个函数中执行类似操作。请记住,我只有15,所以试着简化你的回答,所以我理解,因为当我搜索解决方案时,我发现很多东西令人困惑。我还没有创建选项A功能,但它具有类似的属性。
编辑:谢谢你们的快速反应。我现在知道了。它确实有帮助!答案 0 :(得分:4)
pop
和int
并在任何函数外部分配,称为全局变量。在函数内分配的变量称为局部变量。要分配给函数内的全局变量,必须先将其声明为全局变量:
def intel():
global int
int = int + 3
请注意int
是Python中类型的名称,不应该用作变量名:这将导致以后出现问题:
>>> int
<type 'int'>
>>> int(5.1) # this works
5
>>> int=1
>>> int(5.1) # now it is broken
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
这称为 shadowing builtins ,应该避免使用。使用其他变量名称。
答案 1 :(得分:1)
在Python中,仅在函数内引用的变量是隐式全局变量。如果在函数体内的任何位置为变量分配了一个新值,则假定它是一个局部变量。如果变量在函数内部被赋予了新值,则该变量是隐式本地变量,您需要将其显式声明为“全局”。
修改你的intel(),如下所示
def intel():
global int
int = int + 3