Python新手编写Pig Latin转换器出现字符缺失问题寻求解决方案
问题诱因
核心问题出在你使用str.replace()方法删除首字母的逻辑上。replace()方法默认会替换字符串中所有匹配的目标字符,而不是仅替换第一个出现的字符。
以出错的单词interesting为例:
- 它的首字符是
i,你执行replace("i", "")时,会把字符串里所有的i都删除 - 原单词
interesting包含两个i:开头的i和倒数第四个字符的i - 两个
i都被删除后就得到了nterestng,拼接首字母i和ay后就变成了错误的nterestngiay,正好缺失了中间的i。
修复方案
不要用replace()处理首字母,直接用Python字符串切片操作即可,切片只会截取你指定位置的字符,不会影响其他位置的相同字符。
把原来生成new_w的那行代码替换为:
new_w = wor_te[1:] + wor_te[0] + "ay"
这里wor_te[1:]表示取单词从第二个字符到末尾的所有内容,wor_te[0]是首字母,直接拼接ay就符合Pig Latin的转换规则。
修正后的完整代码如下:
def pig_latin(text): say = [] # 拆分文本为单词 words = text.split() for _, wor_te in enumerate(words): # 索引用不到可以用_占位 # 生成Pig Latin单词并加入列表 new_w = wor_te[1:] + wor_te[0] + "ay" say.append(new_w) # 把列表拼接为完整句子 return " ".join(say) print(pig_latin("hello how are you")) # 输出 "ellohay owhay reaay ouyay" print(pig_latin("programming in python is fun")) # 输出 "rogrammingpay niay ythonpay siay unfay" print(pig_latin("writing interesting functions")) # 输出 "ritingway nterestingiay unctionsfay"
运行修正后的代码,三个输出都会完全符合预期。
内容的提问来源于stack exchange,提问作者fort3
相关产品推荐
相关产品推荐

