使用 ascii_letters 将字母替换为下一个字母时出错

Error in replacing alphabets with the next one using ascii_letters

这个问题是一个已知问题:给定一个句子,return 这个句子的所有字母在字母表中都被 1 调换,但前提是字母是 a-y。

我知道类似的问题已经被问过很多次了,但我在我的案例中应用的解决方案实际上来自这些 Whosebug 答案之一,而且该函数仍然保持向前跳转 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 to convert each of the certain characters into its number form, add 1, and use 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",还有那个字符串中的所有 other "a"s

当迭代到达下一个"a"时,"a"已经是一个"b",所以前一个"a"将被替换为一个"c",然后下一个就是"c""d"!

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