Python 局部变量已修改,但未显示在末尾


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。

x,如果你试着用/除以两个整数,它实际上会找到这两个数的底数(2/3=0)。如果你想要正常除法,其中一个数字应该是浮点数。例如,在您的程序中,您可以通过编写/3.0而不是/3来快速轻松地解决此问题。

在python 3。x, /总是表示正除法,//是整数除法。

你在做整数除法,它将四舍五入。

试试2/float(3)

您正在使用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

最新更新