我只想打印字母,但它只打印ASCII的特殊字符。我的代码:
import string
def caesar(shift):
alphabet = string.ascii_lowercase + string.ascii_uppercase
dict={}
emptylist=[]
int(shift)
for x in alphabet:
emptylist.append(x)
code = ""
for letters in emptylist:
code = chr(ord(letters) + shift)
dict[letters]=code
return dict
caesar(12)
我的输出:
'm': 'y', 'l': 'x', 'o': '{', 'n': 'z', 'q': '}', 'p': '|', 's': '\x7f', 'r': '~', 'u': '\x81', 't': '\x80', 'w': '\x83', 'v': '\x82', 'y': '\x85', 'x': '\x84', 'z': '\x86'
正确输出:
'm': 'y', 'l': 'x', 'o': 'a', 'n': 'z', 'q': 'c', 'p': 'b', 's': 'e', 'r': 'd', 'u': 'g', 't': 'f', 'w': 'i', 'v': 'h', 'y': 'k', 'x': 'j', 'z': 'l'
让我们来看一个特别的错误:
o: '{'
。在注意,}:
ord('o')
是111,所以让我们看看range(111,130)
中的整数的{从
o
开始,移动12,将您带到{
字符:所以你得到错误输出的原因是因为你的公式
^{pr2}$没有考虑到如果移位将您从与
a-z
或A-Z
关联的ords中跳出来时会发生什么。(注意a-z
和A-Z
的ord范围也不是连续的!)在以下是有关如何修复的提示:
但是
结果是
IndexError: string index out of range
。这是因为len(alphabet)
是52,而且不知怎么的,我们需要52才能回到0。您可以使用^{} modulo operator :
使用
ord()
并更改字符代码不会将生成的字符限制在字典中。在我只需要在你的字典里找到字母的索引,移动它,然后使用模运算符:
测试(字典不能保持顺序,所以很难阅读):
^{pr2}$相关问题 更多 >
编程相关推荐