私は本当に道を見つけることができないので、少し質問をしました。 Isは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
私が欲しいのはただ一つの値が返さ取得することで、できるだけ多くない値は、再帰呼び出しとして(今の最初の値が良い「Z」、その後、できるだけ多くのz = 110として返す - の宣言を参照してくださいローカル変数 - 再帰呼び出しとして)。私は本当にこれの解決策を見つけることができません、私はそれが同じ原則に基づいているので、私は仮定反復を使用することはできません。
提案がありますか?事前に感謝します
あなたの機能は何ですか? – khelwood
たぶん私はちょうど何かを逃している(私はちょうど今日最初のコーヒーを取得しようとしている) - あなたのコードではどこに 'x'と 'y'がありますか?あなたはそれを使ってあなたの関数を呼び出しますが、関数内でそれをどのように変更するかはわかりません。それは世界的に宣言されていますか? –
@barakmanosロボットアームと超音波センサーに基づいているため、コードの一部が省略されています。私は簡単にするためにそれを含めなかった。 zが小さくて70より小さければ、関数に何か問題があるので関数を再度呼び出します。 – LDG