我的代码在githib上传到这里:
https://github.com/GameWylder/MonolithGame/blob/Alpha/QfS%200.1.2a.py
所以,我尝试做的是使用全局变量来跟踪道德"。
现在,它不是真正的道德选择,但我想用它来追踪玩家的选择。
我基本上有这个设置:
morality = 0
def pick():
while True:
choice = input("")
if choice == "Hesitate":
hesitate() #hesitate() is defined already, i just didn't include it to save space.
morality = 1
break
elif choice == "Walk":
walk() #again, walk() is previously defined.
morality = 2
break
else:
print("Invalid Input")
#+#+#+#+#+#+#+#+#+#+#+#+#+#
#Clean Up
#+#+#+#+#+#+#+#+#+#+#+#+#+#
pick()
print(morality) #This is to see if the morality worked.
可悲的是,它没有用。我该如何正确设置呢?
(我的设置是这样;第一个选择将设置第一个数字,1或2,然后第二个选择将第一个小数设置为#。1或#。2,然后第三个将设置#。#1或#。#2等等。)
我的意思是"它不起作用"是这个
>>>What's your choice?
Walk
>>>
>>>You Walk
>>>0
应该是什么时候
>>>What's your choice?
walk
>>>
>>>You Walk
>>>2
答案 0 :(得分:2)
当您对函数中的变量名执行赋值时,除非使用global
statement,否则它将创建局部变量。尝试将以下行添加到pick
函数的顶部:
global morality
或者更好的是,只需让您的pick
函数返回道德值,然后当您拨打电话时使用morality = pick()
。
有关global
声明的更全面说明,请参阅此博文:
http://freepythontips.wordpress.com/2013/07/28/the-use-of-return-and-global-keywords/
答案 1 :(得分:2)
为了简化您的问题,请查看以下代码:
morality = 0
def foo():
morality = 99
print "in foo:", morality
print "morality before foo:", morality
foo()
print "morality after foo:", morality
产生输出:
morality before foo: 0
in foo: 99
morality after foo: 0
现在尝试使用此版本的foo()
:
def foo():
global morality
morality = 99
print "in foo:", morality
我认为同样的问题适用于您的代码。