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

标签 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 的正确值没有显示给评分变量

最佳答案

正在打印的 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/

相关文章:

python - 线性回归的标准差/误差

javascript - Puppeteer 如何检查页面是否已重定向

javascript - 删除数组中的一些元素后如何再次使用数组

JavaFX 使用 for 循环将操作分配给数组数组中的所有按钮

compiler-construction - MIPS 编译器局部变量

ruby - 中间步骤的局部变量

python - 使用正则表达式从字符串中仅提取 Unicode 字符

Python 使用 *args 和默认参数

python - 制作额外的树模型时出现 ValueError : Unknown label type: array([0. 11],...)

javascript - 一个长 If 条件与许多带有检查点的较小条件