练习题8-9 魔术师:
1.创建一个包含魔术师名字的列表,并将其传递给一个名为show_magicians()的函数,这个函数打印列表中每个魔术师的名字。
def show_magicians(magician_b):
"""显示魔术师"""
for magician in magician_b:
print(magician)
m = ['魔术师1', '魔术师2', '魔术师3']
show_magicians(m)
执行结果:
练习题8-10 了不起的魔术师:
2.在你为完成以上练习而编写的程序中,编写一个名为make_great()函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样“the great”,调用函数show_magicians(),确认魔术师列表确实变了。
o
def show_magicians(magician_b):
"""显示魔术师"""
for magician in magician_b:
print(magician)
def make_great(magician_a):
"""了不起的魔术师"""
i = 0
while i < len(magician_a):
magician_a[i] = 'thegreat'.title() + magician_a[i]
i += 1
return magician_a
m = ['魔术师1', '魔术师2', '魔术师3']
make_great(m) #调用函数修改列表
show_magicians(m) #调用函数查看列表,发现确实改变
执行结果:
练习题8-11 不变的魔术师:
3.修改你上面的代码,在调用函数make_great()时,向它传递魔术师列表的副本,由于不想修改原始列表,请返回修改后的列表,并将其存储到另一个列表中,分别使用这两个列表来调用show_magicians(),确认一个列表包含的是原来的魔术师名字,而另一个列表包含的是添加了字样“the great”的魔术师名字。
其实8-10的方法可以接着用,只需要调用make_great()
函数时传递副本即可:make_great(m[:])
但是这种方法不符合这道题的意思,这道题明确告诉你,需要创建空列表,并把新值存到新列表里。
def show_magicians(magician_b):
"""显示魔术师"""
for magician in magician_b:
print(magician)
def make_great(magician_a,magician_b):
"""了不起的魔术师"""
while magician_a: #这句话的意思是,只要magician_a列表不为空,循环继续
magician = 'thegreat'.title() + ' ' + magician_a.pop().title()
magician_b.append(magician)
return magician_b
m = ['魔术师1', '魔术师2', '魔术师3']
n = []
make_great(m[:], n) #传递参数,传递的是副本,建议深入理解m[:],而不是死记硬背
show_magicians(n) #查看新列表
show_magicians(m) #查看原列表
执行结果: