如何修复猪拉丁语(Pig Latin)代码?输入后输出原内容问题排查
问题分析与修复方案
嘿,我一眼就看出问题啦!你的代码逻辑本身是对的,但犯了一个Python里很常见的小错误——你修改的只是循环中的临时变量item,并没有真正更新原列表word_list里的元素。
为什么会这样?
Python里的字符串是不可变对象,当你执行for item in word_list循环时,item只是原列表中每个元素的一个临时副本。你对item做的任何拼接、赋值操作,都只会改变这个副本的值,不会同步回原列表。所以最后用" ".join(word_list)输出时,还是用的最初未修改的原列表内容,自然就直接输出原输入了。
修复方案
这里给你三种可行的修复方式,选你顺手的用就行:
方案1:新建列表存储处理后的单词(最直观)
def pig_latin(string_x): word_list = string_x.split() processed_words = [] # 新建空列表存处理后的结果 for item in word_list: if item[:1].lower() in ["a",'e','i','o','u']: processed_words.append(item + 'ay') else: processed_words.append(item[1:] + item[:1] + 'ay') print(" ".join(processed_words)) x = input() pig_latin(x)
方案2:用enumerate遍历索引,直接修改原列表
def pig_latin(string_x): word_list = string_x.split() # 用enumerate同时获取索引和元素,直接通过索引修改原列表 for idx, item in enumerate(word_list): if item[:1].lower() in ["a",'e','i','o','u']: word_list[idx] = item + 'ay' else: word_list[idx] = item[1:] + item[:1] + 'ay' print(" ".join(word_list)) x = input() pig_latin(x)
方案3:用列表推导式简化代码(Pythonic风格)
def pig_latin(string_x): word_list = string_x.split() # 一行完成所有单词的处理 processed_words = [ word + 'ay' if word[:1].lower() in {'a','e','i','o','u'} else word[1:] + word[:1] + 'ay' for word in word_list ] print(" ".join(processed_words)) x = input() pig_latin(x)
内容的提问来源于stack exchange,提问作者user9605362
相关产品推荐
相关产品推荐

