为什么前五种颜色是红红的?

  • 本文关键字:颜色 五种 红红 python
  • 更新时间 :
  • 英文 :


结果是:

{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
alien_number is:30
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': '15', 'speed': 'fast'}
{'color': 'red', 'points': '15', 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': '15', 'speed': 'fast'}
{'color': 'red', 'points': '15', 'speed': 'fast'}
{'color': 'yellow', 'points': 15, 'speed': 'medium'}
{'color': 'red', 'points': '15', 'speed': 'fast'}
{'color': 'red', 'points': '15', 'speed': 'fast'}
{'color': 'yellow', 'points': 15, 'speed': 'medium'}

我认为前五个不应该全是红色的。我认为正确的顺序应该是红黄色 黄红黄,为什么结果令人困惑?


import rando
alien_0={'color':'green','points':5,'speed':'slow'}
alien_1={'color':'yellow',"points":15,'speed':'medium'}
alien_2={'color':'red','points':10,'speed':'fast'}
aliens_1=[]
color=('red','yellow','green')
for alien_number in range(30):
random_num=random.randint(0,len(color))-1  #create a random number in order to get a random color
if color[random_num] == 'green':
aliens_1.append(alien_0)  
elif color[random_num] == 'red':
aliens_1.append(alien_2)  
else :
aliens_1.append(alien_1)  
for alien in aliens_1[:5]:
print(alien)
print("alien_number is:"+str(len(aliens_1)))
for alien in aliens_1[0:5]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['points']='10'
alien['speed']='medium'  
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['points']='15'
alien['speed']='fast'
for alien in aliens_1[0:10]:
print(alien)

您不小心更改了整个字典,而不是您希望字典表示的特定外星人。

现在,只需在每次将外星人词典附加到随机外星人列表中时添加.copy()即可。

if color[random_num] == 'green':
aliens_1.append(alien_0.copy()) 

将来,这可能最好用类而不是字典来处理。

当您分配多个变量来反映字典时,它们不会复制其值。它们彼此是同一本字典。更改一个更改每个更改。使用.copy()可以解决这个问题,但类对于这种类型的使用将更加灵活,并且应该有更少的"陷阱"问题。

相关内容

最新更新