修改了Python局部变量,但最后没有显示

时间:2015-07-29 17:54:10

标签: python if-statement local-variables

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的正确值来得分变量

4 个答案:

答案 0 :(得分:7)

正在打印的0不是s的值。正在打印的是函数的返回值。 Python 2默认使用整数除法,因此您打印s/3的值0

它正在打印函数的返回值,因为您正在处理shell。如果您将其作为单独的程序运行,则不会打印它。

您的情况与此非常相似:

>>> def f(x):
    return x / 3

>>> f(2)
0

您可以看到,正在打印函数返回的值。另外,将2除以3得到0,整数除法。

答案 1 :(得分:3)

在python 2.x中,如果你尝试用/划分两个整数,它实际上会找到两个数字的最低点(2/3 = 0)。如果你想要正常除法,其中一个数字应该是一个浮点数。例如,在您的计划中,您可以通过撰写/3.0代替/3来快速轻松地解决此问题。

在python 3.x中,/总是表示正常除法,//是整数除法/下限。

答案 2 :(得分:2)

你正在进行整数除法,它会向下舍入。

尝试2/float(3)

答案 3 :(得分:2)

您正在使用python 2,当一个整数被另一个整数除分时,则完成整数除法。 2 / 3等于0 2 == (3 * 0) + 2。要执行真正的除法尝试:

score = s / 3.

.强制将3解析为float。如果没有除以文字使用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