【问题标题】:Dates and Arithmetic日期和算术
【发布时间】:2017-08-23 17:01:25
【问题描述】:

我自学了将近一个月的 Python,遇到了一个涉及“日期时间”和算术运算符的练习。

首先 - 他们要求我创建一个代码,用户应该在其中输入项目的截止日期,并且代码必须告诉他们必须完成多少天。

我这样做了:

    import datetime  
    today = datetime.date.today()  
    delivery_date = input("Tell me your deadline (dd/mm/aa): ")

    print("\n")

    deadline = datetime.datetime.strptime(delivery_date, "%d/%m/%y").date()  
    days = delivery_date - today  
    print("You have", days.days, "days to finish your project.")

但第二部分有点棘手。

第二 - 他们要求我尝试结合几周和几天给出答案,并且我需要一些数学函数来解决最后一部分。

我这样做了:

    weeks = days // 7
    remainder_days = days % 7
    print("You have", weeks.days, "weeks and", remainder_days.days, "days.")

只有这最后一部分失败了。最后我得到这个错误信息:

        remainder_days = days % 7
    TypeError: unsupported operand type(s) for %: 'datetime.timedelta' and 'int'  

我知道问题出在模数符号 (%) 上,但如果他们要求我以周和天的组合给出最终结果,这是可能的,但我不知道如何。

有没有其他方法可以通过简单的数学运算来解决这个问题?
我需要在我的代码中添加任何内容吗?
有人可以帮我吗?
谢谢

【问题讨论】:

    标签: python-3.x date datetime arithmetic-expressions


    【解决方案1】:

    days = delivery_date - today 应该是 days = deadline - today。你也应该叫它delta,因为它是一个时间增量,你可以在其中使用delta.days 来获取天数。稍后只需使用delta.days

    另外delta.days 只是一个数字,所以在执行delta.days // 7 时,您不想在结果上调用.days

    类似下面的东西应该可以工作:

    import datetime  
    today = datetime.date.today()  
    delivery_date = input("Tell me your deadline (dd/mm/aa): ")
    
    print("\n")
    
    deadline = datetime.datetime.strptime(delivery_date, "%d/%m/%y").date()  
    delta = deadline - today  
    print("You have", delta.days, "days to finish your project.")
    
    weeks = delta.days // 7
    remainder_days = delta.days % 7
    print("You have", weeks, "weeks and", remainder_days, "days.")
    

    顺便说一下,错误为您指明了正确的方向:TypeError: unsupported operand type(s) for %: 'datetime.timedelta' and 'int'。这意味着您有一个时间增量对象,您在其上应用带整数的模运算符,python 告诉您这是不可能的。所以你需要以某种方式从你的时间增量中得到一个整数。

    【讨论】:

    • 天哪,它有效,非常感谢@user276648。我刚接触编程,所以我需要了解更多关于日期时间的信息,即使知道@#s 很痛苦。非常感谢你!我只是对你的回答有疑问。您说我应该将“delta”称为变量,因为它是一个时间增量。这真的有必要还是只是一个正常的程序?我不太了解它,所以我将查看 python 网站以了解更多信息。但是,真的,谢谢你;)
    • @MárcioCunha 我建议你称它为deltatime_delta,这样当你阅读代码时,更清楚变量的类型是什么。如果您将其称为days,您可能会认为这是几天。同样,我会将delivery_date 重命名为deadline_string:您只使用一个术语deadline,并且您很容易知道deadlinedeadline_string 之间的区别以及使用哪一个。当然,它也适用于仅命名为 ab 的变量,但会更加混乱!
    • 好的@user276648,我会听从你的建议。再次感谢您的帮助!希望有一天我也能帮助其他人=D
    猜你喜欢
    • 2011-02-23
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2012-07-22
    • 2012-01-14
    • 2011-07-21
    相关资源
    最近更新 更多