Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在while循环中更改全局变量时出现问题_Python_Python 3.x_Global - Fatal编程技术网

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

Python 在while循环中更改全局变量时出现问题,python,python-3.x,global,Python,Python 3.x,Global,我试图算出条形码的最后一个数字,但是第二个和最后一个while循环有问题 它们不会为变量total或mOf10分配任何新值。而是将它们保留为0,我不明白为什么 while True: number = input("Enter a 7 digit number please.") if len(number) == 7: try: number = int(number) except ValueError:

我试图算出条形码的最后一个数字,但是第二个和最后一个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)
为True时:
数字=输入(“请输入一个7位数字。”)
如果len(number)==7:
尝试:
数字=整数(数字)
除值错误外:
打印(“请输入一个数字”)
其他:
打破
其他:
打印(“请输入有效数字”)
打印(数字)#稍后删除此位!
i=0
总数=0
而(i<7==True):
全球总数
f=str(编号)[i]
如果int(f)%2==1:
总计=总计+整数(f)*3
其他:
总计=总计+整数(f)
i+=1
打印(总计)
mOf10=0
尽管如此:
全球mOf10
如果mOf10>=总计:
打破
其他:
mOf10+=10
最终值=mOf10-总计
打印(最终)
它会打印出你输入的7位数,但不会输出10的总和或倍数。结果是0


我的老师唯一的解决办法是使用大量的if/else语句。

我不确定您在这里到底想做什么,但我可以告诉您,对于什么问题,
total
的值没有改变。这里的问题是
while
循环的
条件。即,
while(i<7==True)


由于运算符的链接,整个条件依次变为
i<7和7==True
。由于
7==True
False
,因此最终条件的计算结果为
False
,比较的优先级相同。


a您不需要在while循环中使用global,除非它是一个函数
total
这里不是一个全局变量。它与main在同一范围内,也不是
mOf10
如果您删除行
global total
global mOf10
,这将为您提供所需的输出My friend
i甚至更好,将
i=0替换为
i<7,i++
构造为范围(7)
中的i更具pythonic code>。是的,这更好。只是在这里指出OP的问题。是的,评论更多的是针对OP而不是你!很高兴能帮上忙,作为回报,我学到了一些东西。我也刚刚了解到有这样的怪癖。我猜这是因为优先权扮演了一个角色。将在一段时间内用更深入的解释更新答案。@SleepingSoul,请检查编辑以获得完整的解释。
>>> i<7
True 
>>> i<7 == True
False
>>> i < 7
True
>>> 7 == True
False