使用 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"
!
这同样适用于您的字符串,其中包含大部分字母。
这个问题是一个已知问题:给定一个句子,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"
!
这同样适用于您的字符串,其中包含大部分字母。