def get_week_from_yyyymmdd(y, m, d):
''' 年月日から曜日を算出
1582年~(グレゴリオ暦)に限る
戻り値 int
0: 日曜日
6: 土曜日
'''
# 1月、2月は、前年の13月、14月として扱う
if m <= 2:
y -= 1
m += 12
# print('{}年{}月{}日'.format(y, m, d))
x = y + y // 4
x -= y // 100
x += y // 400
x += (m * 13 + 8) // 5
x += d
w = x % 7
weeks = '日月火水木金土'
# print('{}曜日'.format(weeks[w]))
return w
def make_days_in_months(year):
def is_leapyear(y):
''' うるう年判定
'''
result = False
if y % 4 == 0:
result = True
if y % 100 == 0 and y % 400 != 0:
result = False
return result
days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if is_leapyear(year) is True:
days_in_months.remove(28)
days_in_months.insert(1, 29)
return days_in_months
def main(year, month):
days_in_months = make_days_in_months(year)
days = list(range(1, days_in_months[month - 1] + 1))
day = 1
week = get_week_from_yyyymmdd(year, month, day)
dumy = [0] * week
days = dumy + days
print()
print(' {}年{}月'.format(year, month))
print('---------------------')
print(' 日 月 火 水 木 金 土')
print('---------------------')
for count, i in enumerate(days, start=1):
if i == 0:
print(' ', end='')
continue
print(' {:2}'.format(i), end='')
if count % 7 == 0 and i != days[-1]:
print('')
print('\n---------------------')
if __name__ == '__main__':
y = int(input('Year (1582~): '))
m = int(input('Month: '))
main(y, m)
ZGVmIGdldF93ZWVrX2Zyb21feXl5eW1tZGQoeSwgbSwgZCk6CgknJycg5bm05pyI5pel44GL44KJ5puc5pel44KS566X5Ye6CgkJMTU4MuW5tO+9nu+8iOOCsOODrOOCtOODquOCquaapu+8ieOBq+mZkOOCiwoKCQnmiLvjgorlgKQgaW50CgkJCTA6IOaXpeabnOaXpQoJCQk2OiDlnJ/mm5zml6UKCScnJwoKCSMgMeaciOOAgTLmnIjjga/jgIHliY3lubTjga4xM+aciOOAgTE05pyI44Go44GX44Gm5omx44GGCglpZiBtIDw9IDI6CgkJeSAtPSAxCgkJbSArPSAxMgojCXByaW50KCd7feW5tHt95pyIe33ml6UnLmZvcm1hdCh5LCBtLCBkKSkKCgl4ID0geSArIHkgLy8gNAoJeCAtPSB5IC8vIDEwMAoJeCArPSB5IC8vIDQwMAoJeCArPSAobSAqIDEzICsgOCkgLy8gNQoJeCArPSBkCgl3ID0geCAlIDcKCgl3ZWVrcyA9ICfml6XmnIjngavmsLTmnKjph5HlnJ8nCiMJcHJpbnQoJ3t95puc5pelJy5mb3JtYXQod2Vla3Nbd10pKQoKCXJldHVybiB3CgoKZGVmIG1ha2VfZGF5c19pbl9tb250aHMoeWVhcik6CglkZWYgaXNfbGVhcHllYXIoeSk6CgkJJycnIOOBhuOCi+OBhuW5tOWIpOWumgoJCScnJwoJCXJlc3VsdCA9IEZhbHNlCgkJaWYgeSAlIDQgPT0gMDoKCQkJcmVzdWx0ID0gVHJ1ZQoJCQlpZiB5ICUgMTAwID09IDAgYW5kIHkgJSA0MDAgIT0gMDoKCQkJCXJlc3VsdCA9IEZhbHNlCgkJcmV0dXJuIHJlc3VsdAoKCWRheXNfaW5fbW9udGhzID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCglpZiBpc19sZWFweWVhcih5ZWFyKSBpcyBUcnVlOgoJCWRheXNfaW5fbW9udGhzLnJlbW92ZSgyOCkKCQlkYXlzX2luX21vbnRocy5pbnNlcnQoMSwgMjkpCglyZXR1cm4gZGF5c19pbl9tb250aHMKCgpkZWYgbWFpbih5ZWFyLCBtb250aCk6CglkYXlzX2luX21vbnRocyA9IG1ha2VfZGF5c19pbl9tb250aHMoeWVhcikKCWRheXMgPSBsaXN0KHJhbmdlKDEsIGRheXNfaW5fbW9udGhzW21vbnRoIC0gMV0gKyAxKSkKCglkYXkgPSAxCgl3ZWVrID0gZ2V0X3dlZWtfZnJvbV95eXl5bW1kZCh5ZWFyLCBtb250aCwgZGF5KQoJZHVteSA9IFswXSAqIHdlZWsKCWRheXMgPSBkdW15ICsgZGF5cwoKCXByaW50KCkKCXByaW50KCcgICAgIHt95bm0e33mnIgnLmZvcm1hdCh5ZWFyLCBtb250aCkpCglwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tJykKCXByaW50KCcg5pelIOaciCDngasg5rC0IOacqCDph5Eg5ZyfJykKCXByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0nKQoJZm9yIGNvdW50LCBpIGluIGVudW1lcmF0ZShkYXlzLCBzdGFydD0xKToKCQlpZiBpID09IDA6CgkJCXByaW50KCcgICAnLCBlbmQ9JycpCgkJCWNvbnRpbnVlCgkJcHJpbnQoJyB7OjJ9Jy5mb3JtYXQoaSksIGVuZD0nJykKCQlpZiBjb3VudCAlIDcgPT0gMCBhbmQgaSAhPSBkYXlzWy0xXToKCQkJcHJpbnQoJycpCglwcmludCgnXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cgl5ID0gaW50KGlucHV0KCdZZWFyICgxNTgy772eKTogJykpCgltID0gaW50KGlucHV0KCdNb250aDogJykpCgltYWluKHksIG0pCg==