2016-10-07 15 views
0

私の入力制御がなぜ機能しないのか疑問に思っています。私はuserOption != "1"でそれを試してみましたが、それがうまく働いた(注記:他の機能を無視します。)ユーザ入力の制御

userOption = str(input("Chose option 1, 2 or \"E/e to exit\": ")) 
print(userOption) 
while(userOption != "1" or userOption != "2" or userOption != "e" 
     or userOption != "E"): 
    reply = (userOption + " is not a valid option") 
    print(reply) 
    userOption = input("Chose option 1, 2 or \"E/e to exit\": ") 
    if userOption == "1": 
     validEntry("Celsius") 
     C_to_F(int(userInput)) 
     print(F) 
    elif userOption == "2": 
     validEntry("Fahrenheit") 
     F_to_C(int(userInput)) 
     print(C) 
    else: 
     input("Thank you. Press enter to close this screen in the exe mode.") 

答えて

1

あなたは==

while not(userOption == "1" or userOption == "2" or userOption == "e" or userOption == "E"): 
に代わり or

while userOption != "1" and userOption != "2" and userOption != "e" and userOption != "E": 

またはnotandを使用する必要があります

またはnot in

ロジックは、どんなユーザータイプ真の結果 を生成しないことを
while userOption not in ("1", "2", "e", "E"): 
+0

私は最後の方法がおそらく最も明瞭で最も平凡な方法だと言及する価値があるかもしれないと思います。しかし私はその効率についてはわかりません。 –

+0

'tuple()'の@ Mr.goosberryバージョンがおそらく最も人気があり、高速であるべきですが、 'set()'で 'O(1)': 'while ... in {" 1 " "2"、 "e"、 "E"}: ':) – furas

+0

私はあなたの権利を信じています。 'set()'はおそらく 'tuple() 'より優れています。しかし、OPはパフォーマンスについて心配するようには見えないので、あなたのソリューションは理想的です:) –

0
while(userOption != "1" or userOption != "2" or userOption != "e" 
    or userOption != "E"): 

。他の人が言ったように、orの代わりにandをここで使用する必要があります。

関連する問題