鱼C论坛

 找回密码
 立即注册
查看: 2292|回复: 5

[已解决]Python问题,,,,详情请大佬往下看

[复制链接]
发表于 2019-10-2 12:14:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学校社团要我们写一个生日倒计时的代码,也就是输入你的生日,然后会打印出还有多少天是你的生日
但是输入日期的时候要求加上一个检查日期合法性的东西,然后要告诉输入者错误的地方并要求重新输入
大部分东西都完成了,就差这么一点点,实在想不到什么简单的方法,如果一个月一个月去编写代码来检查,那实在是太繁琐了。。
# coding=<encoding name> : # coding=utf-8
import datetime
import time

year = input("输入你的出生年:")
month = input("输入你的出生月:")
day = input("输入你的出生日:")

y = int (year)
m = int (month)
d = int (day)

def my_function():
    a = datetime.date.today()
    b = datetime.date(y, m, d,)
    print ("你的生日是:",b)
    Y = a.year
    if m ==2 and d == 29:
       Y = a.year
       while  Y%4 != 0:
          Y = Y + 1   
    b = datetime.date( Y, m, d)
    delta = b - a
    if b > a:
        print("那么还有",delta,"就是你的生日了")
    elif b < a:
        print("你的生日过去了啊、、、")
        print(-delta,"前是你的生日啊")
    elif b == a:
        print("今天就是你的生日哦!!!")
    return a,b


my_function()
自己做的就这么一点点
最佳答案
2019-10-2 14:50:05
2444340649 发表于 2019-10-2 14:10
那报错之后要如何返回到输入,让对方重新输入呢?

这样做:
# coding=utf-8
import datetime

while True:
    try:
        year = input("输入你的出生年:")
        month = input("输入你的出生月:")
        day = input("输入你的出生日:")

        y = int (year)
        m = int (month)
        d = int (day)

        datetime.date(y, m, d)
        break
    except Exception:
        print("输入有误,请重新输入!")

def my_function():
    a = datetime.date.today()
    b = datetime.date(y, m, d)
    print ("你的生日是:",b)
    Y = a.year
    if m ==2 and d == 29:
       Y = a.year
       while  Y%4 != 0:
          Y = Y + 1
    b = datetime.date( Y, m, d)
    delta = b - a
    if b > a:
        print("那么还有",delta,"就是你的生日了")
    elif b < a:
        print("你的生日过去了啊、、、")
        print(-delta,"前是你的生日啊")
    elif b == a:
        print("今天就是你的生日哦!!!")
    return a,b


my_function()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-2 12:32:43 | 显示全部楼层
用datetime.date检查
>>> datetime.date(1992,15,2)
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    datetime.date(1992,15,2)
ValueError: month must be in 1..12
>>> datetime.date(1992,2,29)
datetime.date(1992, 2, 29)
>>> datetime.date(1993,2,29)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    datetime.date(1993,2,29)
ValueError: day is out of range for month
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-2 13:46:46 | 显示全部楼层

oh,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-2 14:10:35 From FishC Mobile | 显示全部楼层
冬雪雪冬 发表于 2019-10-2 12:32
用datetime.date检查

那报错之后要如何返回到输入,让对方重新输入呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-2 14:50:05 | 显示全部楼层    本楼为最佳答案   
2444340649 发表于 2019-10-2 14:10
那报错之后要如何返回到输入,让对方重新输入呢?

这样做:
# coding=utf-8
import datetime

while True:
    try:
        year = input("输入你的出生年:")
        month = input("输入你的出生月:")
        day = input("输入你的出生日:")

        y = int (year)
        m = int (month)
        d = int (day)

        datetime.date(y, m, d)
        break
    except Exception:
        print("输入有误,请重新输入!")

def my_function():
    a = datetime.date.today()
    b = datetime.date(y, m, d)
    print ("你的生日是:",b)
    Y = a.year
    if m ==2 and d == 29:
       Y = a.year
       while  Y%4 != 0:
          Y = Y + 1
    b = datetime.date( Y, m, d)
    delta = b - a
    if b > a:
        print("那么还有",delta,"就是你的生日了")
    elif b < a:
        print("你的生日过去了啊、、、")
        print(-delta,"前是你的生日啊")
    elif b == a:
        print("今天就是你的生日哦!!!")
    return a,b


my_function()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-2 18:46:59 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-10-2 14:50
这样做:

这样挺好了,那如果要知道哪里错了,有可能实现嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表