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>
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>
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!