1.魔术师:创建一个包含魔术师名字的列表,并将其传递给一个名为show_magicians()的函数,这个函数打印列表中每个魔术师的名字
解:
def show_magicians(magicians):
for magician in magicians:#将列表中的值给临时变量magician达到遍历的目的
print(magician)
magicians=['John','Mike','Aha']
show_magicians(magicians
结果:
John
Mike
Aha
2.了不起的魔术师:在完成第一个练习的基础上,编写一个make_great()的函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样:"the Great".调用函数show_magicians(),确认魔术师列表确实变了
错误示范:
def make_great(magicians):
for magician in magicians:
magician="the Great"+magicians.pop()#从后往前将列表元素+‘the Great’
magicians.append(magician) #将改过后的元素再添加进去,此时元素的值就变成原来的值+‘the Great’
magicians=['John','Mike','Aha']
show_magicians(magicians)
make_great(magicians)
show_magicians(magicians)
结果:
John
Mike
Aha
John
Mike
the Greatthe Greatthe GreatAha #这里之所以会出错就是因为看起来是从后往前依次遍历但其实在删去最后一个元素的下一步就又将改过的元素放回了原来的列表中,所以其实一直改的就只有最后一个元素的值
修正后的代码:
i=0 #定义一个变量来储存位置信息,达到遍历的目的
def make_great(magicians):
for i in range(0,len(magicians)): #控制变量的变化范围
magician=magicians.pop(i) #遍历改变
magician="the Great"+' '+magician
magicians.insert(i,magician)
magicians=['John','Mike','Aha']
show_magicians(magicians)
make_great(magicians)#分别调用观察是否达到目的
show_magicians(magicians)
结果:
John
Mike
Aha
the Great John
the Great Mike
the Great Aha
3. 不变的魔术师:修改之前的程序,在调用函数make_great()时,向它传递魔术师列表的副本。由于不想修改原始列表,请返回修改后的列表,将其储存到另一个列表中。分别使用这两个列表来调用show_magicians( ),确认一个列表包含的是原来魔术师的名字,而另一个列表包含的是添加了字样的名字
解答:
def show_magicians(magicians):
for magician in magicians:
print(magician)
i=0 #定义一个变量来储存位置信息,达到遍历的目的
def make_great(magicians):
for i in range(0,len(magicians)): #控制变量的变化范围
magician=magicians.pop(i) #遍历改变
magician="the Great"+' '+magician magicians.insert(i,magician)
return magicians #这里记得要有返回值,而且注意return所在行的缩进,在for循环进行完之后返回
magicians=['John','Mike','Aha']
show_magicians(magicians)#确保创建列表正确,好习惯!
print('\n')
another_magicians=make_great(magicians[:])#传递切片,不更改原来的列表,且创建另一个列表来存储改变后的列表show_magicians(magicians)#分别调用输出函数,观察原来的列表是否发生变化,更改后的列表是否发生更改
print('\n')
show_magicians(another_magicians)
结果:
John
Mike
Aha
John
Mike
Aha
the Great John
the Great Mike
the Great Aha