因此,我是Python的新手,但遇到了我不明白的问题。这是代码:
(enemy和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
这是Shell中显示的内容:
[1, 2]
[2, 2]
[2, 2]
为什么startPos第二次打印时与众不同?我在功能中根本没有修改它
这是因为列表是可变的,因此将它们分配给两个不同的值意味着这两个值都引用相同的列表:
>>> x = [2, 2]
>>> y = x
>>> z = x
>>> z[1] = 0
>>> z
[2, 0]
>>> y
[2, 0]
您也可以通过查看id
s进行检查:
>>> id(y)
4300734408
>>> id(z)
4300734408
>>> id(x)
4300734408
>>>
解决此问题的一种方法是调用startPos = list(enemy)
,将其强制转换为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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句