#python #python-3.x
#python #python-3.x
Вопрос:
Я должен создать программу для вычисления максимальной, минимальной и средней температуры в списке. Список содержит название месяца, максимальную и минимальную температуру в этом месяце:
months = [ ["January", 6,3],
["February", 7,3],
["March", 10,4],
["April", 13,6],
["May", 17,9],
["June", 20,12],
["July", 22,14],
["August", 21,14],
["September",19,12],
["October", 14,9],
["November", 10,6],
["December", 7,3] ]
Я немного поиграл с кодом, чтобы узнать, как я могу рассчитать максимальную температуру с помощью цикла for, но он работает не так, как планировалось:
for m in months:
for temp in m:
if temp > temp1:
temp = maxTemp
print(temp)
Я получаю TypeError:'>' not supported between instances of 'str' and 'int'
Каков правильный способ работы со списком, который содержит строки в моем случае?
Комментарии:
1. Вы можете использовать функцию max с ключевым параметром
2. сначала посмотрите на себя
temp
:["January", 6,3],
если вы повторите это, вы получите"January"
, тогда6
, тогда3
это то, что сообщает вам сообщение об ошибке: сравнение"January"
сtemp1
таким способом невозможно (и, скорее всего, также не то, что вы хотите)
Ответ №1:
Ваш первый for
цикл выдаст не название месяца, а список, содержащий ['Mont name', temp1, temp2]
.
Итак, ваш код должен быть следующим:
for m in months:
m_name = m[0]
temp_vals = m[1:] # if you have more than two temperature values
temp_min = min(temp_vals)
temp_avr = sum(temp_vals)/len(temp_vals)
temp_max = max(temp_vals)
print(f'{m_name}: T_min = {temp_min}; T_avr = {temp_avr}; T_max = {temp_max};')
Что дает:
January: T_min = 3; T_avr = 4.5; T_max = 6;
February: T_min = 3; T_avr = 5.0; T_max = 7;
March: T_min = 4; T_avr = 7.0; T_max = 10;
April: T_min = 6; T_avr = 9.5; T_max = 13;
May: T_min = 9; T_avr = 13.0; T_max = 17;
June: T_min = 12; T_avr = 16.0; T_max = 20;
July: T_min = 14; T_avr = 18.0; T_max = 22;
August: T_min = 14; T_avr = 17.5; T_max = 21;
September: T_min = 12; T_avr = 15.5; T_max = 19;
October: T_min = 9; T_avr = 11.5; T_max = 14;
November: T_min = 6; T_avr = 8.0; T_max = 10;
December: T_min = 3; T_avr = 5.0; T_max = 7;
Ответ №2:
Вы запускаете цикл for через все элементы в списке, чтобы посмотреть только на температуры, вы могли бы использовать
for m in months:
for temp in m[1:]:
который рассматривает только целочисленные элементы в списке, которые являются 2-м и 3-м элементами, и игнорирует 1-й элемент, который является строкой и не может быть сравнен с целыми числами (и это также источник вашей ошибки).