Ну что-то вроде такого:
from datetime import datetime
weekdays = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
day, month, year = int(input("День (1-12):\n")), int(input("Месяц (1-31)\n")), datetime.now().year
dt = datetime.strptime(f"{day}.{month}.{year}", "%d.%m.%Y")
with open("birthday.txt", "a") as f:
for d in range(year+1, year+20+1):
new_dt = dt.replace(year=d)
f.write(f"{new_dt.strftime('%d.%m.%Y')} - {weekdays[new_dt.weekday()]}\n")
f.close()
Хотя, подозреваю, посчитать все это можно и без всякого datetime для каждого года. Ежегодно ведь день недели сдвигается на 1 вперёд. С високосным годом как? Ну вот, зная хотя бы один год, можно тупо пробежаться циклом, проверить на високосность и сделать сдвиг.
month = int(input("Введите месяц рождения (1-12): "))
day = int(input("Введите день рождения (1-31): "))
with open("birthday.txt", "w") as f:
f.write("Date: %02d.%02d\n" % (month, day))
for year in range(2021, 2041):
bday = datetime.date (year, month, day)
day_of_week = bday.strftime("%A")
f.write("%02d.%02d.%04d - %s\n" % (month, day, year, day_of_week))
Пользователь вводит месяц и день, а получает файл, содержащий дни недели, на которые приходится его день рождения
в ближайшие 20 лет.