【发布时间】:2015-11-03 19:39:57
【问题描述】:
我在加密大写字母时遇到问题,例如如果消息是 COMPUTING IS FUN 关键字是 GCSE 我应该得到 JRFUBWBSN LL KBQ 但我的实际结果是 xftipkpgb zz ype。这个结果既没有正确的字母也没有大写。任何帮助表示赞赏
message = input('\nenter message: ')
keyword = input('enter keyword: ')
def chr_to_inta(char):
return 0 if char == 'Z' else ord(char)-64
def int_to_chra(integer):
return 'Z' if integer == 0 else chr(integer+64)
def add_charsa(msg, key):
return int_to_chr(( chr_to_int(msg) + chr_to_int(key)) % 26 )
def chr_to_int(char):
return 0 if char == 'z' else ord(char)-96
def int_to_chr(integer):
return 'z' if integer == 0 else chr(integer+96)
def add_chars(msg, key):
return int_to_chr(( chr_to_int(msg) + chr_to_int(key)) % 26 )
def vigenere(message, keyword):
keystream = cycle(keyword)
new = ''
for msg in message:
if msg == ' ': # adds a space
new += ' '
elif 96 < ord(msg) < 123: # if lowercase
new += add_chars(msg, next(keystream))
else: # if uppercase
new += add_charsa(msg, next(keystream))
return new
new = vigenere(message, keyword)
print('your encrypted message is: ',new)
【问题讨论】:
-
我们不是已经这样做了吗...stackoverflow.com/questions/33442220/…
-
上次我们加了空格,现在我需要做大写字母。我已经尝试添加三个与其他函数类似的新函数,但现在它们返回一个大写的“Z”而不是小写的,它不起作用,我一直在寻找想法
-
首先,
add_chars有两个定义,add_charsa没有定义。其次,你需要确保add_charsa调用你的新函数而不是你的旧函数,即它应该return int_to_chra(( chr_to_inta(msg) + chr_to_inta(key)) % 26 ) -
我的错,从 python 复制时出错了
-
更改
return语句以反映您的新功能,您应该会很好
标签: python encryption uppercase lowercase vigenere