0

我想使用 while 循环和 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

不返回任何错误,但不能按我的意愿工作。据我所知,它根本没有任何作用。

另外,如果有一种更简洁的方式来编写我的循环,我很乐意听到它。

4

2 回答 2

1

我认为您可以使用 dict 来保存所有功能是一种更清洁的方式。

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
于 2012-12-04T04:51:31.750 回答
1

您收到缩进错误,因为您没有结束双引号。

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

如果你想在有任何其他值的情况下让 while 看起来中断,那么将所有条件放入 elif 语句中,并在末尾添加一个包含所有内容的 else。此外,我只是将 lower 和 strip 放在 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

您也可以将所有有效的答案选项放入字典中,但看起来您应该从简单的解决方案开始来理解流程。您还使用 ap 播放和暂停。你会想要使用一个独特的价值来区分,所以我添加了“pl”来玩。

于 2012-12-04T04:54:24.473 回答