Python 局部变量已修改但未在末尾显示
Python local variable modified but isn't shown at the end
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 的正确值没有显示给评分变量
你正在进行整数除法,它会向下舍入。
尝试2/float(3)
正在打印的 0
不是 s 的值。打印的是函数的 return 值。 Python 2 默认使用整数除法,所以你打印的是 s/3
的值,即 0
.
它正在打印函数的 return 值,因为您正在处理 shell。如果您 运行 这是一个单独的程序,它就不会被打印出来。
您的情况与此非常相似:
>>> def f(x):
return x / 3
>>> f(2)
0
可以看到,函数return输出的值正在打印。另外,2 除以 3 得到整数除法 0。
在python2.x中,如果你试图用/
除以两个整数,它实际上会找到两个数字的底(2/3=0)。如果你想要正常除法,其中一个数字应该是一个浮点数。例如,在您的程序中,您可以通过编写 /3.0
而不是 /3
.
来快速轻松地解决此问题
在python3.x中,/
总是表示正常除法,//
是整数division/floor。
您使用的是 python 2,当一个整数除以另一个整数时,整数除法就完成了。 2 / 3
等于 0
为 2 == (3 * 0) + 2
。要执行真正的除法,请尝试:
score = s / 3.
.
强制将 3 解析为浮点数。如果不除以文字使用 float
.
numbers = range(10)
average = sum(numbers) / float(len(numbers))
或者,要在整个文件中强制执行真正的除法:
from __future__ import division
# The above must be the very first line of file, as it is not a true import, but a
# directive to the compiler.
s = 2
score = s / 3
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 的正确值没有显示给评分变量
你正在进行整数除法,它会向下舍入。
尝试2/float(3)
正在打印的 0
不是 s 的值。打印的是函数的 return 值。 Python 2 默认使用整数除法,所以你打印的是 s/3
的值,即 0
.
它正在打印函数的 return 值,因为您正在处理 shell。如果您 运行 这是一个单独的程序,它就不会被打印出来。
您的情况与此非常相似:
>>> def f(x):
return x / 3
>>> f(2)
0
可以看到,函数return输出的值正在打印。另外,2 除以 3 得到整数除法 0。
在python2.x中,如果你试图用/
除以两个整数,它实际上会找到两个数字的底(2/3=0)。如果你想要正常除法,其中一个数字应该是一个浮点数。例如,在您的程序中,您可以通过编写 /3.0
而不是 /3
.
在python3.x中,/
总是表示正常除法,//
是整数division/floor。
您使用的是 python 2,当一个整数除以另一个整数时,整数除法就完成了。 2 / 3
等于 0
为 2 == (3 * 0) + 2
。要执行真正的除法,请尝试:
score = s / 3.
.
强制将 3 解析为浮点数。如果不除以文字使用 float
.
numbers = range(10)
average = sum(numbers) / float(len(numbers))
或者,要在整个文件中强制执行真正的除法:
from __future__ import division
# The above must be the very first line of file, as it is not a true import, but a
# directive to the compiler.
s = 2
score = s / 3