python 中随机 class 的 ValueError 不工作
ValueError with random class in python not working
代码如下:
import random
import numpy as np
class Room:
def __init__(self, name, contents):
self.name = name
self.contents = contents
rooms = np.zeros((11, 11))
maxRooms = 7
possibleNextRoom = []
def resetLevel():
global rooms
for r in range(len(rooms[0])):
for c in range(len(rooms[1])):
rooms[r][c] = 0
possibleNextRoom = []
halfHeight = int(len(rooms[1]) / 2)
halfWidth = int(len(rooms[0]) / 2)
rooms[halfWidth][halfHeight] = 1
def countRooms():
global rooms
roomCount = 0
for r in range(len(rooms)):
for c in range(len(rooms)):
if rooms[r][c] == 1:
roomCount += 1
return roomCount
def findPossibleRooms():
for r in range(len(rooms) - 1):
for c in range(len(rooms) - 1):
if rooms[r][c] == 1:
if rooms[r][c+1] != 1:
possibleNextRoom.append((r, c+1))
if rooms[r][c-1] != 1:
possibleNextRoom.append((r, c-1))
if rooms[r-1][c] != 1:
possibleNextRoom.append((r-1, c))
if rooms[r+1][c] != 1:
possibleNextRoom.append((r+1, c))
def addRoom():
nextRoom = random.randrange(0, len(possibleNextRoom))
rooms[possibleNextRoom[nextRoom][0]][possibleNextRoom[nextRoom][1]] = 1
possibleNextRoom.pop(nextRoom)
def generateLevel():
resetLevel()
while countRooms() < maxRooms:
countRooms()
findPossibleRooms()
addRoom()
def displayLevel():
print(rooms)
generateLevel()
displayLevel()
这是错误:
ValueError: empty range for randrange() (0, 0, 0)
我以为我正确使用了随机数,但显然不是。我尝试让数组以其中的内容开头,但它仍然给了我同样的错误。我已经为此工作了很长时间,这让我很头疼。非常感谢对此的任何帮助。错误在第 54 行。
In [90]: import random
In [91]: random.randrange?
Signature: random.randrange(start, stop=None, step=1, _int=<class 'int'>)
Docstring:
Choose a random item from range(start, stop[, step]).
...
这会产生您的错误:
In [92]: random.randrange(0,0)
Traceback (most recent call last):
File "<ipython-input-92-566d68980a89>", line 1, in <module>
random.randrange(0,0)
File "/usr/lib/python3.8/random.py", line 226, in randrange
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
ValueError: empty range for randrange() (0, 0, 0)
所以如果错误发生在(告诉我们行号,如果 52 几乎没用)
nextRoom = random.randrange(0, len(possibleNextRoom))
这意味着 possibleNextRoom
是一个空列表,[]
(或者可能是其他带有 0 len
的东西)。
我看到一个
possibleNextRoom = []
findPossibleRooms
中的append
就地操作,所以可以修改这个全局列表。但是它们被包裹在for
和if
中,所以我根本不能说它们是否运行。
在任何情况下,该错误表明由于某种原因未附加任何内容。
代码如下:
import random
import numpy as np
class Room:
def __init__(self, name, contents):
self.name = name
self.contents = contents
rooms = np.zeros((11, 11))
maxRooms = 7
possibleNextRoom = []
def resetLevel():
global rooms
for r in range(len(rooms[0])):
for c in range(len(rooms[1])):
rooms[r][c] = 0
possibleNextRoom = []
halfHeight = int(len(rooms[1]) / 2)
halfWidth = int(len(rooms[0]) / 2)
rooms[halfWidth][halfHeight] = 1
def countRooms():
global rooms
roomCount = 0
for r in range(len(rooms)):
for c in range(len(rooms)):
if rooms[r][c] == 1:
roomCount += 1
return roomCount
def findPossibleRooms():
for r in range(len(rooms) - 1):
for c in range(len(rooms) - 1):
if rooms[r][c] == 1:
if rooms[r][c+1] != 1:
possibleNextRoom.append((r, c+1))
if rooms[r][c-1] != 1:
possibleNextRoom.append((r, c-1))
if rooms[r-1][c] != 1:
possibleNextRoom.append((r-1, c))
if rooms[r+1][c] != 1:
possibleNextRoom.append((r+1, c))
def addRoom():
nextRoom = random.randrange(0, len(possibleNextRoom))
rooms[possibleNextRoom[nextRoom][0]][possibleNextRoom[nextRoom][1]] = 1
possibleNextRoom.pop(nextRoom)
def generateLevel():
resetLevel()
while countRooms() < maxRooms:
countRooms()
findPossibleRooms()
addRoom()
def displayLevel():
print(rooms)
generateLevel()
displayLevel()
这是错误:
ValueError: empty range for randrange() (0, 0, 0)
我以为我正确使用了随机数,但显然不是。我尝试让数组以其中的内容开头,但它仍然给了我同样的错误。我已经为此工作了很长时间,这让我很头疼。非常感谢对此的任何帮助。错误在第 54 行。
In [90]: import random
In [91]: random.randrange?
Signature: random.randrange(start, stop=None, step=1, _int=<class 'int'>)
Docstring:
Choose a random item from range(start, stop[, step]).
...
这会产生您的错误:
In [92]: random.randrange(0,0)
Traceback (most recent call last):
File "<ipython-input-92-566d68980a89>", line 1, in <module>
random.randrange(0,0)
File "/usr/lib/python3.8/random.py", line 226, in randrange
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
ValueError: empty range for randrange() (0, 0, 0)
所以如果错误发生在(告诉我们行号,如果 52 几乎没用)
nextRoom = random.randrange(0, len(possibleNextRoom))
这意味着 possibleNextRoom
是一个空列表,[]
(或者可能是其他带有 0 len
的东西)。
我看到一个
possibleNextRoom = []
findPossibleRooms
中的append
就地操作,所以可以修改这个全局列表。但是它们被包裹在for
和if
中,所以我根本不能说它们是否运行。
在任何情况下,该错误表明由于某种原因未附加任何内容。