我试图弄清楚条形码的最后一位数字,但是我遇到了第二次和最后一次循环的问题。
他们不会为变量data <- fread("data.csv", col.names = fread("header.txt", header = FALSE)$V1)
或total
分配任何新值。相反,它将它们保留为0,我不明白为什么。
mOf10
它会打印出您输入的7位数字,但它不会输出10或10的总数。它们只是0。
我的老师只解决了很多if / else语句。
答案 0 :(得分:1)
我不确定你到底想要做什么,但我可以告诉你问题是total
的值没有改变的问题。这里的问题出现在condition
循环的while
中。即,while (i < 7 == True)
。
>>> i<7
True
>>> i<7 == True
False
如您所见,当条件返回False
时,控件永远不会进入while循环。
而是只做while(i<7)
。那应该解决它。
注意:在代码中使用global
是错误的,因为total
和mOf10
的范围本身就是本地的。
修改:
奇怪行为的原因是由于比较运算符具有相同优先级并且由于链接运算符,其中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==True
为False
,因此最终的条件评估为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