Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah Python Caesar Cipher saya hanya memaparkan watak yang dialih terakhir?

Mengapakah Python Caesar Cipher saya hanya memaparkan watak yang dialih terakhir?

Mary-Kate Olsen
Lepaskan: 2024-10-30 09:37:27
asal
678 orang telah melayarinya

Why is my Python Caesar Cipher only displaying the last shifted character?

Pelaksanaan Sifir Caesar dalam Python: Teks Disulitkan Tidak Dipaparkan Dengan Betul

Kod Python ini bertujuan untuk melaksanakan sifir Caesar, yang menukar aksara berdasarkan input pengguna. Walau bagaimanapun, teks sifir yang terhasil hanya memaparkan aksara beralih terakhir dan bukannya keseluruhan rentetan yang disulitkan. Kod yang disediakan adalah seperti berikut:

<code class="python">plainText = raw_input("What is your plaintext? ")
shift = int(raw_input("What is your shift? "))

def caesar(plainText, shift):
    cipherText = ""
    for ch in plainText:
        if ch.isalpha():
            stayInAlphabet = ord(ch) + shift
            if stayInAlphabet > ord('z'):
                stayInAlphabet -= 26
            finalLetter = chr(stayInAlphabet)
        cipherText += finalLetter
    print "Your ciphertext is: ", cipherText
    return cipherText

caesar(plainText, shift)</code>
Salin selepas log masuk

Analisis

Isunya terletak dalam gelung yang memproses setiap aksara dalam plaintext. Daripada menambahkan semua aksara yang dialihkan pada pembolehubah cipherText, kod tersebut hanya mengemas kininya dengan aksara yang dialihkan terakhir. Untuk membetulkannya, pembolehubah cipherText asal harus diisytiharkan sebelum gelung pemprosesan aksara.

Pelaksanaan Python

Pelaksanaan sifir Caesar yang dioptimumkan boleh dicapai menggunakan kaedah manipulasi rentetan Python :

<code class="python">def caesar(plaintext, shift):
    alphabet = string.ascii_lowercase
    shifted_alphabet = alphabet[shift:] + alphabet[:shift]
    table = string.maketrans(alphabet, shifted_alphabet)
    return plaintext.translate(table)</code>
Salin selepas log masuk

Dengan menggunakan string.maketrans() dan str.translate(), keseluruhan rentetan teks biasa boleh disulitkan dengan satu operasi, menghasilkan prestasi yang lebih baik dan kebolehbacaan kod.

Atas ialah kandungan terperinci Mengapakah Python Caesar Cipher saya hanya memaparkan watak yang dialih terakhir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan