问题是一个已知的问题:给定一个句子,请返回该句子,其所有字母在字母表中均由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'
突变循环中可能出什么毛病?
使用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"
在字符串s
通过迭代到达下一个时间"a"
时,"a"
就已经是一个"b"
,那么前者"a"
将与被替换"c"
,然后将成为下一个前"c"
到"d"
!
同样的情况也适用于你的字符串,其中包含大多数字母。
这是有帮助的!我有什么方法可以研究像这样的循环陷阱吗?谢谢!!
@Anish我已经添加了解释。
太完美了!非常感谢!我假设它是替换所有实例的for循环,而不是string.replace()