Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2022, 13:13   #1
Галина_Д
Пользователь
 
Регистрация: 13.01.2022
Сообщений: 14
По умолчанию Python, правильно прописать цикл для вывода средней температуры в странах

Добрый день, мне нужно по данным из переменной countries_temperature написать код, который рассчитает среднюю температуру за период в Цельсиях для каждой страны. Я вроде все сделала, но не могу правильно прописать цикл для вывода стран. Результат должен быть таким:
Средняя температура в странах:
Thailand - 23.9 С
Germany - 13.8 С
Russia - 3.7 С
Poland - 12.0 С

Код:
countries_temperature = [
['Thailand', [75.2, 77, 78.8, 73.4, 68, 75.2, 77]],
['Germany', [57.2, 55.4, 59, 59, 53.6]],
['Russia', [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6]],
['Poland', [50, 50, 53.6, 57.2, 55.4, 55.4]]
]
tmp = 0
print('Средняя температура в странах:')
for country in countries_temperature:
  country = country[0]
for tmp in countries_temperature:
  tmp = round(((sum(tmp[1]) / len(tmp[1])) - 32) * 5 / 9, 1)

  print(country, tmp, 'C')

Последний раз редактировалось BDA; 13.01.2022 в 23:34.
Галина_Д вне форума Ответить с цитированием
Старый 13.01.2022, 15:02   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

1. После копирования вашего кода в поле редактора сделайте:
а) Выделение кода
б) Нажмите на кнопку [CODE] над полем редактирования.
Это важно, так как иначе съедаются первые пробелы, а для Python это важно.

2. Мне непонятен код для нахождения среднего. Что там за -32, например.
При постановке вопроса лучше его описать, а затем приводить код.

Вот вам вариант решения.
а) Создали словарь, в котором страна - ключ, а набор данных по температуре - список.
б) В цикле, используя метод .items(), получаем из словаря ключ (страна) и список с набором температур
г) Во вложенном цикле суммируем значения температур
д) Выводим результат: Страна - Среднее значение температуры.

Код:
countries_temperature = {'Thailand': [75.2, 77, 78.8, 73.4, 68, 75.2, 77],
                         'Germany': [57.2, 55.4, 59, 59, 53.6],
                         'Russia': [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6],
                         'Poland': [50, 50, 53.6, 57.2, 55.4, 55.4]
                        }
for Country, Temperature in countries_temperature.items():
    Tsum = 0
    for T in Temperature:
        Tsum += T
    print(Country, Tsum/len(Temperature))
Сумму можно найти и функцией sum(T)
Код:
countries_temperature = {'Thailand': [75.2, 77, 78.8, 73.4, 68, 75.2, 77],
                         'Germany': [57.2, 55.4, 59, 59, 53.6],
                         'Russia': [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6],
                         'Poland': [50, 50, 53.6, 57.2, 55.4, 55.4]
                        }
for Country, Temperature in countries_temperature.items():
    Fsum = sum(Temperature)
    print(Country, Fsum/len(Temperature))
PS: Если из каждого значения температуры надо вычесть одно и тоже значение (пусть это значение будет в переменной M), то можно из всей суммы вычесть это значение:
Код:
Fsum -= M * len(Temperature)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.01.2022, 16:04   #3
Галина_Д
Пользователь
 
Регистрация: 13.01.2022
Сообщений: 14
По умолчанию

Виктор, спасибо, что подсказали про CODE.
Но ваше решение не совсем мне подходит, т.к. я студентка и мне это задание нужно сделать для закрепления темы, а это была не тема словарей (их на данном этапе мы не изучали).
Мне по моему коду нужна подсказка, т.к. если его выполнить, то все ок, кроме того, что не прописываются страны к расчетам (точнее прописывается только одна страна), т.е. некорректно прописана именно эта часть кода:
Код:
for country in countries_temperature:
country = country[0]
Сможете помочь?
P.S. В расчетах -32 - это часть формулы пересчета из Фаренгейта в Цельсии.
Галина_Д вне форума Ответить с цитированием
Старый 13.01.2022, 19:18   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Хорошо. По вашему коду:
Код:
countries_temperature = [
['Thailand', [75.2, 77, 78.8, 73.4, 68, 75.2, 77]],
['Germany', [57.2, 55.4, 59, 59, 53.6]],
['Russia', [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6]],
['Poland', [50, 50, 53.6, 57.2, 55.4, 55.4]]
]
countries_temperature - это список со вложенными списками, в которых один элемент (нулевой) - страна, а второй - список температур.
Следующий код выводит элементы первого уровня (список с элементом "страна" и списком температур.
Код:
for k in countries_temperature:
    print(k)
    for T in k[1]:
        print(T)
Теперь можно понять, что k[0] - это страна, а k[1] - список температур.
Получить нужное вам значение температуры можно, например в цикле, см. вложенный цикл.
Тут вместо print() ваш код (это как в первом примере ранее).
При выдаче сообщения используете k[0] - для вывода страны.
В целом код такой:
Код:
countries_temperature = [['Thailand', [75.2, 77, 78.8, 73.4, 68, 75.2, 77]],
                         ['Germany', [57.2, 55.4, 59, 59, 53.6]],
                         ['Russia', [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6]],
                         ['Poland', [50, 50, 53.6, 57.2, 55.4, 55.4]]
                        ]
for k in countries_temperature: # Для страны
    Tsum = 0
    for T in k[1]:     # Сумма температур 
        Tsum += (T - 32)*5/9
    print('%10s  %5.1f' % (k[0], Tsum/len(k[1])))  # Страна  Средняя температура
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.01.2022, 23:31   #5
Галина_Д
Пользователь
 
Регистрация: 13.01.2022
Сообщений: 14
По умолчанию

Спасибо огромное, очень помогли.
Галина_Д вне форума Ответить с цитированием
Старый 13.01.2022, 23:42   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

ViktorR, можно написать так и для списка (не только для словаря), чтобы код был более читабельный:
Код:
for Country, Temperature in countries_temperature:
И преобразовать градусы Фаренгейта в Цельсия можно как до поиска средней температуры, так и после. Но, мне кажется, лучше после, чтобы делать это один раз.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.01.2022, 00:00   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Вероятно я растерялся, поскольку понимал, что у вложенного списка два элемента и так можно, но что-то не случилось сразу, а потому "переключился"

Но вот, "зараза", сработала:
Код:
countries_temperature = [['Thailand', [75.2, 77, 78.8, 73.4, 68, 75.2, 77]],
                         ['Germany', [57.2, 55.4, 59, 59, 53.6]],
                         ['Russia', [35.6, 37.4, 39.2, 41, 42.8, 39.2, 35.6]],
                         ['Poland', [50, 50, 53.6, 57.2, 55.4, 55.4]]
                        ]
for Country, Temperature in countries_temperature:
    Tsum = 0
    for T in Temperature:
        Tsum += (T - 32)*5/9
    print('%10s  %5.1f' % (Country, Tsum/len(Temperature)))
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно ли написан код для вывода матрицы из файла ? Snoliry Помощь студентам 3 11.10.2019 23:03
Как правильно подключить датчик температуры DALLAS DS1820 slash153 Софт 1 19.05.2012 07:13
Как правильно построить цикл для выборки? Tanuska___:) БД в Delphi 1 12.01.2009 14:50
Как правильно записать код юникодного символа 0xAD программно для вывода? SkAndrew Общие вопросы Delphi 4 08.11.2008 08:55