2015-10-17 89 views
0

所以我的問題是:香港專業教育學院創建了一個與在環路如果 - elif的,否則條款。我提示用戶輸入y或n,不區分大小寫。但我希望循環保持循環,直到它們輸入y,Y,n,N來打印出相應的字符串。但是當我輸入任何字符串或整數時,它會像我想要的一樣循環,但是當我輸入y,Y,n,N時,它仍然保持循環,並且不打印我想要的字符串。打印在while循環輸出字符串在Python

var = input("Enter Y/N:") 


while var != 'y' or var != 'Y' or var != 'n' or var != 'N' : 
    if var == 'y' or var == 'Y' : 
     print("You said yes") 
     break 
    elif var == 'n' or var == 'N': 
     print("You said no") 
     break 
    else: 
     input("Enter Y/N:") 
+1

移動輸入while循環,並確定''var ='''在頂部(在循環之前) – Jkdc

+0

你的'if'條件將總是跳轉到'input(...)' – sam

+0

是啊,我想知道爲什麼他們不會評價。如果我刪除輸入功能,那麼我可以得到所需的打印條件。但它不會循環。 – Patrick

回答

2

根據您的文章,似乎您希望有機會根據用戶的輸入跳過循環。要做到這一點,你可以用這個算法:

var = input("Enter Y/N:") 
if var in ['y', 'Y']: 
    print("You said yes") 
elif var in ['n', 'N']: 
    print("You said no") 
else: 
    while True : 
     var = input("Enter Y/N:") 
     if var in ['y', 'Y']: 
      print("You said yes") 
      break 
     elif var in ['n', 'N']: 
      print("You said no") 
      break 

爲什麼不寫與像var not in ['y', 'Y', 'n', 'N']的條件?

var = input("Enter Y/N:") 
if var in ['y', 'Y']: 
    print("You said yes") 
elif var in ['n', 'N']: 
    print("You said no") 
while var not in ['y', 'Y', 'n', 'N']: 
    var = input("Enter Y/N:") 
    if var in ['y', 'Y']: 
     print("You said yes") 
    elif var in ['n', 'N']: 
     print("You said no") 

我們可以切換的東西在聲明這將工作過,但你可以看到我們的代碼似乎有更多的切點更明確的其他聲明。 唯一的問題是我們增加了冗餘例程的切點。

在我看來,更好和更具可讀性來實現循環內部的輸入

爲Python 3.x的

while True : 
    var = input("Enter Y/N:") 
    if var in ['y', 'Y']: 
     print("You said yes") 
     break 
    elif var in ['n', 'N']: 
     print("You said no") 
     break 

爲Python 2.x的

while True : 
    var = raw_input("Enter Y/N:") 
    if var in ['y', 'Y']: 
     print("You said yes") 
     break 
    elif var in ['n', 'N']: 
     print("You said no") 
     break 

現在我們有一個非常小的代碼做同樣的事情。

我也注意到你只想讀字母{y,n}。區分大小寫的定義僅對用戶有用,這些案例將產生相同的答案。所以,你可能只是下限或上全部投入到簡化條件

爲Python 3.x的

while True : 
    var = input("Enter Y/N:").lower() 
    if var == 'y': 
     print("You said yes") 
     break 
    elif var == 'n': 
     print("You said no") 
     break 

爲Python 2.x的

while True : 
    var = raw_input("Enter Y/N:").lower() 
    if var == 'y': 
     print("You said yes") 
     break 
    elif var == 'n': 
     print("You said no") 
     break 
+0

是的,這也是另一個解決方案。所以我可以在if語句中創建一個列表? – Patrick

+0

沒有讓你配偶!你能改述一下嗎? – vyscond

+0

我的問題已被回答,因爲你顯然創建了一個列表並執行lol。謝謝 – Patrick