这是书上的一个习题,大概意思就是创建一个音乐家列表,然后现在要在列表的每个元素之前加上“The Great”字样,但是在运行的时候出现了一些问题,求问大家
代码如下:
def show_magicians(magicians):
for magician in magicians:
print(magician)
#打印列表函数
def make_great(magicians,new_magicians):
new_magicians = [] '''创建一个空列表用来存放修改后的元素'''
for magician in magicians:
magician = "The great " + magician
new_magicians.append(magician)
#print(new_magicians) 如果在函数内部打印新的列表,则结果没有问题
return new_magicians
#加入字样函数
magicians = [ 'Tom' , 'Jack' , 'Alice' ]
new_magicians = []
make_great(magicians,new_magicians)
#print(new_magicians) 如果在此处打印新的列表,会发现刚才make_great函数没有起作用,打印的是一个空列表,new_magicians列表并没有被修改
show_magicians(new_magicians)
#在此处调用打印函数,结果也不正确,仍是空列表
不知道这个程序哪出问题了,列表在函数内部已经被修改了,但是跳出函数之后列表又变成初始的空列表了
你不可以用for magician in magicians:
你需要用for i in range(len(magicians)):
然后遍历magicians[i]
magician 是一个浅表副本,它并不指向magicians的地址,改它没用。
这应该是全局与局部变量的问题,在主函数运行过程中new_magicians ,一直是空的,new_magicians = make_great(magicians,new_magicians),修改下就好了
你光return了 没接收啊
new_magicians = make_great(magicians)
局部变量不影响全局变量
def show_magicians(magicians):
for magician in magicians:
print(magician)
#打印列表函数
def make_great(magicians):
new_magicians=[]
for magician in magicians:
magician = "The great " + magician
new_magicians.append(magician)
#print(new_magicians) 如果在函数内部打印新的列表,则结果没有问题
return new_magicians
#加入字样函数
magicians = [ 'Tom' , 'Jack' , 'Alice' ]
new_magicians = make_great(magicians)
#print(new_magicians) 如果在此处打印新的列表,会发现刚才make_great函数没有起作用,打印的是一个空列表,new_magicians列表并没有被修改
show_magicians(new_magicians)
#在此处调用打印函数,结果也不正确,仍是空列表
这也改下也可以
def show_magicians(magicians):
for magician in magicians:
print(magician)
#打印列表函数
def make_great(magicians,new_magicians):
for magician in magicians:
magician = "The great " + magician
new_magicians.append(magician)
#print(new_magicians) 如果在函数内部打印新的列表,则结果没有问题
return 0
#加入字样函数
magicians = [ 'Tom' , 'Jack' , 'Alice' ]
new_magicians=[]
make_great(magicians,new_magicians)
#print(new_magicians) 如果在此处打印新的列表,会发现刚才make_great函数没有起作用,打印的是一个空列表,new_magicians列表并没有被修改
show_magicians(new_magicians)
#在此处调用打印函数,结果也不正确,仍是空列表