Python 对于具有二维列表的循环

Python 对于具有二维列表的循环,python,multidimensional-array,Python,Multidimensional Array,我试图做一个函数,告诉用户他们所在房间的出口。每个子列表都是一个房间。所有非零数都是我的二维列表中每个子列表的出口。所有的零都不是出口。当我的地图的第一个值是[0,2,3,0]时,我连续4次得到输出“0房间没有出口”,这显然有2个和3个出口。我在想我做错了什么 map=[[0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0

我试图做一个函数,告诉用户他们所在房间的出口。每个子列表都是一个房间。所有非零数都是我的二维列表中每个子列表的出口。所有的零都不是出口。当我的地图的第一个值是
[0,2,3,0]
时,我连续4次得到输出“0房间没有出口”,这显然有2个和3个出口。我在想我做错了什么

map=[[0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3]]

class Player:
    def __init__(self, room_number = 0):
        self.room_number = room_number

    def exit_count(self):
        for n in range(0,4):
            if map[self.room_number][n]==0:
                print("There is no exit to room {0}\n".format(self.room_number))
            elif map[self.room_number][n]!=0:
                print("There is an exit to room {0}\n".format(self.room_number))
p = Player()

p.exit_count()

由于没有其他可能的答案,请放弃elif条件并使用else。除此之外,它还能工作

map=[[0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3], [0, 2, 3, 0], [0, 0, 4, 1], [1, 4, 0, 0], [2, 0, 0, 3]]

class Player: 
    def __init__(self, room_number = 0): 
        self.room_number = room_number

    def exit_count(self):
        for n in range(0,4):
            # print n
            # print map[self.room_number][n]
            if map[self.room_number][n] == 0:
                print("There is no exit to room {0}\n".format(self.room_number))
            else:
                print("There is an exit to room {0}\n".format(self.room_number))

p = Player(room_number=4)

p.exit_count()
出局

只需使用以下命令

def findexits(rooms):
    for room in rooms:
        yield [door for door in room if door]

exits = findexits(map) # this is a generator
# list(exits) => [[2,3], [..],...]
# If you wish to calculate the number of exits, employ the generator
# before consuming
exit_counts = [len(exit_) for exit_ in exits]
# this consumes it.

您可以通过各种方式修改
findexits

self.room\u number
是当前房间,
n
是出口号码。所以你应该打印
n
。为我打印“0号房间没有出口,0号房间有出口,0号房间有出口,0号房间没有出口”
def findexits(rooms):
    for room in rooms:
        yield [door for door in room if door]

exits = findexits(map) # this is a generator
# list(exits) => [[2,3], [..],...]
# If you wish to calculate the number of exits, employ the generator
# before consuming
exit_counts = [len(exit_) for exit_ in exits]
# this consumes it.