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ステートメントに入れ、最後にすべてを含めます。また、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 に答える