为什么python返回outofbounds而不是?

2024-10-03 19:19:23 发布

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

在第一个循环中似乎可以正常工作,但在第二个循环中不行。为什么?我认为它应该毫无问题地工作。你知道吗

import numpy as np

rows = 20
seatsInRow = 1000000
randRow = lambda: np.random.randint(1, rows)
randSeat = lambda: np.random.randint(1, seatsInRow)
cinema = [[1 for x in range(seatsInRow)] for y in range(rows)]

for i in range(1, rows):
    for j in range(1, seatsInRow):
        cinema[i][j] = 1

def checkIfDoubleSeatsLeft():
    for i in range(1, rows):
        for j in range(1, seatsInRow-1):
            if (cinema[i][j]==1 and cinema[i][j+1]==1):
                return True
    return False

def countSeatsLeft():
    count = 0
    for i in range(1, rows):
        for j in range(1, seatsInRow):
            if (cinema[i][j]==1):
                ++count
    return count

selectedRow = 0
selectedSeat = 0
seatsAvailability = True
while (seatsAvailability):
    selectedRow = randRow()
    selectedSeat = randSeat()
    if (selectedSeat < seatsInRow):
        if (cinema[selectedRow][selectedSeat]==1 and cinema[selectedRow][selectedSeat+1]==1):
            cinema[selectedRow][selectedSeat] = 0
            cinema[selectedRow][selectedSeat+1] = 0
    seatsAvailability = checkIfDoubleSeatsLeft()

remainedSeats = countSeatsLeft()
print("Percentage that's left is " + remainedSeats/20000000)

用完整代码更新了帖子。需要更多细节,在这里)


Tags: lambdainforreturnifcountnprange
1条回答
网友
1楼 · 发布于 2024-10-03 19:19:23

selectedSeat最多可以等于seatinsrow,这也是矩阵的Y维度。因此,您不能访问索引高于seatinsrow-1的矩阵。然而,你要做到的正是这两条线:

if (cinema[selectedRow][selectedSeat]==1 and cinema[selectedRow][selectedSeat+1]==1):
cinema[selectedRow][selectedSeat+1] = 0

因此,您必须确保randSeat()返回的值最多等于seatinsrow-1

randSeat = lambda: np.random.randint(1, seatsInRow - 1)

此外,不能将浮点与字符串合并,这需要正确的格式:

print("Percentage that's left is {}".format(remainedSeats/20000000))

相关问题 更多 >