2014-11-03 17 views
0

所以我是新来的Python,我有这个问题,我不明白。下面的代码:python函数增加列表中的变量没有明显的原因

(敌人playerPos是包含2个变量,这两个列表,例如[1,2])

def AIenemyTurn(enemy,playerPos): 
    startPos = enemy 
    print(startPos) 
    potEnemyPos = enemy 
    if playerPos[0] > enemy[0]: 
     potEnemyPos[0] += 1 
    elif playerPos[0] < enemy[0]: 
     potEnemyPos[0] -= 1 
    elif playerPos[1] > enemy[1]: 
     potEnemyPos[1] += 1 
    elif playerPos[1] < enemy[1]: 
     potEnemyPos[1] -= 1 
    if potEnemyPos not in rocks: 
     print(potEnemyPos) 
     print(startPos) 
     return potEnemyPos 
    else: 
     return startPos 

这是在壳中显示的内容:

[1, 2] 
[2, 2] 
[2, 2] 

为什么第二次打印时,startPos会有所不同吗?我没有在功能

+0

我不知道该游戏的逻辑是什么,但'ELIF playerPos [1]>敌人[1]'等将永远不会,除非'评估playerPos [0] ==敌人[0]'。这是你想要的吗? – ssm 2014-11-03 01:01:39

回答

1

这是因为列表是可变的,修改了它所有,因此指派他们两种不同的价值观意味着这两个值是指同一个列表:

>>> x = [2, 2] 
>>> y = x 
>>> z = x 
>>> z[1] = 0 
>>> z 
[2, 0] 
>>> y 
[2, 0] 

您还可以检查通过观察id S:通过调用startPos = list(enemy)

>>> id(y) 
4300734408 
>>> id(z) 
4300734408 
>>> id(x) 
4300734408 
>>> 

一种方法来解决这个问题,如铸造list使得一个新的列表:

>>> a = [1, 2] 
>>> b = list(a) 
>>> id(a) 
4300922320 
>>> id(b) 
4300922680 
>>> 

这是您编辑的代码:

def AIenemyTurn(enemy,playerPos): 
    startPos = list(enemy) 
    print(startPos) 
    potEnemyPos = enemy 
    if playerPos[0] > enemy[0]: 
     potEnemyPos[0] += 1 
    elif playerPos[0] < enemy[0]: 
     potEnemyPos[0] -= 1 
    elif playerPos[1] > enemy[1]: 
     potEnemyPos[1] += 1 
    elif playerPos[1] < enemy[1]: 
     potEnemyPos[1] -= 1 
    if potEnemyPos not in rocks: 
     print(potEnemyPos) 
     print(startPos) 
     return potEnemyPos 
    else: 
     return startPos 
+0

啊,非常感谢!我现在知道了 – Narayana 2014-11-03 00:50:08