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

时间:2020-01-15 15:08:42

标签: 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)

1 个答案:

答案 0 :(得分:0)

您不小心更改了整个词典,而不是想要词典表示的特定外星人。

现在,每次将外星人字典添加到外星人的随机列表中时,只需添加.copy()

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

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

分配多个变量以反映字典时,它们不会复制其值。它们是彼此相同的字典。换一换一换。使用.copy()可以解决这个问题,但是类对此类型的使用会更加灵活,并且应该减少“陷阱”问题。