如何在输入月份为二时日限制在29以内

sums = 0
year = int(input('请输入年份:'))
while year < 2000 or year > 2021:
print("请输入2000至2021的年份")
year = int(input('请输入年份:'))
mouth = int(input('请输入月:'))
while 1 > mouth or mouth>12:
print('请输入1至12的月份:')
mouth = int(input('请输入月:'))
day = int(input('请输入日:'))
while day>31 or day<1:
print('请输入1到31的日')
day=int(input('请输入日:'))

if 0 < mouth <= 12:

day = int(input('请输入日:'))

if day>31 or day<0:

print('请重新输入')

day= int(input('请输入日:'))

else:

print("请重新输入")

mouth = int(input('请输入月:'))

day = int(input('请输入日:'))

if year % 4 == 0 or year % 400 == 0:
feb = 29
else:
feb = 28
mouth_day = [0, 31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

for i in mouth_day[0:mouth]:
sums = sums + i
today_day = sums + day

print('%d 月 %d 日是 %d 年的第 %d 天。' % (mouth, day, year, today_day))

你不是都已经计算feb了吗,用它跟day做个判断,如果超出了就提示不是一个有效的日期
还有if year % 4 == 0 or year % 400 == 0:这个判断不对,不是求闰年的公式啊
那只要能被400整除肯定能被4整除啊,前面的算式变成多余的了
不能被100整除的规则被你弄哪去了

你可以选择这个>>>

img


然后把代码块放在里边,这样便于阅读


sums = 0
year = int(input('请输入年份:'))
while year < 2000 or year > 2021:
print("请输入2000至2021的年份")
year = int(input('请输入年份:'))
mouth = int(input('请输入月:'))
while 1 > mouth or mouth>12:
print('请输入1至12的月份:')
mouth = int(input('请输入月:'))
day = int(input('请输入日:'))
while day>31 or day<1:
if mouth == 2:
print('请输入1到29的日')
day=int(input('请输入日:'))
else:
print('请输入1到31的日')
day=int(input('请输入日:'))

if 0 < mouth <= 12:
day = int(input('请输入日:'))
if day>31 or day<0:
print('请重新输入')
day= int(input('请输入日:'))
else:
print("请重新输入")
mouth = int(input('请输入月:'))
day = int(input('请输入日:'))
if year % 4 == 0 or year % 400 == 0:
feb = 29
else:
feb = 28
mouth_day = [0, 31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

for i in mouth_day[0:mouth]:
sums = sums + i
today_day = sums + day

print('%d 月 %d 日是 %d 年的第 %d 天。' % (mouth, day, year, today_day))
day = int(input('请输入日:'))
if mouth==2:    
    while day>29 or day<1:
        print('请输入1到29的日')
        day=int(input('请输入日:'))
else:
    while day>31 or day<1:
        print('请输入1到31的日')
        day=int(input('请输入日:'))