Вопрос: Создайте программу, которая имеет список названий месяцев (январь, февраль и т. д.), берет другой список номеров дней (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») в список. Есть у кого фикс, буду очень признателен
Я пытаюсь найти способ выбрать только правильное количество дней для каждого месяца, например, в январе мне нужно использовать все дни, но в феврале мне нужны только дни с 1 по 28.
возможно, имеет смысл спросить об ошибке... ваша программа может действительно работать, если ошибка будет исправлена
Он дает сообщение об ошибке: «можно только объединить список (не «str») в список», но я не уверен, как это исправить.
@Alex Ferylor Вы действительно хотите изменить порядок элементов в combined
при перетасовке или просто хотите выбрать случайный элемент? Дайте мне знать, и я могу помочь найти решение. Ниже я дал ответ, который делает последнее. Мой ответ также допускает високосные годы.
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
какой у вас конкретный вопрос?