【发布时间】:2020-03-29 08:59:44
【问题描述】:
为了您更好的理解: 我尝试用一个列表(intersectionList)为汽车创建一个交叉路口控制,如果汽车想要穿过十字路口,每辆车都会在其中写下他的地址。
如果路段 20 或 23 上的汽车将其地址写入列表,并且如果其条目的索引为 0,则允许它们通过。一旦他们穿过交叉路口(piece10),他们就会从列表中删除他们的条目。我的问题现在与 while 循环有关。汽车做我想做的一切,但在他们的列表索引从 >=1 更改为 == 0 后不适应他们的速度。这意味着在现实生活中,他们认识到他们的索引不是 0,停止,但比他们永远停止......所以我认为while循环有问题。
class Logic:
intersectionList = []
def logic(self, addr, piece):
if piece == 20:
self.intersectionList.append(addr)
while self.intersectionList.index(addr) >= 1: #as long index of list is not 0
self.car.changeSpeed(0, 1000) #stop car
else:
self.car.changeSpeed(300, 1000) #start car
elif piece == 23:
self.intersectionList.append(addr)
while self.intersectionList.index(addr) >= 1:
self.car.changeSpeed(0, 1000) #stop car
else:
self.car.changeSpeed(300, 1000) #start car
elif piece == 10:
if addr in self.intersectionList:
self.intersectionList.remove(addr)
我们开始吧。 Overdrive 类是官方 ANKI Overdrive SDK 的 python 包装器,这里上传太长了。 github链接:https://github.com/xerodotc/overdrive-python.git
from overdrive import Overdrive
class Logic:
intersectionList = []
def __init__(self, macAddress):
car = Overdrive(macAddress)
def locationChangeCallback(self, addr, location, piece, speed, clockwise):
self.logic(addr, piece)
def logic(self, addr, piece):
if piece == 20:
self.intersectionList.append(addr)
while self.intersectionList.index(addr) >= 1: # as long index of list is not 0
self.car.changeSpeed(0, 1000) # stop car
else:
self.car.changeSpeed(300, 1000) # start car
elif piece == 23:
self.intersectionList.append(addr)
while self.intersectionList.index(addr) >= 1:
self.car.changeSpeed(0, 1000) # stop car
else:
self.car.changeSpeed(300, 1000) # start car
elif piece == 10:
if addr in self.intersectionList:
self.intersectionList.remove(addr)
def startEngine(self):
self.car.setLocationChangeCallback(self.locationChangeCallback)
self.car.changeSpeed(300,1000)
# instances
bmw = Logic("CD:DF:4R:53:34:D3")
bmw.startEngine()
lambo = Logic("CD:DF:4R:53:34:D3")
lambo.startEngine()
【问题讨论】:
-
我不知道是不是这个原因,但是
intersection_list是一个class(如静态)变量,这不太可能是你想要的。 -
嗨,这是全班逻辑吗?如果是这样,变量 car 是在哪里初始化或传递的?
-
不,我想要那样。每辆车都有一个逻辑对象,我想要,所有对象只有一个列表。我是 python 新手,但我在互联网上查找,他们说,它是这样完成的。即使我打印出列表,一切看起来都很好
-
不,不是。你们需要吗?
-
okk okk 我的另一个问题是 changeSpeed 的两个参数是什么?
标签: python python-3.x multithreading list while-loop