Python–;随机实际上不是随机的
我使用以下代码:Python–;随机实际上不是随机的,python,random,Python,Random,我使用以下代码: class Car: def __init__(self): self.start == [0, roads[0].index('#')] while roads[self.start[0]][self.start[1]] == '#': self.start[0] = randint(0, len(roads)-1) self.start[1] = randint(0, len(roads
class Car:
def __init__(self):
self.start == [0, roads[0].index('#')]
while roads[self.start[0]][self.start[1]] == '#':
self.start[0] = randint(0, len(roads)-1)
self.start[1] = randint(0, len(roads[0])-1)
self.start = tuple(self.start)
self.finish == [0, roads[0].index('#')]
while roads[self.finish[0]][self.finish[1]] == '#':
self.finish[0] = randint(0, len(roads)-1)
self.finish[1] = randint(0, len(roads[0])-1)
self.finish = tuple(self.finish)
self.kind = randint(0, 1)
它的作用是:在这样表示的地图中:
#############1#########
#############1111######
#############1##1######
#######1111111111######
#############1#########
#############1#########
它找到两个1并将它们设置为开始和结束,然后随机选择一个变量。然后我会这样做:
a = Car()
b = Car()
结果发现他们两人的起点和终点总是一样的,但有时是不同的。我不明白——如果随机不起作用有问题,它也不应该对self.kind起作用如何修复它?您可能应该将您的作业更改为:
self.start = [0, roads[0].index('#')]
这是:
self.finish = [0, roads[0].index('#')]
现在,您正在使用比较运算符。您可能应该将分配更改为:
self.start = [0, roads[0].index('#')]
这是:
self.finish = [0, roads[0].index('#')]
现在,您正在使用比较运算符。您正在这里使用相等测试:
self.start == [0, roads[0].index('#')]
这将失败,除非您在类级别具有start
属性;它是而不是分配,它是在测试那里的平等性。你会在这里得到一个namererror
因此,您可能有一个Car.start
class属性,它是一个可变类型,如列表:
class Car:
start = [0, 0]
但你忘了在你的问题中包括这一点
然后将class属性指定给self.start
索引:
self.start[0] = randint(0, len(roads)-1)
self.start[1] = randint(0, len(roads[0])-1)
self.start = tuple(self.start)
这是共享数据,因为这会修改class属性
最后,设置一个实例属性:
self.start[0] = randint(0, len(roads)-1)
self.start[1] = randint(0, len(roads[0])-1)
self.start = tuple(self.start)
包含共享数据。这同样适用于您的self.finish
属性
您可以通过使用赋值而不是相等性测试来解决此问题:
self.start = [0, roads[0].index('#')]
这同样适用于self.finish
:
self.finish == [0, roads[0].index('#')]
您也可以在此处使用本地名称,并在构建完列表后仅将其分配给实例属性。您在此处使用的是相等性测试:
self.start == [0, roads[0].index('#')]
这将失败,除非您在类级别具有start
属性;它是而不是分配,它是在测试那里的平等性。你会在这里得到一个namererror
因此,您可能有一个Car.start
class属性,它是一个可变类型,如列表:
class Car:
start = [0, 0]
但你忘了在你的问题中包括这一点
然后将class属性指定给self.start
索引:
self.start[0] = randint(0, len(roads)-1)
self.start[1] = randint(0, len(roads[0])-1)
self.start = tuple(self.start)
这是共享数据,因为这会修改class属性
最后,设置一个实例属性:
self.start[0] = randint(0, len(roads)-1)
self.start[1] = randint(0, len(roads[0])-1)
self.start = tuple(self.start)
包含共享数据。这同样适用于您的self.finish
属性
您可以通过使用赋值而不是相等性测试来解决此问题:
self.start = [0, roads[0].index('#')]
这同样适用于self.finish
:
self.finish == [0, roads[0].index('#')]
您也可以在这里使用一个本地名称,并在构建完列表后仅将其分配给实例属性