[英]Caesar Cipher algorithm with strings and for loop Python
任務是編寫一個接收2個參數的Caesar Cipher算法,第一個參數是String參數,第二個參數告訴您將字母移動多遠。 第一部分是設置方法並設置兩個字符串,一個為普通字符串,另一個為移位字符串。 我已經做到了。 然后,我需要做一個循環,通過找到原始字母並從移位后的字符串中選擇適當的新字母,來遍歷原始字符串以構建新字符串。 我已經花了至少兩個小時盯着這個,並與我的老師交談,所以我知道我做對了一些事情。 但是關於while循環中發生的事情,我真的沒有任何頭緒。 朝正確方向的任何提示或推動都將非常有幫助,因此,至少我有一個起點可以很好,謝謝。
def cipher(x, dist):
alphabet = "abcdefghijklmnopqrstuvwxyz"
shifted = "xyzabcdefghijklmnopqrstuvw"
stringspot = 0
shiftspot = (x.find("a"))
aspot = (x.find("a"))
while stringspot < 26:
aspot = shifted(dist)
shifted =
stringspot = stringspot + 1
ans =
return ans
print(cipher("abcdef", 1))
print(cipher("abcdef", 2))
print(cipher("abcdef", 3))
print(cipher("dogcatpig", 1))
以下是一些提示和提示:
您應該驗證您的輸入。 特別是,請確保換檔距離是“合理的”,在合理的范圍內您可以處理。 我建議<= 25。
如果最大移位量為25,則字母“ a”加25將得到“ z”。 字母“ z”加25將超過字母的末尾。 但這不會超過兩個字母的結尾。 因此,這是處理環繞的一種方法。
用戶@zondo在他的解決方案中處理大寫字母。 您沒有提及是否要處理它們。 您可能需要與您的老師進行澄清。
如果您了解字典,則可能需要構建一個字典,以使將舊字母映射到新字母變得容易。
您需要認識到字符串被視為元組或列表-您可以對其進行索引。 我看不到您在代碼中這樣做。
您可以使用ord()
獲得字母的“ ASCII碼”數字。 這些數字是任意的,但是大寫和小寫數字在26的范圍內緊密組合在一起。這意味着您可以使用它們進行數學運算。 (例如, ord('a')
為97。不是超級有用。但是ord('b') - ord('a')
為1,這也許是個好消息。)
alphabet
和shifted
應該被認為是原始流和密文之間的映射。 循環的工作是遍歷流中的所有字母替換它們。 更具體地,字母中的alphabet
和shifted
的替代字母位於相同的索引處,因此是映射。 用偽代碼:
ciphertext = empty
for each letter in x
i = index of letter in alphabet
new_letter = shifted[i]
add new_letter to ciphertext
整個循環可以簡化為一個理解列表,但這不是您的主要關注點。
與上面的偽代碼中的操作相比,要進行更直接的映射,請查看詞典。
在代碼中突出的另一件事是shifted
的生成,該代碼應取決於dist
參數,因此不能僅對其進行硬編碼。 因此,如果dist
為5,則shifted
的第一個字母應為alphabet
0 + 5處的任意值,依此類推。 提示:模運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.