0

我正在用python设计一个程序。
我在火车上有 67 个座位,我需要将座位分成几排,每排可以有 5 个座位​​,最后一排有 2 个座位。
我不知道我将如何设计这个。我正在粘贴我设计的代码。

类预订(对象):

    def __init__(self, 席位, perrow, lastrow):
        self.seats = 座位
        self.perrow = perrow
        self.lastrow = lastrow
        self.allseats = []
        导入数学
        从十进制导入十进制
        rows = math.ceil((Decimal(seats)/Decimal(perrow)))
        对于我在范围内(int(行)):
            self.allseats.append([])
        iii = 0
        iii = 1
        对于范围内的 ii(int(rows)):
            对于范围内的 b(perrow):
                self.allseats[iii].append({'SEATNO'+str(iiii): '免费'})
                iii = iii +1
            iii = iii + 1
        对于我在范围内(perrow-lastrow):
            self.allseats[-1].pop()
        打印 self.allseats

上面的代码工作正常,但效率不高。如果有任何有效的方法,请告诉我这对我有帮助

4

1 回答 1

0
def make_seats(seats, perrow, lastrow):
    full_rows = seats // perrow
    return [['Free' for _ in range(perrow)]
            for _ in range(full_rows)] + [['Free' for _ in range(lastrow)]]

您实际上并不需要该lastrow参数,因为它必须是seats % perrow,但由于它是您输入的一部分,因此我使用了它。

无论如何,要理解这意味着什么,让我们分解一下。

首先,完整的排数只是容纳所有座位所需的排数,向下取整。

现在,每一行都是['Free' for _ in range(perrow)]- 即perrow字符串的副本'Free'

我们有full_rows完整的行,因此嵌套列表理解。

然后我们必须再增加一排lastrow座位。

于 2013-11-12T06:10:38.767 回答