Как использовать два списка, один с месяцами, один с днями, и использовать третий список, который назначает все правильные даты для месяцев

Вопрос: Создайте программу, которая имеет список названий месяцев (январь, февраль и т. д.), берет другой список номеров дней (1–31) и присваивает всем правильным числам месяц в другом списке (1–31 января, 1-28 февраля, 1-31 марта и др.). Распечатайте все элементы списка. Затем перемешайте список и напечатайте один элемент в списке. Обязательно сообщите пользователю, что это ваш счастливый день в году! бывший. месяцы = [январь, февраль и т. д.] дни = [1,2,3,4,5,6,7,8,9…31] пусто = [1 января, 2 января, 3 января… 31 января, 1 февраля, 2 февраля… 28 февраля…]

это то, что у меня есть до сих пор:

months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
days = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
combined = []
for m in months:
  for d in days:
    combined.append(days[0:30] + months[0])
    combined.append(days[0:27] + months[1])
    combined.append(days[0:30] + months[2])
    combined.append(days[0:29] + months[3])
    combined.append(days[0:30] + months[4])
    combined.append(days[0:29] + months[5])
    combined.append(days[0:30] + months[6])
    combined.append(days[0:30] + months[7])
    combined.append(days[0:29] + months[8])
    combined.append(days[0:30] + months[9])
    combined.append(days[0:29] + months[10])
    combined.append(days[0:30] + months[11])
shuffle(combined)
final = combined
print (final)

Я получаю сообщение об ошибке, в котором говорится, что «можно только объединить список (не «str») в список. Есть у кого фикс, буду очень признателен

какой у вас конкретный вопрос?

jsotola 10.04.2022 19:25

Я пытаюсь найти способ выбрать только правильное количество дней для каждого месяца, например, в январе мне нужно использовать все дни, но в феврале мне нужны только дни с 1 по 28.

Adam Feylor 10.04.2022 19:28

возможно, имеет смысл спросить об ошибке... ваша программа может действительно работать, если ошибка будет исправлена

jsotola 10.04.2022 19:29

Он дает сообщение об ошибке: «можно только объединить список (не «str») в список», но я не уверен, как это исправить.

Adam Feylor 10.04.2022 19:31

@Alex Ferylor Вы действительно хотите изменить порядок элементов в combined при перетасовке или просто хотите выбрать случайный элемент? Дайте мне знать, и я могу помочь найти решение. Ниже я дал ответ, который делает последнее. Мой ответ также допускает високосные годы.

oda 10.04.2022 20:18
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
5
20
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

can only concatenate list (not "str") to list

days[0:30] возвращает список значений, а months[0] возвращает строку. Это сообщение об ошибке.

Более простой способ построить данные — использовать поиск в словаре по месяцам и количеству дней, а затем использовать range для получения каждого отдельного дня.

month_counts = {
    "January": 31, 
    "February": 28, 
    "March": 31, 
    "April": 30, 
    "May": 31, 
    "June": 30, 
    "July": 31, 
    "August": 31, 
    "September": 30, 
    "October": 31, 
    "November": 30, 
    "December": 31,
}
combined = []:
for month, count in month_counts.items():
    for day in range(1, count + 1):
        combined.append(f"{month} {day}")

Принятое решение отличное и было случайно опубликовано как раз перед тем, как я собирался опубликовать свое. Тем не менее, я считаю, что мой достигает немного большей общности и пытается ответить на другие части вопроса ОП.

Поскольку вполне возможно, что рассматриваемый год является високосным, было бы полезно также проверить это. Я также добавил код для случайного выбора дня в году. Я не был уверен, действительно ли вы хотели изменить порядок списка с помощью shuffle или просто хотели выбрать случайный элемент из списка.

from random import randrange

# key: value <-> month: days in months
months = {
    "January": 31,
    "February": 28,
    "March": 31,
    "April": 30,
    "May": 31,
    "June": 30,
    "July": 31,
    "August": 31,
    "September": 30,
    "October": 31,
    "November": 30,
    "December": 31
    }

# year
year = 1996

# check if leap year (1996 is) 
if (year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)):
    months["February"] = 29
    days_in_year = 366
else:
    months["February"] = 28
    days_in_year = 365

# list with days in year
combined = []
for month in months:
    for i in range(1, months[month] + 1):
        combined.append(f"{month} {i}")

# select random element from list
r = combined[randrange(0, len(combined))]
print(f"Your lucky day is {r}")

Пример вывода

Your lucky day is April 29

Другие вопросы по теме