木良450 2021-11-07 17:54 采纳率: 75%
浏览 260
已结题

判断用户输入的日期是否正确(年月日)

为什么添加中间的判断,输出直接出结果(包括错误的),不加中间的判断就可以正常判断后输出


 
'''
1.用户输入
2.判断输入格式是否正确
    2.1长度是否正确
    2.2是否全是数字
    2.3月份是否正确
        2.3.1判断月份区别(30、31)
    2.4日期是否正确
    2.5判断年份是否是闰年或平年
        2.5
3.输出正确输入
'''
date = input('请输入年月日:')
month_ = [1,2,3,4,5,6,7,8,9,10,11,12]
month_31 = [1,3,5,7,8,10,12]
month_30 = [4,6,9,11]
if len(date) != 8:
    print('格式不正确,请输入正确的日期')
elif not date.isdigit():
    print('格式不正确,请输入正确的日期')
    year = date[:4]
    if year % 400 == 0:
        print('是闰年')
    elif (year % 4 == 0) and (year % 100 != 0):
        print('是闰年')
    else:
        print('不是闰年')
    month = date[4:6]
    if date[4:6] in month_:
        print('月份输入正确')
    else:
        print('月份输入错误')
    day = date[6:]
    if month in month_30:
        if day <= 30:
            print('日期正确')
        else:
            print('日期错误')
    elif month in month_31:
        if day <= 31:
            print('日期正确')
        else:
            print('日期不正确')
    if month == 2 and (year % 400 == 0):
        if day <= 29:
            print('日期正确')
        else:
            print('日期输入不正确')
    elif month == 2:
        if day <= 28:
            print('日期正确')
        else:
            print('日期输入不正确')
else:
    print(date)
 
  • 写回答

2条回答 默认 最新

  • 提着脑袋去学习 2021-11-07 18:06
    关注

    elif not date.isdigit():
    你这一句是指,当输入的8个字符都是数字,就不走这个分支
    所以你正常输入8个数字(无论对错),直接跳到了else分支,直接输出了呀

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错