a = 'file'
b = 'file'
c = 4
d = 4
e = 5
f = 6
def sim(a,b,c,d,e,f):
s = 0
if( a == b):
s+=1
print(s)
if( c==d ):
s+=1
print(s)
if (e == d):
s+=1
print(s)
score = s/3
return score
>>> sim(a,b,c,d,e,f)
上面的输出是:
1
2
0
这意味着虽然 s 首先在 if 子句中更新,但当它在 score 变量中访问时,它具有 s 的旧值,即 0。有人可以解释一下如何更正这个吗?为什么 s 的正确值没有显示给评分变量
最佳答案
正在打印的 0
不是 s 的值。打印的是函数的返回值。 Python 2 默认使用整数除法,因此您打印的是 s/3
的值,即 0
。
它正在打印函数的返回值,因为您正在处理 shell。如果您将其作为单独的程序运行,则不会打印。
您的情况与此非常相似:
>>> def f(x):
return x / 3
>>> f(2)
0
可以看到,正在打印函数返回的值。此外,2 除以 3 得到整数除法 0。
关于Python局部变量被修改但最后没有显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31707717/