ROT 13 密码:创建函数 Python
ROT 13 Cipher: Creating a Function Python
我需要创建一个函数,用字母表中它后面的 13 个字母替换一个字母(不使用编码)。我对 Python 比较陌生,所以我花了一段时间才想出一种不使用 Encode 的方法。
这是我目前所拥有的。当我用它来输入像 "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 循环有关
for i in c:
不是必需的,并且会导致重复。你应该删除它。相反,您可以仅使用 index = a.index(i)
来执行相同的操作。您已经这样做了,但出于某种原因改为附加到列表并造成混淆
只要在 for i in c
循环中使用 i
,就可以随时使用 index
变量。附带说明一下,在嵌套的 for 循环中尽量不要重用相同的变量。它只会引起混乱......但这是代码审查的问题
假设您做对了一切,它应该会起作用。
我需要创建一个函数,用字母表中它后面的 13 个字母替换一个字母(不使用编码)。我对 Python 比较陌生,所以我花了一段时间才想出一种不使用 Encode 的方法。
这是我目前所拥有的。当我用它来输入像 "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 循环有关
for i in c:
不是必需的,并且会导致重复。你应该删除它。相反,您可以仅使用 index = a.index(i)
来执行相同的操作。您已经这样做了,但出于某种原因改为附加到列表并造成混淆
只要在 for i in c
循环中使用 i
,就可以随时使用 index
变量。附带说明一下,在嵌套的 for 循环中尽量不要重用相同的变量。它只会引起混乱......但这是代码审查的问题
假设您做对了一切,它应该会起作用。