用下一个使用ascii字母的字母替换字母时出错



这个问题是已知的:给定一个句子,返回字母表中所有字母都被1转置的句子,但前提是字母是a-y。

我知道类似的问题在这里已经被问过很多次了,但我在我的案例中应用的解决方案实际上来自于其中一个stackoverflow答案,函数仍然向前跳2-3个字母:

from string import ascii_letters
def inverter(sentence):
for x in sentence:
if x in ascii_letters and x!= 'z' and x != ' ':
sentence = sentence.replace(x,ascii_letters[ascii_letters.index(x)+1])
else:
sentence = sentence
return sentence
sent3 = 'a quick brown fox jumps over the lazy dog'
inverter(sent3)

输出:

'c uwkem cuqzq hqz kwnqu qwfu uif mczz eqh'

突变循环中可能出了什么问题?

使用ord将每个特定字符转换为数字形式,添加1,并使用chr将整数转换回字符:

from string import ascii_letters
def inverter(sentence):
a_to_y = ascii_letters[:25]
s = ''
for i in sentence:
if i in a_to_y:
i = chr(ord(i) + 1)
s += i
return s
sent3 = 'a quick brown fox jumps over the lazy dog'
print(inverter(sent3))

输出:

b rvjdl cspxo gpy kvnqt pwfs uif mbzz eph

这里有一条线:

def inverter(sentence):
return ''.join([chr(ord(i) + 1) if i in 'abcdefghijklmnopqrstuvwxy' else i for i in sentence])
sent3 = 'a quick brown fox jumps over the lazy dog'
print(inverter(sent3))

以下是您的for循环不起作用的原因:

str.replace方法将指定字符串的所有出现替换为其他指定字符串,而不仅仅是一个。

假设你的句子是"apple anna"

对于for x in sentence:,第一个字母将是"a"

由于"a"满足条件if x in ascii_letters and x!= 'z' and x != ' ':"a"将被"b"替换,但不仅是那个"a",而且是该字符串中所有其他"a"

当迭代到达下一个"a"时,"a"将已经是"b",因此前一个"a"将被替换为"c",然后下一个前者将是"c""d"

这同样适用于您的字符串,其中包含大多数字母。

最新更新