Python:不想一起工作的列表

2024-10-05 14:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

class Area ():
    def __init__(self, pos, desc):
        self.pos = pos
        self.desc = desc

area1 = Area([0,0], "desc")
area2 = Area([0,1], "desc")
area3 = Area([0,2], "desc")
area4 = Area([1,1], "desc")
area5 = Area([2,1], "desc")
area6 = Area([3,1], "desc")
area7 = Area([3,2], "desc")

map_coordinates = [area1.pos, area2.pos, area3.pos, area4.pos, area5.pos, area6.pos, area7.pos]
player_pos = area1.pos

print type(map_coordinates)
print type(map_coordinates[2])
print type(player_pos)

def command(x):
    print "\n" #Just for readability
    global player_pos
    old_pos = player_pos
    if x == "north":
        player_pos[1] += 1
    if player_pos not in map_coordinates:
        player_pos = old_pos
        print "Can't go that way"
    else:
        print "You go north"

while True:
    x = raw_input("type 'north'  ")
    command (x)
    print player_pos

我想做的是让一个人去北方,如果坐标在地图坐标里,但是如果他们在边界之外,就阻止他们。然而,玩家可以永远北上,而且“不能走那条路”永远不会被打印出来。我猜“in”关键字不是很好,但所有类型都是列表。你知道吗


Tags: posselfmapdeftypeareadescplayer
1条回答
网友
1楼 · 发布于 2024-10-05 14:24:01

您的问题是,您正在原地修改列表,而不是在旧列表的基础上创建具有新值的新列表。你知道吗

这两行player_pos = area1.posold_pos = player_pos都不会创建新列表。相反,它们只是创建对在第一次Area调用中创建的相同2元素列表的新引用。每次修改player_pos的内容时,在引用列表的任何地方都可以看到相同的更改(因此area1.posmap_coordinates[0]player_posold_pos都将看到相同的更改)。你知道吗

我认为您可以通过使上面的两行都复制列表内容而不是仅仅创建一个新的引用来解决您的问题。复制列表的一个简单方法是调用list。尝试:

player_pos = list(area1.pos)

以及:

old_pos = list(player_pos)

相关问题 更多 >