2012-12-04 32 views
0

我想用while循環和raw_input編寫一個接口。如何在輸入未指定的raw_input時打破循環?

我的代碼如下所示:

while True: 
    n = raw_input("'p' = pause, 'u' = unpause, 'p' = play 's' = stop, 'q' = quit) 
    if n.strip() == 'p': 
     mp3.pause() 
    if n.strip() == 'u': 
     mp3.unpause() 
    if n.strip() == 'p': 
     mp3.play() 
    if n.strip() == 's': 
     mp3.stop() 
    if n.strip() == 'q': 
     break 

但我想它打破未在指定的raw_input如果我輸入任何東西。

if not raw_input: 
     break 

返回和IndentationError:unindent不匹配任何外部縮進級別。

 if not raw_input: 
      break 

不會返回任何錯誤,但不會按照我的要求工作。據我所知,它什麼都不做。另外,如果有更清晰的方式來編寫我的循環,我喜歡聽到它。

+1

你有句法問題,使用顯示空格的編輯器,因爲它們在python中很重要。 – udoprog

+0

當你說'沒有在raw_input中指定的任何東西'時,你的意思是什麼? – timc

+0

'p'=暫停和'p'=玩...爲什麼? –

回答

1

您正在收到縮進錯誤,因爲您沒有收盤雙引號。

n = raw_input("'p' = pause, 'u' = unpause, 'p' = play 's' = stop, 'q' = quit") 

如果你想擁有,而休息一下,如果有那麼任何其他值把所有的條件爲ELIF語句,並在年底的所有其他includisve。另外,我只是放低和剝離raw_input語句的結尾。

while True: 
    n = raw_input("'p' = pause, 'u' = unpause, 'pl' = play 's' = stop, 'q' = quit").strip().lower() 
    if n == 'p': 
     mp3.pause() 
    elif n == 'u': 
     mp3.unpause() 
    elif n == 'pl': 
     mp3.play() 
    elif n == 's': 
     mp3.stop() 
    elif n == 'q': 
     break 
    else: 
     break 

您也可以將所有有效的答案選項放到字典中,但它看起來應該從簡單的解決方案開始,以瞭解流程。你也用p來玩和暫停。你會想用一個獨特的價值來區分,所以我加了'pl'來玩。

+0

非常感謝。我無法在任何地方找到這個問題的答案。對於輸入,我在腳本中分配了不同的值,但是當我寫這個問題時,我最初只會使用暫停和非暫停部分。我仍然在學Python(不到一週),所以我還沒有完全掌握它。 – Poisonedyoyo

1

我認爲你可以使用一個字典來保存所有的功能是一個更清潔的方式。

func_dict = { 
    'pause': mp3.pause, 
    'unpause': mp3.unpause, 
    'play': mp3.play, 
    'stop': mp3.stop, 
} 

while True: 
    n = raw_input("'p' = pause, 'u' = unpause, 'p' = play 's' = stop, 'q' = quit") 
    if n.strip() in func_dict.keys(): 
     func_dict[n]() 
    else: 
     break 
+0

或者'else:print('unknown command:{}'.format(n.strip()))' –

+0

啊。我正在閱讀字典,但我無法弄清楚如何將它們應用到我的特定腳本中。這很好,謝謝! – Poisonedyoyo