我正在为类编写一个Caesar密码程序,我知道这不是最整洁的方法,但它确实有效,我的问题是,对于中间的if/else位,有没有比在else部分使用newcode=newcode更好的方法?看起来很笨重,但我是一个完全的新手,这是我第一次想到的
plaintext = input("Input your message here: ")
shift = input("Input cyclic shift here: ")
message = ""
try:
shiftn = int(shift)
except ValueError:
print("Cyclic shift must be a number")
else:
for i in plaintext:
code = ord(i)
if (32<=code<=47) or (58<=code<=64):
newl = chr(code)
message = message + newl
elif (65<=code<=90):
newcode = code + shiftn
if newcode > 90:
newcode = 64 + (newcode - 90)
else:
newcode=newcode
newl = chr(newcode)
message = message + newl
elif (97<=code<=122):
newcode = code + shiftn
if newcode > 122:
newcode = 96 + (newcode - 122)
else:
newcode = newcode
newl = chr(newcode)
message = message + newl
elif (48<=code<=57):
newcode = code + shiftn
if newcode > 57:
newcode = 47 + (newcode - 57)
else:
newcode = newcode
newl = chr(newcode)
message = message + newl
print("your encrypted message is: ", message)
由于所有不同范围的代码都是相同的,所以您可以将它们放在一个列表中,并在列表上循环,在第一次匹配后中断。而且,
else
和chr(ord(i))
一样是冗余的。你知道吗另外,您在这里重新创建了模
%
,还可以这样计算newcode
(但不确定这是否更简单):相关问题 更多 >
编程相关推荐