0

Caesar Cipher コードが少しあり、try/except が機能しません。最初の入力まで繰り返すだけです。「INCORRECT INPUT」は表示されません。これを修正するにはどうすればよいですか?

while True:
    try:
        encrypt = raw_input("Would you like to encrypt or decrypt a message? (E/D) : ").lower()
        print("")
        if encrypt == 'e':
            print("ENCRYPTION: Due to the nature of the Caesar Cipher, Numbers and Symbols will 
                  be removed. Please represent numbers as the word...")
            print("I.E. - 7 should be entered as 'seven'. ")
            print("")
            sentence = raw_input("Please enter a sentence : ").lower()
            newString = ''
            validLetters = "abcdefghijklmnopqrstuvwxyz "
            space = []
            for char in sentence:
                if char in validLetters or char in space:
                    newString += char
            shift = input("Please enter your shift : ")
            resulta = []
            for ch in newString:
                x = ord(ch)
                x = x+shift
                resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
            print sentence
            print("")
            print("Your encryption is :")
            print("")
            print ''.join(resulta)
        if encrypt == 'd':
            print("DECRYPTION : PUNCTUATION WILL NOT BE DECRYPTED")
            print("")
            sentence = raw_input("Please enter an encrypted message : ").lower()
            newString = ''
            validLetters = "abcdefghijklmnopqrstuvwxyz "
            for char in sentence:
                if char in validLetters:
                newString += char
            shift = input("Please enter your shift : ")
            decryptshift = 26 - shift
            resulta = []
            for ch in newString:
                x = ord(ch)
                x = x + decryptshift
                resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
            print sentence
            print("")
            print("Your encryption is :")
            print("")
            print ''.join(resulta)
        if encrypt == 'q':
            break
    except:
        print("")
        print("INCORRECT INPUT!")
        print("")
    continue

私は試行と例外の両方でさまざまな場所を試しました...私は迷っています。前もって感謝します!

4

3 に答える 3

0

これは元の質問の OT ですが、

result = raw_input("Enter Q, D, or E")
while result.lower() not in ["q","d","e"]:
      result = raw_input("Invalid Response! Enter Q,D, or E:")
#now you know result is one of q d or e

おそらくあなたの入力を得るより良い方法です

于 2013-11-06T19:31:12.960 に答える
0

ここで不一致の識別を修正した後、コードを実行しましたが、問題ないようです。

      if char in validLetters:
      newString += char

これに:

      if char in validLetters:
          newString += char

次の出力が得られました。

Please enter a sentence : test
Please enter your shift : 

INCORRECT INPUT!
于 2013-11-06T18:39:43.227 に答える
0

try..exceptブロックは、ユーザーまたはシステムが例外を発生させた場合に使用されます。ブロックが正常に終了したexcept場合、ブロックは実行されません。あなたの場合、あなたのプログラムは単にブロックtryに入りません。if

期待どおりの結果を得るには、if ステートメントを次のように書き直します。

    if encrypt == 'e':
        ...
    elif encrypt == 'd':
        ...
    elif encrypt == 'q':
        break
    else:
        print("")
        print("INCORRECT INPUT!")
        print("")

このようにして、すべての条件を組み合わせて、「デフォルト」ステートメントを作成します。elseafter elifs は、前elifの s と最初の s のいずれも入力されていない場合に入力されますif(これは基本的に、どの条件も真でないことを意味します)。

(元のコードのように) を使用せずelifにのみ使用するとif、条件チェーンが壊れ、最後の は、"e" または "d" であっても、elseすべてのケースをキャッチします。encrypt != "q"

于 2013-11-06T18:42:57.267 に答える