Python 为什么赢了';";总数;多次运行时是否更新值?
“total”在我第一次运行函数时会更改,但不会返回新的total值,所以当我再次运行它时,它的值与我第一次运行它之前的值相同Python 为什么赢了';";总数;多次运行时是否更新值?,python,python-2.7,return-value,Python,Python 2.7,Return Value,“total”在我第一次运行函数时会更改,但不会返回新的total值,所以当我再次运行它时,它的值与我第一次运行它之前的值相同 total = card[1].value def hit(total): #print (str(hit.counter)) print("You draw the " + string(card[hit.counter])) total = total + card[hit.counter].value print(str(tota
total = card[1].value
def hit(total):
#print (str(hit.counter))
print("You draw the " + string(card[hit.counter]))
total = total + card[hit.counter].value
print(str(total))
hit.counter += 1
return hit.counter
return total
此函数在此处调用:
choice = raw_input("\n1. Hit\n2. Stay\n")
if (choice == "1"):
hit(total)
这是同样的问题
x = 1
def call(x):
x = x + 1
print x
return x
call(x)
每次运行时,它都会输出2,并且不会更新新值“x=x+1”
正如巴辛加所说,你没有达到总回报率。如果希望返回多个值,可以如上所述,并在赋值中如上所示使用它们
正如巴辛加所说,你没有达到总回报率。如果希望返回多个值,可以如上所述,并在赋值中如上所示使用它们。您有一个名为
total
的全局变量。您还有一个名为total
的局部变量
当您在函数中时,局部
total
将覆盖外部全局变量,因此函数中对total
的更新只会更新局部变量。您有一个名为total
的全局变量。您还有一个名为total
的局部变量
当您在函数中时,局部total
将覆盖外部全局变量,因此函数中对total
的更新只会更新局部变量
这是同样的问题
然后呢?你期待什么?全局x
将在最后一行之后自动更新?对不起,这不是它的工作原理。在call()
中,x
是一个本地名称,与外部全局x
完全无关。当您调用时,调用(x)
。如果要更新全局x
,必须明确地重新绑定它:
def call(x):
x = x + 1
print x
return x
x = 1
x = call(x)
我强烈建议您阅读以下内容:
编辑:
我想要它,所以当我第二次运行hit()函数时,总数是我上次使用它的总数
这是你的责任(我的意思是调用此函数的代码的责任)将总数存储在某个地方,并在下一次调用时将其传回:
# Q&D py2 / py3 compat:
try:
# py2
input = raw_input
except NameError:
# py3
pass
def call(x):
x = x + 1
print(x)
return x
x = 1
while True:
print("before call, x = {}".format(x))
x = call(x)
print("after call, x = {}".format(x))
if input("play again ? (y/n)").strip().lower() != "y":
break
这是同样的问题
然后呢?你期待什么?全局x
将在最后一行之后自动更新?对不起,这不是它的工作原理。在call()
中,x
是一个本地名称,与外部全局x
完全无关。当您调用时,调用(x)
。如果要更新全局x
,必须明确地重新绑定它:
def call(x):
x = x + 1
print x
return x
x = 1
x = call(x)
我强烈建议您阅读以下内容:
编辑:
我想要它,所以当我第二次运行hit()函数时,总数是我上次使用它的总数
这是你的责任(我的意思是调用此函数的代码的责任)将总数存储在某个地方,并在下一次调用时将其传回:
# Q&D py2 / py3 compat:
try:
# py2
input = raw_input
except NameError:
# py3
pass
def call(x):
x = x + 1
print(x)
return x
x = 1
while True:
print("before call, x = {}".format(x))
x = call(x)
print("after call, x = {}".format(x))
if input("play again ? (y/n)").strip().lower() != "y":
break
函数中有两个返回。您的代码从不执行
返回总计
。尝试使用return hit.counter,total
,并在调用函数hit
的接收端使用两个变量,一个用于存储hit.counter
,另一个用于存储total
这并没有解决我的问题,没有区别,因此everThen在代码中提供了更多细节,比如如何调用函数,如何存储返回值。如果没有这些,就很难猜到事情。提供重现问题的工作代码您从未在函数之外修改total变量的值看起来您的函数hit
与其他类型的对象同名(hit.counter
)。确保不同对象具有唯一的名称。函数中有两个返回。您的代码从不执行返回总计
。尝试使用return hit.counter,total
,并在调用函数hit
的接收端使用两个变量,一个用于存储hit.counter
,另一个用于存储total
这并没有解决我的问题,没有区别,因此everThen在代码中提供了更多细节,比如如何调用函数,如何存储返回值。如果没有这些,就很难猜到事情。提供重现问题的工作代码您从未在函数之外修改total变量的值看起来您的函数hit
与其他类型的对象同名(hit.counter
)。确保不同对象具有唯一的名称。这并不能解决他/她的问题。查看OP对我的评论的回复我已经尝试过了,也只是删除了hit.counter,所以total是唯一返回的东西,它仍然不能正常工作,我建议你发布你正在使用的全部代码,包括卡阵列和你使用hit的方式function@J.walker“不起作用”是对问题的完全无用的描述(cf)。这个答案完全符合你的要求:它也返回新的总数。如果你希望得到其他东西,你必须让你的问题更清楚。@Brunodesshuilliers它不返回新的总数,所以说“它仍然不起作用”,我指的是他的“解决方案”没有解决我的问题,它仍然不起作用。我完全按照建议做了,我也遇到了同样的问题。我没有意识到我必须解释清楚。这并没有解决他/她的问题。检查OP对我的评论的回复。我尝试过这一点,也只是删除了命中计数器。所以总数是唯一返回的东西,它仍然不起作用,对吗建议您发布您正在使用的全部代码,包括卡阵列和您使用hit的方式function@J.walker“不起作用”是对问题的完全无用的描述(cf)。这个答案完全符合你的要求:它也会返回新的总数。如果你希望得到其他东西,你必须把你的问题说得更清楚。@Brunodesshuilliers,它不是