所以我正在做一个相当简单的任务。 我有魔术师的名单:
magicians_1 = ["Merlin","Harry Potter","Sabrina"]
show_magicians函数的目的是仅打印出魔术师的姓名:
def show_magicians(magicians):
for magician in magicians:
print(magician)
但是我的目标是编写一个函数,通过在名称的末尾添加“ Great”来更改魔术师的名称:
def make_great(magicians):
for magician in magicians:
magician = magician.replace(magician, magician + " the Great")
return(magician)
这是我想出的。但是,如果我使用清单magicians_1调用make_great wit函数,然后使用magicians_1调用show_magicians(),名称将保持不变。
如果我在make_great()中使用print()魔术师而不是将其返回,它将打印出正确的名称。但这不是功能的目标。我想永久更改名称。
所以我的问题是,如何通过调用show_magicians来更改打印出正确结果的名称?
答案 0 :(得分:1)
这是因为您正在使用for ... in循环。这意味着magician
是该项目在magicians[i]
的副本。要修改数组中的项目,您需要使用索引来引用原始数组。
def make_great(magicians):
for i in range(len(magicians)):
magicians[i] = magicians[i] + " the Great"
return(magician)
答案 1 :(得分:0)
您只是在重新绑定循环变量。您实际上必须重新绑定列表索引。例如:
def make_great(magicians):
for i, magician in enumerate(magicians):
magicians[i] = magician + " the Great"
除了虚假的return
语句外,您的代码与以下代码大致相同,从而使其更加显而易见:
for i in range(len(magicians)):
magician = magicians[i]
magician = something # why would magicians[i] be affected by this line?
答案 2 :(得分:0)
您在这里遇到了几个问题:
for i in range(len(magicians)): magicians[i] = magicians[i] + ' the Great'
答案 3 :(得分:0)
其他人已经回答了您原来的解决方案不起作用的原因。这是一个可行的解决方案的另一个示例,该解决方案使用列表理解。
def make_great(magicians):
magicians = [r + ' the Great' for r in magicians]
return magicians