2017-06-19 169 views
1

我的程序包含一個簡單的'Y/N'輸入。我在代碼中放置了一個while循環,當輸入的輸入不是'Y/N'或其任何變化時,它應該會響應。雖然循環打印響應時,它不應該 - Python

import time 
count_d = 10 

load = input('Import modules? Y/N') 

if load == 'Y' or load == 'y' or load == ' Y' or load == ' y': 
    print('Modules loading...') 
    while count_d >0: 
     print(count_d) 
     count_d = count_d-1 
     time.sleep(1) 
    print('Modules loaded') 
elif load == 'N' or load == 'n' or load == ' N' or load == ' n': 
    print('Shutdown initiated.') 
    sys.exit() 

while load != 'Y' or load != 'y' or load != ' Y' or load != ' y' and load != 'N' or load != 'n' or load != ' N' or load != ' n': 
    print('This answer does not correspond with the desired output') 
    load = input('Import modules? Y/N') 
    if load == 'Y' or load == 'y' or load == ' Y' or load == ' y': 
     print('Modules loading...') 
     while count_d >0: 
      print(count_d) 
      count_d = count_d-1 
      time.sleep(1) 
     print('Modules loaded') 
     break 
    elif load == 'N' or load == 'n' or load == ' N' or load == ' n': 
     print('Shutdown initiated.') 
     break 

當我進入一個接受輸入,該程序響應它需要的地方,而且打印while循環,在那裏它被設計成只與一個接受的輸入識別它的響應。我做了什麼錯誤,所以在我做對了的時候它會釋放錯誤的輸出?

+1

將while循環放在一個'''else'''塊中,所以它不會被輸入如果第一個條件中的任何一個是真的。由於while循環中的'''或'''條件,它會進入它。你會希望所有的''和''是。除非我誤解你的意圖... – mgarey

+0

@mgarey謝謝,它現在有效。你能否進一步解釋爲什麼你需要把它放在另一個塊? –

+1

@ matt-333,請參閱我的回答,https://stackoverflow.com/a/44637757/2306662 – nikpod

回答

2

您可以簡化檢查,以便不必應付這麼多繁瑣的條件:

if load.strip().lower() == 'y': 

elif load.strip().lower() == 'n': 

while load.strip().lower() not in ['y', 'n']: 

巧合的是,這最後一個將解決您的錯誤,這是怎麼回事,因爲你在的地方and使用or

-1

您需要將while循環中的'或'語句更改爲'和'語句。

這個例子應該告訴你爲什麼...

而(a或b!): //運行在一個是真實的,但b爲假的情況下

而(和!b): //運行,而A和b都是不正確的

+0

這不是有效的Python語法。至少,將'!'切換到'不'。儘管如此,更多有用的信息可以添加到*顯示*爲什麼是這種情況。 –

1

無論是否滿足條件,都執行ifelif塊以下的語句。
爲了確保這些語句執行只有當ifelif的條件不滿足,else必須使用

包括在elsewhile循環:

import time 
count_d = 10 

load = input('Import modules? Y/N') 

if load == 'Y' or load == 'y' or load == ' Y' or load == ' y': 
    print('Modules loading...') 
    while count_d >0: 
     print(count_d) 
     count_d = count_d-1 
     time.sleep(1) 
    print('Modules loaded') 
elif load == 'N' or load == 'n' or load == ' N' or load == ' n': 
    print('Shutdown initiated.') 
    sys.exit() 
else: 
    while load != 'Y' or load != 'y' or load != ' Y' or load != ' y' and load != 'N' or load != 'n' or load != ' N' or load != ' n': 
     print('This answer does not correspond with the desired output') 
     load = input('Import modules? Y/N') 
     if load == 'Y' or load == 'y' or load == ' Y' or load == ' y': 
      print('Modules loading...') 
      while count_d >0: 
       print(count_d) 
       count_d = count_d-1 
       time.sleep(1) 
      print('Modules loaded') 
      break 
     elif load == 'N' or load == 'n' or load == ' N' or load == ' n': 
      print('Shutdown initiated.') 
      break 
-1

( A == B或C == D)==(A!= B)和(C!= D)