from datetime import date
from calendar import monthrange
def date_a_month_ago(today):
x = today.month - 1
previous_month = 12 if x == 0 else x
year = today.year - 1 if x == 0 else today.year
last_day_of_previous_month = monthrange(year, previous_month)[1]
day = last_day_of_previous_month if today.day > last_day_of_previous_month else today.day
return date(year, previous_month, day)
# Tests
print(date_a_month_ago(date(2021, 11, 1)))
print(date_a_month_ago(date(2021, 1, 31)))
print(date_a_month_ago(date(2021, 12, 31)))
print(date_a_month_ago(date(2021, 3, 29)))
print(date_a_month_ago(date(2020, 3, 29)))
print(date_a_month_ago(date(2021, 3, 30)))
print(date_a_month_ago(date(2020, 3, 30)))
ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQpmcm9tIGNhbGVuZGFyIGltcG9ydCBtb250aHJhbmdlCgoKZGVmIGRhdGVfYV9tb250aF9hZ28odG9kYXkpOgogICAgeCA9IHRvZGF5Lm1vbnRoIC0gMQogICAgcHJldmlvdXNfbW9udGggPSAxMiBpZiB4ID09IDAgZWxzZSB4CiAgICB5ZWFyID0gdG9kYXkueWVhciAtIDEgaWYgeCA9PSAwIGVsc2UgdG9kYXkueWVhcgogICAgbGFzdF9kYXlfb2ZfcHJldmlvdXNfbW9udGggPSBtb250aHJhbmdlKHllYXIsIHByZXZpb3VzX21vbnRoKVsxXQogICAgZGF5ID0gbGFzdF9kYXlfb2ZfcHJldmlvdXNfbW9udGggaWYgdG9kYXkuZGF5ID4gbGFzdF9kYXlfb2ZfcHJldmlvdXNfbW9udGggZWxzZSB0b2RheS5kYXkKICAgIHJldHVybiBkYXRlKHllYXIsIHByZXZpb3VzX21vbnRoLCBkYXkpCgoKIyBUZXN0cwpwcmludChkYXRlX2FfbW9udGhfYWdvKGRhdGUoMjAyMSwgMTEsIDEpKSkKcHJpbnQoZGF0ZV9hX21vbnRoX2FnbyhkYXRlKDIwMjEsIDEsIDMxKSkpCnByaW50KGRhdGVfYV9tb250aF9hZ28oZGF0ZSgyMDIxLCAxMiwgMzEpKSkKcHJpbnQoZGF0ZV9hX21vbnRoX2FnbyhkYXRlKDIwMjEsIDMsIDI5KSkpCnByaW50KGRhdGVfYV9tb250aF9hZ28oZGF0ZSgyMDIwLCAzLCAyOSkpKQpwcmludChkYXRlX2FfbW9udGhfYWdvKGRhdGUoMjAyMSwgMywgMzApKSkKcHJpbnQoZGF0ZV9hX21vbnRoX2FnbyhkYXRlKDIwMjAsIDMsIDMwKSkpCg==