2017-06-19 163 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)