Я пытаюсь найти среднюю скорость и хочу найти самый простой способ сделать это с помощью Python

#python #python-3.x

Вопрос:

Поэтому я хочу найти среднюю скорость на нескольких входах (в данном случае 2) в (метр/секунды) и (км/ч) самым простым способом, вместо того, чтобы делать это таким образом:

 dist = float(input('Distance(m) : '))
time = float(input('Finish time(s) : '))
dist_2 = float(input('Distance(m) : '))
time_2 = float(input('Finish time(s) : '))

speed = (dist / time) 
speed_2 = (dist / time) * 3.6
average = (dist / time)   (dist_2 / time_2) / 2
average_2 = (dist / time)   (dist_2 / time_2) / 2 * 3.6

print('speed is(m/s) : ', round(speed, 3))
print('speed is(km/h) : ', round(speed_2, 3))
print('average is(m/s) : ', round(average, 3))
print('average is (km/h) : ', round(average_2, 3))
 

Есть ли более простой способ сделать это? Спасибо за любую помощь 🙂

Ответ №1:

Конец ввода всегда будет немного неуклюжим, если вы ищете пользовательские вводы

Но после этого, если бы вы собрали списки, было бы намного проще использовать статистику.значит

Что-то вроде приведенного ниже может быть немного приятнее и гибче:

 import statistics

dists = []
times = []
speedsMS = []
nJourneys = int(input("How many journeys have been made?"))
for i in range(0, nJourneys):
    dists.append(input("What distance was journey "   str(i 1)   "?"))
    times.append(input("what time did journey "   str(i 1)   " take?"))
    speedsMS.append(dists[len(dists)-1]/times[len(times)-1])


averageSpeedMS = statistics.mean(speedsMS)
averageSpeedKMHr = averageSpeedMS * 3.6
 

Ответ №2:

Вы могли бы написать функцию для устранения дублирования кода и промежуточных переменных при считывании скорости от пользователя:

 def speed():
  (dist, time) = [ float(input(q   ' : ')) for q in ('Distance(m)', 'Finish 
  return dist / time
 

Затем напишите функцию для создания отчета с заданным кортежем скоростей:

 def report(speeds):
    for t in ('speed', lambda l: l[0]), ('average', lambda l: sum(l) / len(l)):
        for u in (('m/s', 1), ('km/h', 3.6)):
            print(f'{t[0]} is({u[0]}) : ', round(t[1](speeds) * u[1], 3))   
 

и ведите его с:

 report((speed(), speed()))
 

Комментарии:

1. Спасибо! Это сработало, и я просто хотел спросить вас, что означает код ‘print(f'{t[0]} ({u[0]}):’, круглый(t[1](скорости) * u[1], 3))’?

2. f'' представляет собой строку формата, в которой оцениваются переменные внутри {} . t тип for-это переменная внешнего цикла. Он повторяет кортеж с двумя элементами. Каждый элемент представляет собой строку и функцию. u for unit-это переменная внутреннего цикла, которая также представляет собой кортеж из двух элементов. Каждый элемент состоит из строки единицы измерения и коэффициента.

3. Это выглядит сложным, но трюк, чтобы придумать это, очень общий. Сравните 4 строки, все, что идентично, вы перенесете в инструкцию печати точно так, как есть. Все, что отличается, вы помещаете в переменную или вызов функции в зависимости от того, является ли это значением или поведением (вычислением).

4. Не забудьте принять лучший ответ и проголосовать за те, которые полезны.