#python #indexing
Вопрос:
Я пытаюсь рассчитать среднее количество отработанных часов в день в течение недели. То, что мне удалось, находится ниже:
listing_hours = []
hours_sum = 0
num = 0
days = input("How many working days are there: ")
number_days = float(days)
amount_days = int(days)
for array_of_days in range(amount_days):
num = num 1
hours = input("Provide " str(num) ". hours worked on this day: ")
number_hours = float(hours)
hours_sum = float(hours_sum) number_hours
listing_hours.append(hours)
average_hours_day = float(hours_sum)/float(days)
hours_decimal = []
for item in listing_hours:
hours_decimal.append(float(item))
print("The hours input was:", str(hours_decimal[0]) "h,", str(hours_decimal[1]) "h,",
str(hours_decimal[2]) "h,", str(hours_decimal[3]) "h,", str(hours_decimal[4]) "h,
total was", hours_sum, "hours.")
print("Average working day length was", str(round(average_hours_day,2)), end="h.")
Кажется, это работает, однако мне было интересно, как подойти к отображению входных данных и общего количества часов (в предпоследней строке кода выше). Как вы можете видеть, у меня есть заполнитель в виде str(hours_decimal[XXX]. Это, конечно, не годится, так как количество дней в первом вводе может быть любым значением. Как мне получить индекс, связанный с определенным днем?
Желаемый формат отображения выглядит примерно следующим образом: «Ввод часов составлял: (часы, отработанные в первый день, скажем, 8)ч, 6,5 ч, 11,0 ч и т. Д., Всего 43,75 часа». В настоящее время я просто размещаю номер заказа из списка, но он работает только в том случае, если я знаю, сколько дней было введено.
Комментарии:
1. Почему вы сначала преобразуете количество дней в число с плавающей точкой, а затем в int? Почему бы просто не
amount_days = int(days)
сделать это ?2. Это не C, вам не нужно преобразовывать числа в
float
, прежде чем делить их.3. @Barmar Это не Python 2, вам не нужно преобразовывать числа в
float
, прежде чем делить их… о, подождите, Python 2.7.(16?) по-прежнему используется по умолчанию во многих системах!4. @Бармар, для среднего. Предположим, я работал 8 часов 30 минут, то есть 8,5 часа. Я хочу иметь возможность ввести это.
5. @Артур, я говорю не о часах, я говорю о днях:
amount_days = int(days)
Ответ №1:
Используйте генератор и join()
print("The hours input was:", ", ".join(f"{h}h" for h in hours_decimal))
Комментарии:
1. Сделайте это генератором вместо списка, и вы получите мой голос 😉
2. Хорошо, сгенерировал его
Ответ №2:
Использование генераторов и statistics.mean
делает это совсем немного проще:
from statistics import mean
hours = [
float(input(f"Provide {num 1}. hours worked on this day: "))
for num in range(int(input("How many working days are there: ")))
]
print(f"The hours input were: {', '.join(f'{h}h' for h in hours)}")
print(f"Average working day length was {mean(hours)}h.")
How many working days are there: 5
Provide 1. hours worked on this day: 8
Provide 2. hours worked on this day: 6
Provide 3. hours worked on this day: 12
Provide 4. hours worked on this day: 5
Provide 5. hours worked on this day: 6
The hours input were: 8.0h, 6.0h, 12.0h, 5.0h, 6.0h
Average working day length was 7.4h.
Комментарии:
1. довольно, но я не поклонник ввода часов в строке перед вводом дней, потому что порядок отличается от фактического/предполагаемого порядка событий.