0

暗号化プログラムを作成する必要があり、割り当ての途中です。以下にリストされているのは、この部分の説明です。e、d、またはqが入力されていない場合、Pythonにwhileループをやり直すように指示するにはどうすればよいですか?私のqエントリは正常に機能しますが、ご覧のとおり、ユーザーが別の文字を入力した場合のケースを作成するための支援が必要です。

whileループを使用して、ユーザーが「e」、「d」、または「q」を入力していることを確認して、不正な入力をやり直します。次に、StartMenu()は選択内容をmain()関数に戻す必要があります。ここで、main()の変数がその戻り値をキャッチする必要があります。

 def PrintDescription():
    print 'This program encrypts and descrypts messages using multiple \
encryption methods.\nInput files must be in the same directory as this program.\
\nOutput files will be created in this same directory.'

def StartMenu():
    print 'Do you wish to encrypt or decrypt?'
    print '<e>ncrypt'
    print '<d>ecrypt'
    print '<q>uit'

def main():
    alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.?! \t\n\r"
    PrintDescription()
    while True:
        StartMenu()
        a = raw_input("")
        if a!='e' and a!='d' and a!='q':
          print 'You must enter e, d or q'
          False
          break
        if a == 'q':
         break
4

2 に答える 2

2

コメントでの長い会話を控えるために、これはすべての要件を満たす必要があります。

def main():
    alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.?! \t\n\r"
    PrintDescription()
    a = None
    while a not in ('e', 'd', 'q'):
        if a:
            print "Try again!"
        else:
            StartMenu()
        a = raw_input("")
    if a == 'q':
        sys.exit(0)

何が起こっていますか...

初めてメイン関数を使用すると、a は None に設定されます。次に while ループが開始され、a が 3 つの必須文字の 1 つになるまで実行を続けるように指示されます。もちろん、最初の a は None なので、while ループに入ります。a は None であるため、 とif a:評価されFalseます。そのブロックはスキップされます。ただし、else が実行され、StartMenu が出力されます。次に、ユーザー入力を読み取り、ループが最初からやり直すときに何をするかを決定します。基準が満たされている場合 (つまり、a が「e」、「d」、または「q」のいずれかである場合、ループは再度繰り返されません。ただし、a が 3 文字に含まれていない場合は、ループが始まりますが、今回は a は soif a:と評価されます。True. 「Try again!」と表示されるようになりました。StartMenu を印刷しません。これからは、3 つの文字のいずれかが入力されるまで、これが続きます。

于 2013-03-23T04:04:07.853 に答える
1
while raw_input("") not in ['e', 'd', 'q']:
   berate_user()
于 2013-03-23T03:53:00.740 に答える