Python 代码不会一致地比较值,随机数似乎不会生成

  • 本文关键字:随机数 比较 代码 Python python
  • 更新时间 :
  • 英文 :


我正在尝试制作蛇和梯子,并随机放置蛇和梯子。我的代码应该比较相同索引的元素,检查它们是否相等,然后随机化,直到它们不相等,这样我就不会得到相同的入口和出口位置,并确保出口和入口应该像在蛇和梯子中一样工作。但它似乎不仅检测不到相等的数字,而且之后生成的数字仍然相等,有时会陷入循环。我是新手,所以我知道这不是很有效,很抱歉,如果你已经回答了这个问题,我只是不知道该怎么说。

from random import randint
winPoint = 100
ladderEntrances = []
ladderExits = []
snakeEntrances = []
snakeExits = []
amountOfLadders = 8
amountOfSnakes = 8

for i in range(0, amountOfLadders):
ladderEntrances.append(randint(1, winPoint - 1))
ladderExits.append(randint(1, winPoint - 1))
for i in range(0, amountOfSnakes):
snakeEntrances.append(randint(1, winPoint - 1))
snakeExits.append(randint(1, winPoint - 1))
ladderEntrancesCopy = ladderEntrances
snakeEntrancesCopy = snakeExits
for i in range(0, amountOfLadders):
while ladderEntrances[i] == ladderExits[i]:
print("Ladder Entrances:", ladderEntrances)
print("Ladder Exits:    ", ladderExits)
ladderEntrances[i] = randint(1,winPoint - 1)
ladderExits[i] = randint(1,winPoint - 1)
ladderEntrancesCopy[i] = ladderEntrances[i]
print("reset", i)
if ladderEntrances[i] > ladderExits[i]:
ladderEntrances[i] = ladderExits[i]
ladderExits[i] = ladderEntrancesCopy[i]
for i in range(0, amountOfSnakes):
while snakeEntrances[i] == snakeExits[i]:
print("Snake Entrances:", snakeEntrances)
print("Snake Exits:    ", snakeExits)          
snakeEntrances[i] = randint(1,winPoint - 1)
snakeExits[i] = randint(1,winPoint - 1)
snakeEntrancesCopy[i] = snakeEntrances[i]
print("snake reset", i)
if snakeEntrances[i] < snakeExits[i]:
snakeEntrances[i] = snakeExits[i]
snakeExits[i] = snakeEntrancesCopy[i]

print("Ladder Entrances:", ladderEntrances)
print("Ladder Exits:    ", ladderExits)
print("Snake Entrances:", snakeEntrances)
print("Snake Exits:    ", snakeExits)

当您在python中将一个列表分配给另一个列表时,它是通过引用分配的。这意味着这两个变量只是内存中相同值的别名,所以如果您更改一个列表中的数字,也会更改另一个列表。

例如:

>>> a = [1, 2, 3]
>>> b = a
>>> b[2] = 100
>>> a
[1, 2, 100]

为了解决这个问题,您必须按值传递列表。有几种方法可以做到这一点。一种这样的方法是创建整个原始列表的一个切片,从而有效地创建该列表的副本。

>>> a = [1, 2, 3]
>>> b = a[:]
>>> b[2] = 100
>>> a
[1, 2, 3]

将此应用于您的代码:

...
ladderEntrancesCopy = ladderEntrances[:]
snakeEntrancesCopy = snakeExits[:]
...

最新更新