1

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

我知道类似的问题已经在这里被问过很多次了,但是我在我的案例中应用的解决方案实际上来自这些 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'

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

4

1 回答 1

2

用于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"所有其他s "a"

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

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

于 2020-11-28T22:40:05.887 回答