我需要创建一个函数,该函数在字母内替换字母13个字母(无需使用Encode)。我对Python相对较新,所以我花了一段时间才能找出一种无需使用编码的方法来做到这一点。
这是我到目前为止所拥有的。当我使用它以" Hello"之类的普通单词键入时,它可以正常工作,但是如果我穿过带有特殊字符的句子,我将无法弄清楚如何 JUST 包括字母的字母和跳过号码,完全或特殊字符。
def rot13(b):
b = b.lower()
a = [chr(i) for i in range(ord('a'),ord('z')+1)]
c = []
d = []
x = a[0:13]
for i in b:
c.append(a.index(i))
for i in c:
if i <= 13:
d.append(a[i::13][1])
elif i > 13:
y = len(a[i:])
z = len(x)- y
d.append(a[z::13][0])
e = ''.join(d)
return e
编辑
我尝试使用.isalpha(),但这似乎对我不起作用 - 当我使用它时,字符是由于某种原因而复制的。以下格式正确:
def rot13(b):
b1 = b.lower()
a = [chr(i) for i in range(ord('a'),ord('z')+1)]
c = []
d = []
x = a[0:13]
for i in b1:
if i.isalpha():
c.append(a.index(i))
for i in c:
if i <= 12:
d.append(a[i::13][1])
elif i > 12:
y = len(a[i:])
z = len(x)- y
d.append(a[z::13][0])
else:
d.append(i)
if message[0].istitle() == True:
d[0] = d[0].upper()
e = ''.join(d)
return e
从注释中关注。建议OP使用Isalpha,并想知道为什么这会引起重复(请参阅OP的编辑)
这与isalpha
的使用无关,这与第二个有关
for i in c:
不是必需的,并且正在引起重复。您应该删除它。相反,您只需使用index = a.index(i)
就可以做同样的事情。您已经这样做了,但是由于某种原因,附加到列表并引起混乱
任何时候在for i in c
循环中使用i
时,请使用index
变量。附带说明,在嵌套循环中,请不要重复使用相同的变量。这只是引起混乱...但这是代码审查的问题
假设您做对的一切应该可以起作用。