Цикл while/for: как распечатать вместе результаты из разных циклов?

avatar
Ellie
8 августа 2021 в 15:54
59
2
1

У меня возникли проблемы с написанием правильного кода для печати (T, sol_h).

sol_h — это np. массив того же размера, что и T.

При печати (T) вы получите нечто похожее на:

0.00
5.00
10.00
15.02
20.03
25.05
30.06
35.07
40.08
45.08
50.10
...

Код ниже печатает только T:

start_time = time.time() 
impact_time= sol.t_events[3] # = 154.75 s  

sol_h = sol.y[0]
# solution from a previous function

While True:
    current_time = time.time() 
    elapsed_time = current_time - start_time
    T = '{:.02f}'.format(elapsed_time)
    time.sleep(5)
    print(T)
    
    if elapsed_time > impact_time:
        print ("Impact has occured")
        break
print (Loop has finished)

Этот код печатает только h:

for h in sol_h:
    print(h)

# Result
0.0
242.18277624405562
1016.2986152430877
2397.4567532549913
4463.395396560339
7289.10447523776
...

Есть ли способ напечатать (T, h), чтобы это выглядело так?

0.00, 0.0
5.00, 242.18277624405562
10.00, 1016.2986152430877
15.02, 2397.4567532549913
20.03, 4463.395396560339
25.05, 7289.10447523776
...    ...

Я готов изменить весь код, чтобы получить правильный print(T,h)

Источник
Barmar
8 августа 2021 в 15:56
0

T — это не массив, это строка, содержащая отформатированное прошедшее время.

Ellie
8 августа 2021 в 16:21
0

о да. это верно.

Ответы (2)

avatar
Girish Ajmera
8 августа 2021 в 16:07
0

в вызове печати для печати T вы можете использовать end = ',', это не приведет к новой строке перед следующей печатью. См. следующий пример

.
T = [0.00,5.00,10.00,15.00,20.00]
h = [0.00,242.18,1016.29,2397.45,4463.39,7289.10]
for index in range(len(T)):
     print(T[index],end=',')
     print(h[index])
avatar
Barmar
8 августа 2021 в 16:00
0

Поместите код, который печатает время и вызывает time.sleep() внутри цикла for

for h in sol_h:
    current_time = time.time() 
    elapsed_time = current_time - start_time
    T = '{:.02f}'.format(elapsed_time)
    print(T, h)

    time.sleep(5)

    if elapsed_time > impact_time:
        print ("Impact has occured")
        break
Ellie
8 августа 2021 в 16:21
0

Спасибо за ответ. Я хотел, чтобы каждые 5 секунд T печаталось вместе с h. Когда я использую код, который вы предоставили, была напечатана одна строка (T, h)