我正在遍历一个字典,然后遍历一个二维列表[list[float|int] 然后我将 list2d 的值更改为 dict 中对应的值 随机出现一个str
在测试中,我根据 list2d 示例的大小进行了更改:
50, 50 = 13, 49
80, 80 = 15, 48
terrain_probability_dict: {float | int, str} = {-1: "e", 0.2 : "o", 0.5 : "M", 1 : "#"}
def generate_terrain(world: list[list[str]]):
keys = sorted(terrain_probability_dict.keys())
for i in range(1, len(keys)):
for y in range(len(world)):
for x in range(len(world[0])):
if keys[i - 1] < world[y][x] <= keys[i]:
world[y][x] = terrain_probability_dict[keys[i]]
我是如何检查的:
for y in range(len(world)):
for x in range(len(world[0])):
# Print only if the type of the current value is string
if isinstance(world[y][x], str):
print(f"Initial value at world[{y}][{x}]: {world[y][x]} (Type: {type(world[y][x])})")
#and
print(y, x)
迭代之前以及迭代中的if isinstance代码 从打印中我发现迭代时列表中有一个“M”或“o”
为什么world中的index会变成world中的int
在检查先前值是否在某个区间内之后,您将字符串分配给
world[y][x]
。不幸的是,当您检查下一个间隔时,这种情况就会中断。您可能不应该对输入和输出使用相同的列表。
如果您对代码进行了类型检查,类型检查器会反对,因为您将二维数字列表传递到一个函数,该函数表示它需要
list[list[str]]
。该函数的某些代码需要数字,而其他部分则需要分配字符串。
如果您确实想转换列表的内部类型,您可能可以重新排序循环,并在找到匹配的键时跳出循环(并且可能会执行其他操作,例如引发异常,如果您永远找不到匹配)。