【问题标题】:Issue writing a function which determines if a date is in the future编写一个确定日期是否在未来的函数
【发布时间】:2014-12-14 17:26:53
【问题描述】:

我正在尝试定义一个名为 inTheFuture() 的函数,该函数接受给定的年份编号、月份编号和日期编号作为 3 个单独的参数。该函数应返回一个布尔值(True 或 False)以指示日期(年、月和日)参数是否在未来。

这是我不断收到的错误消息:

TypeError: float() argument must be a string or a number, not 'tuple'

我尝试过转换float、string、int,我只是不知所措。

这是我的代码:

import sys
import datetime

year= input ("Enter Year: ");
month= int(input ("Enter Month: "));
day= int(input ("Enter Day: "));

def getTodaysDate():
    return datetime.datetime.today();
today = getTodaysDate();

def inTheFuture():
    ymd=(year,month,day)
    if float(ymd)>today:
        return true
    if float(ymd)<today:
        return false

inf = inTheFuture();

【问题讨论】:

  • 你期望float 在传递一组三个数字时返回什么?
  • "我试过转换浮点数、字符串、整数" - 为什么?你想用“转换”来完成什么?当你在没有转换的情况下尝试它时,你到底得到了什么错误(我假设你首先尝试了这个,如果你在沮丧地尝试所有其他事情)?你对这个问题的理解是什么?
  • 有点沮丧和使用 google 的误导性信息。我明白我现在不能这样做。多亏了你和 Korem,我现在正朝着正确的方向前进。 :)
  • 顺便说一句,我有唯一的理由;是因为我的老师正试图让我们这样做,因为大多数语言都要求你这样做。他只是想让我们养成使用它们的习惯。

标签: python date datetime boolean


【解决方案1】:

要处理日期(没有时间),您可以使用 datetime.date 类:

#!/usr/bin/env python3
from datetime import date

def in_future(date_to_test):
    """Whether *date_to_test* is in the future."""
    return date_to_test > date.today()

input_date = date(*map(int, input("Enter Year-Month-Day: ").split('-')))
print("Got {}. Is it in the future?".format(input_date))
print("yup" if in_future(input_date) else "nope")

【讨论】:

    【解决方案2】:

    正如错误所说:您尝试将float(ymd)today 进行比较,其中ymd 被分配了元组(year, month, day)。你期待的结果究竟是什么?当您将(year, month, day) 传递给float 时,您认为会发生什么?它不代表我能想到的任何float

    但即便如此,您的比较也毫无意义,因为todaydatetime.datetime 实例。当您将float 与它进行比较时,您期望会发生什么?这应该如何工作?

    比较苹果和苹果。如果您想知道由给定yearmonthday 值表示的日期和时间是否在给定datetime.datetime 值之前,则使用year、@ 987654336@ 和 day 来创建那种实际上代表日期和时间的东西 - 即,datetime.datetime 实例 - 你正在比较的那种东西 。苹果对苹果。

    内置的help 以及在线文档说明这是将year/month/day 顺序中的这些值传递给datetime.datetime 的简单问题构造函数:

    day = datetime.datetime(year, month, day)
    if day > today: # etc.
    

    顺便说一句,您的程序还存在多个其他问题。您不应该明确地 raise SystemExit 自己中止脚本(通常最好让它自然结束) - 这就是 exit() 的用途。在实际验证 yearmonthday 值之前,您尝试计算 inf(但实际上,您无需自己执行此操作;相反,尝试使用以下方法创建 datetime.datetime无效值会引发ValueError,您可以自己检测)。你到处都有分号,这在 Python 中是不必要的,也是一个坏习惯。 Python 中的布尔常量拼写为TrueFalse,大写字母。最后,您的最后一行只是引用inf,但没有对它做任何事情;这不会导致显示值。在脚本中,您需要明确地print 要输出的内容。

    【讨论】:

      【解决方案3】:

      您不能将日期转换为浮点数、字符串或整数。 date 实现了它自己的比较。您需要转换您的论点以符合要求。这应该有效:

      today = datetime.datetime.today().date()
      
      def inTheFuture(year, month, day):
          ymd=datetime.datetime(year,month,day).date()
          if ymd > today:
              return True
          else:
              return False
      

      【讨论】:

        猜你喜欢
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 1970-01-01
        • 2010-11-29
        • 1970-01-01
        • 2016-01-06
        相关资源
        最近更新 更多