2016-12-31 45 views
-1

这是我的代码:为什么在Python中为我工作?

for count in range(NOI): 
     ig=input("enter a GTIN code: ") 
     while ig!=("21356797"): 
       print("incorrect") 
       ig=input("enter a GTIN code: ") 
       count =count+1 

,这是输出:

21356797 

13246785 

31325974 

45689413 

34512340 

56756777 

how many items do you want to buy?: 1 
enter a GTIN code: 21356797 
>>> 

这就是我想要的。然而,一旦我把或我while循环,我不能让它像第一部分的工作:

while ig!=("21356797" or "13246785"): 
      print("incorrect") 
      ig=input("enter a GTIN code: ") 
      count =count+1 

,这是输出:

how many items do you want to buy?: 1 
enter a GTIN code: 13246785 
incorrect 
enter a GTIN code: 21356797 
>>> 
+0

在[“21356797”,“13246785”]中可能'while ig!=(“21356797”或“13246785”):'=>''''':'在两个字符串之间使用'或'因为字符串不是布尔值(虽然它们可以被强制为这样,这实际上并不是你想要的)。 –

+1

'“21356797”或“13246785”'是“21356797”,请在python中查找or运算符。你必须做'ig!= ...或者ig!= ...' – Jasper

+0

@Jasper:如果你使用'!=',你需要''和'条件一起,而不是'或'它们。否则,任何事情都不会通过,因为它始终不等于其中一个值。 – ShadowRanger

回答

2

您的测试:

ig!=("21356797" or "13246785") 

先评估or条件,返回第一个“真值”值。因此,它完全等价于:

ig!= "21356797" 

因为"21356797"是truthy。

你想遏制测试:

ig not in ("21356797", "13246785") 

或两个连续!=测试和ED一起:

ig != "21356797" and ig != "13246785" 
# Equivalent to: 
not (ig == "21356797" or ig == "13246785") 

的遏制测试扩展到更大的一组值的更干净,而且只要因为所有值都是字符串文字,所以它们的效率是一样的(CPython缓存文字的常量tuple)。

+0

这是非常有帮助,它的工作,谢谢你 – user7361076

相关问题