2016-12-31 11 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ループでORに入れた後、私はそれが最初の一部のように動作させることはできません。

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

「ig!=( "21356797"または "13246785"): '=>' [21356797]、 "13246785"]のigではありません: '2つの文字列の間に'または 'を使用すると、文字列はブール値ではないので(実際にはあなたが望むものではない)、文字列はブール値ではないからです。 –

+1

'' 21356797 "または" 13246785 "'が "21356797"の場合、または演算子をPythonで検索してください。 'ig!= ... or ig!= ...'を実行する必要があります。 – Jasper

+0

@ Jasper: '!='を使用している場合は、それらの条件を 'と'ではなく 'または'にする必要があります。それ以外の場合は、常に値の1つと等しくないため、何も通過しません。 – ShadowRanger

答えて

2

あなたのテスト:

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

は最初にorの条件を評価し、最初の「真実」値を返します。したがって、正確には

ig!= "21356797" 

となります。"21356797"は真実です。

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

または二つの連続!=テストや-ED一緒に:よりきれい値の大きなセットに

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

包含テストスケール、および限り

あなたが包含テストをしたいですすべての値が文字列リテラルなので、等しく効率的です(CPythonはリテラルの定数tupleをキャッシュします)。

+0

非常に役立ち、それはあなたに感謝した – user7361076

関連する問題