簡體   English   中英

Cipher / Decipher Python初學者計划

[英]Cipher/Decipher Python Beginner Program

問題:有人可以編輯我的2行代碼嗎?

只是想指出這是為了學校作業,所以我不想發布我的所有代碼來防止復制/抄襲問題。 由於我只對配置的一個小要求有困難,所以我認為我的所有代碼都不是必需的。

來自assgn的要求我指的是:

下一頁末= ORD(X)3
Newx將是一個整數。 要找出整數表示的字母,可以使用chr函數,如下所示:actualLetter = chr(x)編寫一個名為cipher的函數,它接受一個字符串和一個鍵(整數)。 該函數將字符串加密為另一個字符串並返回新字符串。 請注意,當我們達到'z'並且我們想要添加密鑰時,我們必須再次“滾動”到字母表中,因此ord('z')+ 3應該給我們ord('c')。

當我運行並測試我的程序並輸入'z'時,我沒有得到'c',我得到: 正在運行的程序截圖

我導致此問題的程序部分的代碼是:

example_string = letters[((ord(i)+key)%97)%26]
example2_string += letters[((ord(i)-key)%97)%26]

(example_string和example2_string是假名)

你不應該執行任何模97.如果你有一個97個字符的字母表,只執行模97。

這樣做的正確方法是:

  1. 確定該字符是否為字母;
  2. 將字母轉換為0到字母大小之間的數字(普通ABC當然是26個字符);
  3. 添加或減去鍵值,以模板的大小為模(對於這些操作,您只需先加/減然后再執行模數);
  4. 將結果數字再次轉換為字母,這是您的密文。

所以你會得到:

alphabetSize = ord('z') - ord('a') + 1

k = 3
c = 'z'

if (ord(c) >= ord('a')) | (ord(c) <= ord('z')):
    n = ord(c) - ord('a')
    n = (n + k) % alphabetSize
    ctc = chr(n + ord('a'))
else:
    ctc = c

print ctc

魔術(在這種情況下加密是因為在鍵k之前使用+ )當然是在if語句中的3行。 當然,這些可以合並 - 如果需要合並為一條線 - 但這更加整潔。

我認為模97處於錯誤的位置。 你應該做ord(i)%97-3然后它的工作原理。

chr(ord('a')+(ord('z')%97-3)%26)
example_string = letters[((ord(i)%97+key)%26]

你可以做的另一件事是從z中減去a然后像這樣做你的減法:

chr(ord('a')+(ord('z')-ord('a')-3)%26)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM