如何在Python中实现带标点处理的猪拉丁语句子转换?
猪拉丁语转换的标点处理修复方案
问题背景
要实现英文句子转猪拉丁语,但当前代码无法正确处理带标点的单词——标点会被当成单词的一部分,导致转换后缀加在标点后面,不符合预期。
现有代码
user_input = input('Enter a Sentence: ').lower() words = user_input.split() vowels = ['a', 'e', 'i', 'o', 'u'] for x, word in enumerate(words): if word[0] in vowels: words[x] = words[x]+ "way" else: has_vowel = False for y, letter in enumerate(word): if letter in vowels: words[x] = word[y:] + word[:y] + "ay" has_vowel = True break if(has_vowel == False): words[x] = words[x]+ "ay" pig_latin = ' '.join(words) print("Pig Latin: ",pig_latin)
问题现象
- 输入:
egg! - 期望输出:
eggway! - 实际输出:
egg!way
错误尝试分析
你尝试添加标点列表并增加elif分支,但出错原因是混淆了列表和字符串的操作:words是存储单词的列表,words[x:-1]取的是列表的切片(不是当前单词的字符串切片),所以导致字符串和列表拼接的错误。
修复方案
核心思路是先分离单词的主体部分和末尾标点,对纯单词主体做猪拉丁语转换,再把标点追加回去。具体代码修改如下:
user_input = input('Enter a Sentence: ').lower() words = user_input.split() vowels = ['a', 'e', 'i', 'o', 'u'] # 定义需要处理的标点集合 punct_list = {"!", "(", ")", "[", "]", "{", "}", ";", ":", "'", '"', "?", "/", "\\", "*", "<", ">", "-", "@", "^", "&", "_", ",", "~", "#", "%", ".", "$", "`"} for x, word in enumerate(words): # 分离单词主体和末尾标点 word_body = word punctuation = "" # 从后往前遍历,把末尾的标点都摘出来 while len(word_body) > 0 and word_body[-1] in punct_list: punctuation = word_body[-1] + punctuation word_body = word_body[:-1] # 对纯单词主体进行猪拉丁语转换 if len(word_body) == 0: # 极端情况:全是标点,直接保留 transformed = punctuation else: if word_body[0] in vowels: transformed = word_body + "way" else: has_vowel = False for y, letter in enumerate(word_body): if letter in vowels: transformed = word_body[y:] + word_body[:y] + "ay" has_vowel = True break if not has_vowel: transformed = word_body + "ay" # 把标点加回去 transformed += punctuation # 更新列表中的单词 words[x] = transformed pig_latin = ' '.join(words) print("Pig Latin: ", pig_latin)
测试验证
- 输入:
egg!→ 输出:eggway! - 输入:
hello, world!→ 输出:ellohay, orldway! - 输入:
xyz→ 输出:xyzay
内容的提问来源于stack exchange,提问作者KushKage
相关产品推荐
相关产品推荐

