2016-10-29 4 views
-1

奇妙な演技しながら、私は、次のコードを持っている:ループが

fn = input("Choose a function(1, 2, 3, 4, 5, other(quit)): "); 
while (not(fn > '5' or fn < '1')): 
    print("hello world"); 

これは動作しますが、ほとんどの時間。たとえば、私が54や何かクレイジーな数字を入力すると、 "hello world"は決して印刷されません。
ただし、45と入力するとループに入ります。
これはなぜですか?

+0

のために準備される... '5「'より辞書順で小さい4''」、有効な入力のための無限whileループになります''より大きく '' 1 ''より大きいため、式はFalseと評価されます。 'not False'は' True'なので、ループに入ります。 – Li357

+0

つまり、文字列(テキスト)上の '>'または '<'演算子を使用すると、その順序をアルファベット順に比較します。アルファベット順ではありませんが、エンコーディングテーブル内のその文字列のシンボルの場所になります。 – AlexanderMP

答えて

-1

数字の代わりに文字列を使用しています('5''1')。文字列の比較は1文字で行われ、 '45'の文字 '4'は文字 '5'より小さいとみなされます。

>>> ord('4') 
52 
>>> ord('5') 
53 
-1

あなたが書き込むことによってそれを修正することができます:

fn = input("Choose a function(1, 2, 3, 4, 5, other(quit)): "); 
while str(fn) + ',' in '1,2,3,4,5,': 
    print("hello world"); 
0

Pythonは括弧を必要としない、セミコロン

whileまたはnotどちらで文を終了していません。

そして文字列ではなく数値を比較する必要があります。しかし、inputはPython3で文字列を返すので、int()も必要です。

fn = input("Choose a function(1, 2, 3, 4, 5, other(quit)): ") 
if fn == 'quit': 
    # break out of this choose a function prompt 
else: 
    while int(fn) in range(1, 5 + 1): # +1 because non-inclusive ranges 
     print("hello world") 

そして、これは、それらが辞書的に比較されているので、これだけその