无法在while循环中更改全局变量

时间:2017-09-22 14:07:22

标签: python python-3.x global

我试图弄清楚条形码的最后一位数字,但是我遇到了第二次和最后一次循环的问题。

他们不会为变量data <- fread("data.csv", col.names = fread("header.txt", header = FALSE)$V1) total分配任何新值。相反,它将它们保留为0,我不明白为什么。

mOf10

它会打印出您输入的7位数字,但它不会输出10或10的总数。它们只是0。

我的老师只解决了很多if / else语句。

2 个答案:

答案 0 :(得分:1)

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

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

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

而是只做while(i<7)。那应该解决它。

注意:在代码中使用global是错误的,因为totalmOf10的范围本身就是本地的。

修改: 奇怪行为的原因是由于比较运算符具有相同优先级并且由于链接运算符,其中for for python类似于x < y <= z相当于x < y and y <= z

  

根据Python文档:

     

形式上,如果a,b,c,...,y,z是表达式,op1,op2,...,opN是   比较运算符,然后是op1 b op2 c ... y opN z相当于   a op1 b和b op2 c和... y opN z,除了每个表达式都是   最多评估一次。

我们在这里知道:

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

由于操作符的链接,整个条件依次变为i < 7 and 7 == True。由于7==TrueFalse,因此最终的条件评估为False

答案 1 :(得分:0)

比较具有相同的优先权。

a<b<c评估为a<b and b<c

因此,在您的情况下,i<7==True被评估为i<7 and 7==True,暗示任何一个   1. True and False =&gt; False
  2. False and False =&gt; False

所以始终是False

供参考,请参阅...... https://docs.python.org/3/reference/expressions.html#comparisons

请尽快使用global