Python 为什么赢了';";总数;多次运行时是否更新值?

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”在我第一次运行函数时会更改,但不会返回新的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”

正如巴辛加所说,你没有达到总回报率。如果希望返回多个值,可以如上所述,并在赋值中如上所示使用它们


正如巴辛加所说,你没有达到总回报率。如果希望返回多个值,可以如上所述,并在赋值中如上所示使用它们。

您有一个名为
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,它不是