为什么会有 %26 (Python)?
Why is there a %26 (Python)?
我试图在不知道凯撒密码的密钥的情况下破译来自用户的文本。
我大概能理解其中的大部分,但我不明白为什么他们在第 8 行使用 mod 26
alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z']
print('write the message you want to decode?')
inputString = input()
inputString = inputString.lower()
transAlphabet = {}
def createDict(shift):
for i in range(0,26):
letter = alphabet[i]
transAlphabet[letter]=alphabet[(i+shift)%26]
def encodeMessage(message):
cypherText = ''
for letter in message:
if letter in transAlphabet:
cypherText = cypherText + transAlphabet[letter]
else:
cypherText = cypherText + letter
print(cypherText)
for i in range(0,26):
createDict(i)
encodeMessage(inputString)
如果有人能帮助我,那将非常有帮助谢谢!
取模 %26
是为了让字母表循环,当你在 z
回来在 a
alph[(i + shift) % 26]
与 i=20
和 shift=10
的示例
- 如果没有取模,您会希望到达数组中的索引
30
,但它并不存在
- 使用模运算,您将到达数组中的索引
30%26 = 4
,字母 e
但是你的算法也有点奇怪,我会为每辆车即时完成换档,但你的解决方案对于长文本可能更有效,因为你不需要每次都计算换档。
之前不计算移位的字母表看起来像这样
from string import ascii_lowercase
alphabet = ascii_lowercase
def encode_message(message, shift):
cypher_text = ''
for letter in message:
letter_idx = alphabet.index(letter)
cypher_text = cypher_text + alphabet[(letter_idx + shift) % 26]
return cypher_text
def decode_message(message, shift):
cypher_text = ''
for letter in message:
letter_idx = alphabet.index(letter)
cypher_text = cypher_text + alphabet[(26 + letter_idx - shift) % 26]
return cypher_text
我试图在不知道凯撒密码的密钥的情况下破译来自用户的文本。
我大概能理解其中的大部分,但我不明白为什么他们在第 8 行使用 mod 26
alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z']
print('write the message you want to decode?')
inputString = input()
inputString = inputString.lower()
transAlphabet = {}
def createDict(shift):
for i in range(0,26):
letter = alphabet[i]
transAlphabet[letter]=alphabet[(i+shift)%26]
def encodeMessage(message):
cypherText = ''
for letter in message:
if letter in transAlphabet:
cypherText = cypherText + transAlphabet[letter]
else:
cypherText = cypherText + letter
print(cypherText)
for i in range(0,26):
createDict(i)
encodeMessage(inputString)
如果有人能帮助我,那将非常有帮助谢谢!
取模 %26
是为了让字母表循环,当你在 z
回来在 a
alph[(i + shift) % 26]
与 i=20
和 shift=10
- 如果没有取模,您会希望到达数组中的索引
30
,但它并不存在 - 使用模运算,您将到达数组中的索引
30%26 = 4
,字母e
但是你的算法也有点奇怪,我会为每辆车即时完成换档,但你的解决方案对于长文本可能更有效,因为你不需要每次都计算换档。
之前不计算移位的字母表看起来像这样
from string import ascii_lowercase
alphabet = ascii_lowercase
def encode_message(message, shift):
cypher_text = ''
for letter in message:
letter_idx = alphabet.index(letter)
cypher_text = cypher_text + alphabet[(letter_idx + shift) % 26]
return cypher_text
def decode_message(message, shift):
cypher_text = ''
for letter in message:
letter_idx = alphabet.index(letter)
cypher_text = cypher_text + alphabet[(26 + letter_idx - shift) % 26]
return cypher_text