Как получить пока l oop работает? - PullRequest
0 голосов
/ 29 марта 2020

Для вашего лучшего понимания: я пытаюсь создать контроль перекрестка для автомобилей со списком (intersectionList), в котором каждый автомобиль записывает свой адрес, если автомобиль хочет пересечь перекресток.

Если автомобили, находящиеся над дорогой 20 или 23, записывают свой адрес в список, и если их запись имеет индекс 0, им разрешается проезжать. Как только они пересекают перекресток (шт. 10), они удаляют свою запись из списка. Моя проблема сейчас с while l oop. Автомобили делают все, что я хочу, но не меняют свою скорость после того, как их индекс списка был изменен с> = 1 на == 0. Что означает в реальной жизни, что они признают, что их индекс был не 0, остановка, но чем они остановимся навсегда ... так что я думаю, что есть проблема с тем, как l oop.

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) 

Здесь мы go. Класс Overdrive - это оболочка python для официального пакета ANKI Overdrive SDK, и его слишком долго загружать здесь. ссылка на 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()

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Это немного ошеломляет:

        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

Индекс не изменится, если это не будет сделано в changeSpeed. Поэтому, чтобы ответить на ваш вопрос, вам пригодится понимание changeSpeed.

0 голосов
/ 29 марта 2020

вы должны заменить

while self.interSectionList.index(addr) >= 1:

на

while self.interSectionList.index(addr) >= 0:
...