我试图计算出条形码的最后一位,但是我在第二个和最后一个while循环中遇到了问题。在
它们不会给变量total
或mOf10
分配任何新值。它反而把它们留为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语句。在
比较具有同等优先权。
a<b<c
计算为a<b and b<c
因此,在您的例子中,
i<7==True
被计算为i<7 and 7==True
,表示1
True and False
=>;False
或2
False and False
=>;False
所以它总是
False
参考资料见。。。 https://docs.python.org/3/reference/expressions.html#comparisons
并且请做使用
global
所需的操作我不知道您到底想做什么,但是我可以告诉您,
total
的值没有改变的问题是什么。这里的问题出现在condition
循环的condition
中。即while (i < 7 == True)
。在如您所见,当条件返回
False
时,控件从不进入while循环。在相反,只需执行
while(i<7)
。这应该能解决问题。在注意:在代码中使用}的作用域本身是本地的。在
global
是错误的,因为total
和{编辑: 这种奇怪行为的原因是由于比较运算符具有相同的优先级,并且由于运算符之间的链接,在for python中,
x < y <= z
等同于x < y and y <= z
。在我们知道:
^{pr2}$由于运算符的链接,整个条件依次变成
i < 7 and 7 == True
。由于7==True
是False
,所以最后的条件计算为False
。在相关问题 更多 >
编程相关推荐