#python-3.x #for-loop #time #coordinates #sched
Вопрос:
Я очень новичок в python. Я хочу написать функцию, которая может выдавать координаты каждого круга каждые 30 секунд. До сих пор мой код выглядит так:
import sched, time
import numpy as np
scheduler = sched.scheduler(time.time, time.sleep)
def coords():
theta = np.linspace(0, 2*np.pi, 1000)
radius = .5
x = radius * np.sin( theta )
y = radius * np.cos( theta )
z = 4.2
pos = []
for i in range (0, 1000):
pos = (x[i], y[i], z)
i =1
#print(pos)
e1 = scheduler.enter(1, 1, coords)
e2 = scheduler.enter(30, 1, coords)
Я не уверен, что делаю не так, пожалуйста, помогите!
Спасибо.
Редактирование для предоставления дополнительных кодов:
import time
import numpy as np
def distance(a, b):
distance = np.sqrt((a[0]-b[0])*(a[0]-b[0]) (a[1]-b[1])*
(a[1]- b[1]) (a[2]-b[2])*(a[2]-b[2]))
return distance
def coords():
theta = np.linspace(0, 2*np.pi, 1000)
radius = .5
x = radius * np.sin( theta )
y = radius * np.cos( theta )
z = 4.2
pos = []
for i in range (0, 1000):
pos = (x[i], y[i], z)
return pos
def main():
goal = np.array([3.6528202764153976, -7.055446756786874524,
8.52021764])
current = coords()
print(current)
while True:
dis = distance(goal,current)
print(dis)
time.sleep(3)
if __name__ == "__main__":
main()
Комментарии:
1. Он работает, (0.0, 0.5, 4.2) 9.438863921224838 печатается каждые 3 секунды. Вы хотите, чтобы coords() возвращал список всех сгенерированных позиций(а не только последнюю)?
2. И в main() вы хотите, чтобы ток приближался к цели вот так?: [0.0, 0.5, 4.2] 9.438863921224838 [0.0031447166580338753, 0.4999901106593416, 4.2] 9.437639450965634 [0.006289308919370529, 0.49996044302856274, 4.2] 9.436400082070367 [0.009433652392233545, 0.4999109982812366, 4.2] 9.435145857703839
3. Привет @LazyBumQ, Да, я хочу, чтобы coords() возвращал список всех сгенерированных позиций(не только последней) каждые 3 секунды, чтобы main() могла рассчитать расстояние от цели. Но coords() возвращает только одну позицию! Есть какие-нибудь советы?
4. Изменил свой ответ, это должно сработать. Спросите, нужны ли вам дополнительные объяснения.
Ответ №1:
модуль sched позволяет ставить задачи в очередь и запускать их один раз после указанной задержки. Вы могли бы сделать это просто, используя в то время как:
while True:
coords()
time.sleep(30)
Также нет смысла увеличивать i, python делает это автоматически.
for i in range (0, 1000):
pos = (x[i], y[i], z)
#i =1
Если вы хотите, чтобы функция coords() возвращала список всех позиций, вам не нужно переназначать pos каждый цикл. Просто добавьте один pos в список pos.
pos = []
for i in range(1000):
pos.append((x[i], y[i], z))
И не забудьте вернуть поз.
Также ваш «ток» не меняется во время циклов «пока». Поскольку функция coords() возвращает список позиций, вы можете повторить его:
def main():
goal = np.array([3.6528202764153976, -7.055446756786874524, 8.52021764])
for current in coords():
# current = coords()
print(current)
dis = distance(goal,current)
print(dis)
time.sleep(3)
Комментарии:
1. Спасибо @LazyBum Q, я попробую это сделать.
2. Привет еще раз, когда я вызываю координаты() из main, он выводит только последнее значение pos: (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1,2246467991473532 e-16, 4.2) (0,5, -1.2246467991473532 e-16, 4.2) (0.5, -1.2246467991473532 e — 16, 4.2) (0.5, -1.2246467991473532 e-16, 4.2) — вот так. не знаю, что я делаю не так. Есть какие-нибудь советы?
3. Пожалуйста, посмотрите код, я хотел рассчитать расстояние с новыми координатами каждые 30 секунд. время импорта импортируйте numpy как np-расстояние(a, b): расстояние = np.sqrt((a[0]-b[0])*(a[0]-b[0]) (a[1]-b[1])*(a[1]-b[1]) (a[2]-b[2])*(a[2] — b[2])) координаты обратного расстояния(): тета = np.linspace(0, 2*np.pi, 1000) радиус = .5 x = радиус * np.sin( тета ) y = радиус * np.cos( тета ) z = 4,2 pos = [] для i в диапазоне (0, 1000): pos = (x[i], y[i], z) возврат pos
4. следующая часть: четкости основной(): цель = НП.массив([3.6528202764153976, -7.055446756786874524, 8.52021764]) ток = координаты() печать(ток) в то время как true: Дис = расстояние(цель,текущие) печать(Дис) время.сон(3) Если имя == » главный «: главный()
5. Это потрясающе! @LazyBumQ Большое тебе спасибо! Я довольно долго боролся за это. Я попытался поднять голос, но не хватило репутации.