Как печатать один раз, пока условие if не будет нарушено? - PullRequest
0 голосов
/ 05 мая 2018

это мой код, который я сейчас пишу для робота в моем университетском проекте. Этот код работает, однако цикл будет постоянно печатать операторы каждую секунду, и я хотел бы, чтобы он печатал только тогда, когда я изменяю условие ввода (нарушаю условие if), чтобы он не продолжал печатать. Есть ли способ исправить это? Спасибо за помощь заранее.

PS: это в Python 2.7 (я думаю)

try:
    while True:
        #some stuff 
        if 0.01 < joystick.get_axis(1) <= 0.25:
            print ('moving backward with 25% speed')
            # performing some actions


        elif 0.25 < joystick.get_axis(1) <= 0.5:
            print ('moving forward with 50% speed')
            # performing some actions

        elif 0.5 < joystick.get_axis(1) <= 0.75:
            print ('moving backward with 75% speed')
            # performing some actions

цикл while продолжается таким же образом ...

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Следите за последней категорией - что-то в этом роде.

previous_category = 0
 while True:
        #some stuff 
    if 0.01 < joystick.get_axis(1) <= 0.25:
        if previous_category != 1:
           print ('moving backward with 25% speed')
        previous_category = 1
        # performing some actions

    elif 0.25 < joystick.get_axis(1) <= 0.5:
        if previous_category != 2:
           print ('moving forward with 50% speed')
        previous_category = 2
        # performing some actions

    elif 0.5 < joystick.get_axis(1) <= 0.75:
        if previous_category != 3:
           print ('moving backward with 75% speed')
        previous_category = 3
        # performing some actions

Если вы немного переформатировали свой код, я думаю, что это был бы лучший подход:

 previous_category = 0
 while True:
    val = joystick.get_axis(1)

    if 0.01 < val <= 0.25:
    category = 1
    #add 2 elif for the other categories, 2 and 3 

    if category == 1:
        # performing some actions
    elif category == 2:
        # performing some actions

    elif category == 3:
        # performing some actions

    #now that we've moved the object, we check if we need to print or not
    if category != previous_category:
       print_statement(category)
    #and we update previous_category for the next round, which will just be the current category
    previous_category = category

def print_statement(category):
   #handle printing here based on type, this is more flexible
0 голосов
/ 05 мая 2018

Это можно сделать с помощью глобального целого числа, в котором хранится последнее напечатанное значение. Примерно так:

_last_count = None
def condprint(count):
    global _last_count
    if count != _last_count:
        print('Waiting for joystick '+str(count))
        _last_count = count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...