2017-06-19 3 views
1

私のプログラムには、単純な「Y/N」入力が含まれています。コード内にwhileループを配置しました。入力された入力が「Y/N」でないか、またはそのいずれかのバリエーションがある場合に応答するはずです。それはする必要はなく、唯一の未承認の入力でそれを認識するように設計されたwhileループのための応答を出力するところ、私が受け付けた入力を入力してくださいループしていないときに応答を出力する - 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 

は、プログラムが応答します。どのようなエラーが発生したため、正常に完了したときに間違った出力がリリースされるのですか?

+1

whileループを '' 'else'''ブロックの中に入れて、入力されないようにしてください(例:A == BまたはC == D)第1の条件のいずれかが真である場合。あなたのwhileループの中に '' 'または' 'の条件があるため、それが入っています。代わりに、すべて ''と '' ''が必要です。私があなたの意図を誤解していない限り... – mgarey

+0

@ mgareyありがとう、それは今働きます。なぜあなたはそれをelseブロックに置く必要があるのか​​をさらに説明できますか? –

+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が偽の場合に実行さ

ながら、(Aと!B): //実行され、Bは、非常に多くの面倒な条件に対処する必要がないようにあなたの小切手を簡素化することができます

+0

を参照してください。これは有効なPython構文ではありません。最低でも、 '! 'を' not'に切り替えてください。それでもなお、なぜこのような情報が表示されるのか、さらに役に立つ情報が追加される可能性があります。 –

1

ブロックが条件を満たしているかどうかにかかわらず、ブロックifとブロックelifの下のステートメントは実行されます。
は、これらのステートメントはifelifの条件は、満たされていないelse

elseブロックでwhileループを含める使用しなければならないときにのみ実行されていることを確認します:!

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

関連する問題