python从入门到实践的一道题不知道分别在哪?

创建30个外星人,给前三个重新赋值,并打印列表前5个字典内容。

书本6.4.1的例题,自己编的和书上的不一样,还看不出有什么差别,求解释下:

这是我自己编的:

aliens = []
new_alien = {'colour': 'green', 'point': '5', 'speed': 'slow'}

for alien in range(0, 30):
    aliens.append(new_alien)
print(aliens)

for alien in aliens[0: 3]:
    if alien['colour'] == 'green':
        alien['colour'] = 'yellow'
        alien['point'] = '10'
        alien['speed'] = 'medium'
 for laien in aliens[0: 5]:
     print(laien)
# 这是书上的:
aliens = []

for alien in range(0, 30):
    new_alien = {'colour': 'green', 'point': '5', 'speed': 'slow'}
    aliens.append(new_alien)
print(aliens)

for alien in aliens[0: 3]:
    if alien['colour'] == 'green':
        alien['colour'] = 'yellow'
        alien['point'] = '10'
        alien['speed'] = 'medium'
for laien in aliens[0: 5]:
     print(laien)

1是 for laien in aliens[0: 5]: 前多了个空格

2是你new_alien字典在for循环外创建,
字典是按地址传递的,当把同一个字典多次添加到列表中时,列表中每个字典都是同一个地址。
改变其中一个字典的属性,列表中所有字典都会一起改变。
应该是在循环中每次都创建一个新的字典,让列表中每个字典都是不同的地址。

如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮