2012-12-04 65 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