“总计”会在我第一次运行该函数时发生更改,但不会返回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(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”的新值
答案 0 :(得分:1)
您有一个名为total
的全局变量。您还具有一个名为total
的局部变量。
当您使用该函数时,局部total
将遮盖外部全局变量,因此,对函数内部total
的更新将仅更新局部变量。>
答案 1 :(得分:1)
这是简化的相同问题
x = 1
def call(x):
x = x + 1
print x
return x
call(x)
然后?你能指望什么 ?全局x
将在最后一行之后自动更新吗?对不起,但这不是它的工作原理。在call()
中,x
是本地名称,与外部全局x
完全无关。当您致电call(x)
时。如果要更新全局x
,则必须明确地重新绑定它:
def call(x):
x = x + 1
print x
return x
x = 1
x = call(x)
我强烈建议您阅读以下内容:https://nedbatchelder.com/text/names.html
编辑:
“我想要它,所以当我第二次运行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
答案 2 :(得分:0)
total = card[1].value
def hit(total):
print("You draw the " + string(card[hit.counter]))
total += card[hit.counter].value
hit.counter += 1
return hit.counter, total
hit_counter, total = hit(total)
正如bazingaa所建议的那样,您没有获得总回报。如果您要返回多个值,则可以按照上述步骤进行操作,并按上面所示的方式在分配中使用它们。