在while循环中更改全局变量时出现问题

2024-04-23 07:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算出条形码的最后一位,但是我在第二个和最后一个while循环中遇到了问题。在

它们不会给变量totalmOf10分配任何新值。它反而把它们留为0,我不明白为什么。在

while True:

    number = input("Enter a 7 digit number please.")
    if len(number) == 7:
        try:
            number = int(number)
        except ValueError:
            print("Please enter a number")
        else:
            break
    else:
        print("Please enter a valid number.")

print(number) #DELETE THIS BIT LATER!
i = 0
total = 0

while (i < 7 == True):
    global total
    f = str(number)[i]
    if int(f) % 2 == 1:
        total = total + int(f) * 3
    else:
        total = total + int(f)
    i += 1

print(total)

mOf10 = 0

while True:
    global mOf10
    if mOf10 >= total:
        break
    else:
        mOf10 += 10

finalD = mOf10 - total
print(finalD)

它会打印出你输入的7位数字,但不会输出10的总和或倍数。结果是0。在

我的老师对此唯一的解决办法就是大量的if/else语句。在


Tags: truenumberifglobalelseinttotalprint
2条回答

比较具有同等优先权。

a<b<c计算为a<b and b<c

因此,在您的例子中,i<7==True被计算为i<7 and 7==True,表示
1True and False=>;False
2False and False=>;False

所以它总是False

参考资料见。。。 https://docs.python.org/3/reference/expressions.html#comparisons

并且请做使用global所需的操作

我不知道您到底想做什么,但是我可以告诉您,total的值没有改变的问题是什么。这里的问题出现在condition循环的condition中。即while (i < 7 == True)。在

>>> i<7
True 
>>> i<7 == True
False

如您所见,当条件返回False时,控件从不进入while循环。在

相反,只需执行while(i<7)。这应该能解决问题。在

注意:在代码中使用global是错误的,因为total和{}的作用域本身是本地的。在

编辑: 这种奇怪行为的原因是由于比较运算符具有相同的优先级,并且由于运算符之间的链接,在for python中,x < y <= z等同于x < y and y <= z。在

According to Python docs :

Formally, if a, b, c, …, y, z are expressions and op1, op2, …, opN are comparison operators, then a op1 b op2 c ... y opN z is equivalent to a op1 b and b op2 c and ... y opN z, except that each expression is evaluated at most once.

我们知道:

^{pr2}$

由于运算符的链接,整个条件依次变成i < 7 and 7 == True。由于7==TrueFalse,所以最后的条件计算为False。在

相关问题 更多 >