У меня есть маленький вопрос, потому что я действительно не могу найти выход. Является скорее логическим вопросом, чем Python. То, что я делаю, вызывает метод снова, когда результат не является точным или неправильным. Я использую рекурсию для этого, но, очевидно, он возвращает столько значений, сколько вызывается рекурсивным методом.Альтернатива рекурсии - Python
Что я делаю, это метод, чтобы найти «z» роботизированной руки через ультразвуковой датчик, когда этот результат не является точным. Я хочу, чтобы метод снова вызывался, чтобы снова запустить процесс ,
def get_z_from_ultrasonic_sensor(self, uarm, x, y):
# clear all IO data
self.serial_port.reset_input_buffer()
self.serial_port.reset_output_buffer()
count = 0
z = 110
uarm.set_position(x, y, z, 1)
time.sleep(2)
global input
# if self.count is 1:
# while True:
# print(self.serial_port.readline())
while True:
# if z is to small, means that has not been detected well, recursive call
if z < 70:
self.get_z_from_ultrasonic_sensor(uarm, x, y)
# check if input is an integer else, recursive call
try:
input = int(self.serial_port.readline())
if input > 160:
break
except:
break
if input <= 116:
# print("Distance:", int(input))
break
else:
count = count + 1
# print("Distance:", int(input))
# print("Z", z)
if count is 5:
z = z - 1
count = 0
print("US Distance:", int(input))
print("Z Robot", z)
uarm.set_position(x, y, z, 1)
if z is 110:
pass
print("Z to Write:", z)
# self.count += 1
return z-6
То, что я хочу, чтобы получить только один возвращаемое значение, и не так много значения, как рекурсивный вызов (теперь возвращает в первом значении хорошего «г», а затем многие г = 110 - см декларирования локальная переменная - как рекурсивный вызов). Я не могу найти решение этого, я не могу использовать Итерацию, я полагаю, потому что она основана на том же принципе.
Любое предложение? Заранее спасибо
Какова ваша функция? – khelwood
Может быть, я просто что-то упустил (сейчас я собираюсь получить первый кофе) - где «х» и «у» в вашем коде? Вы вызываете свою функцию, но я не вижу, как вы меняете ее внутри функции. Объявляется ли оно глобально? –
@barakmanos есть часть кода, опущенная, поскольку основана на роботизированном плече и ультразвуковом датчике. Я не включил его для простоты. Если z является малым, поэтому менее 70 вызовите функцию снова, потому что с ней что-то не так. – LDG