2

私の暗号化関数が最初の翻訳された文字しか返さないのはなぜですか? (私は復号化とブルートフォース機能を切り取りました)。問題はおそらく小さなものですが、私はこれに慣れておらず、何かが頭に浮かぶほど長い間見つめていました.

import string

def encrypt(message,key):
    cryptotext=""
    for character in message:
        if character in string.uppercase:
            old_ascii=ord(character)
            new_ascii=(old_ascii+key-65)%26+65
            new_char=chr(new_ascii)
            cryptotext+=new_char
            return cryptotext

        elif character in string.lowercase:
            old_ascii=ord(character)
            new_ascii=(old_ascii+key-97)%26+97
            new_char=chr(new_ascii)
            cryptotext += new_char
            return cryptotext

        else:
            return character
4

2 に答える 2

1

ステートメントは現在のループから抜け出します。returnつまり、encrypt 関数はループが戻るまで待機する必要があります。また、大文字または小文字でない場合は文字を追加する必要があることに注意してください。そうしないと、最初の間違った文字が返されるだけです。 .
したがってencrypt(message,key)、次のようになります。

def encrypt(message,key):
    cryptotext=""
    for character in message:
        if character in string.uppercase:
            old_ascii=ord(character)
            new_ascii=(old_ascii+key-65)%26+65
            new_char=chr(new_ascii)
            cryptotext+=new_char


        elif character in string.lowercase:
            old_ascii=ord(character)
            new_ascii=(old_ascii+key-97)%26+97
            new_char=chr(new_ascii)
            cryptotext += new_char


        else:
            #Also, append character to cryptotext instead of returning it
            cryptotext+= character
    return cryptotext
于 2015-05-10T16:48:54.037 に答える
0

returnステートメントをループ内に配置します。つまり、最初の繰り返しの後、関数を終了し、結果として 1 文字しかないことを意味します。

コードは次のようになります。

cryptotext = ""
for character in message:
    # ...
    # do the encryption, without returning
    # ...
return cryptotext # after the loop has finished
于 2015-05-10T16:41:17.640 に答える