【问题标题】:Creating an age calculator using python by calculating current year - birth year通过计算当前年份 - 出生年份使用 python 创建年龄计算器
【发布时间】:2017-02-27 01:18:04
【问题描述】:

我已经查看了堆栈溢出的所有内容,所以我真的需要帮助。我正在制作一个程序,该程序应该通过询问他们的出生年份来计算一个人的年龄,验证他们的出生年份是否正确,如整数,而不是单词或任何其他无效类型的答案。然后从我们当前的年份中减去出生年份。我在输入当前年份并从中减去用户输入的出生年份时遇到问题。

    # Function Boolean is_valid_integer(String input_string)
    #   Declare Boolean is_valid
    #
    #   is_valid = is input_string a valid integer?
    #   Return is_valid
    # End Function

    def is_valid_integer(input_string):
        try:
            val = int(input_string)
            is_valid = True
        except ValueError:
            is_valid = False
        return is_valid

    # Function Integer get_year_born()
    #   Declare Boolean is_valid
    #
    #   Display "What year were you born in? "
    #   Input input_string
    #   Set is_valid = is_valid_integer(input_string)
    #   While Not is_valid
    #       Display "Please only enter whole years."
    #       Input input_string
    #       is_valid = is_valid_integer(input_string)
    #   End While
    #   input_integer = int(input_string)
    #   Return input_integer
    # End Function

    def get_year_born():
        input_string = input("What year were you born in? ")
        is_valid = is_valid_integer(input_string)
        while not is_valid:
            input_string = input("Please only enter whole years. ")
            is_valid = is_valid_integer(input_string)
        input_integer = int(input_string)
        return input_integer

    # Function Integer calculate_difference()
    #   difference = 2017 - input_integer
    # End Function

    import datetime
    def calculate_difference(difference):
        difference = 2017 - input_integer
        return difference



    # Module calculate_age_year()
    #   Set born = get_year_born()
    #   Call calculate_difference()
    # End Module

    def calculate_difference():
        print("Your age is: ", difference)

    calculate_age_year()

在尝试将数据时间导入我的编码后,效果不佳。我也不想计算具体的日期和/或时间,所以我删除了建议编码的那些部分,也许这与它有关?

我创建这个程序的目的实际上只是计算年数,所以如果我出生于 2000 年,我希望程序从 2017 年开始计算,这意味着我现在已经 17 岁。

我的第一个函数是排除错误输入的循环,第二个函数是获取用户出生的年份,第三个函数应该是计算当前日期和用户出生日期之间的差异,以及第四个函数输出用户的实际年龄。

【问题讨论】:

  • 在你的 get_number_of_age() 方法中你没有做任何减法。 age = current_year - input_integer 在哪里...您所做的只是返回用户输入。
  • 听起来像家庭作业?将其分解为步骤 1) 获取年龄。 2)验证年龄 3)用它做点什么。首先关注各个步骤。
  • 展示你的实际尝试。 “当我实际输入类似...的内容时”并没有向我们展示您实际在做什么,因此我们无法告诉您如何解决它。就目前而言,today 未定义,因此您的代码在调用“calculate_age_year()”时会崩溃。

标签: python pseudocode


【解决方案1】:

要在 Python 中处理日期,您可以使用模块 datetime

要验证错误,pythonic 的做法是使用try...catch 将用户输入转换为日期时间。捕捉可能的错误并从那里进行错误管理。

这是一个简单的例子:

import datetime


def print_age():
    year = raw_input('Enter your age (YYYY/MM/DD): ')

    try:
        year = [int(i) for i in year.split('/')]
        birth_data = datetime.date(year[0], year[1], year[2])

        today = datetime.date.today()
        time_diff = today - birth_data

        print('Your age is: {} year and {} days'. format(
            time_diff.days // 365, time_diff.days % 365))
    except ValueError, KeyError:
        # Do your error management here
        print('Please use the format YYYY/MM/DD')


print_age()

有了这个,返回True或者False,然后把函数放到一个循环里面应该就比较简单了。

编辑

这是一段代码,询问用户他的出生年份并打印出差异:

import datetime

year = None
while year is None:
    try:
        user_input = raw_input('Enter your date of birth (YYYY): ')
        year = int(user_input)
    except ValueError:
        print('Your did not enter a valid year!')

print('You were born {} years ago'.format(datetime.datetime.now().year - year))

它不检查年份的有效性,如果输入61241,它不会返回错误。

如果您愿意,您可以添加一层验证来检查年份范围。

【讨论】:

  • 感谢您的帮助,但是我不希望程序计算特定的日期或时间,而只是计算年份。你能帮我多一点吗?我试过在你提到它之前和之后导入日期时间,但我觉得我可能用错了,所以它不起作用?我以我认为可行的方式添加了它(我尝试的最后一种方式是我发布的当前方式),但它不起作用。任何建议都会很有帮助!
  • 您可以检查编辑,它应该更接近您想要实现的目标。
  • 目前仍在努力,感谢您迄今为止的所有帮助。我的任务是选择任何类型的程序进行真正的编码,我选择编写一个计算器来计算你的年龄,方法是用你出生的年份(输入)减去我们现在所在的年份(2017 年) .不幸的是,所有东西都必须有自己的块,用于输入、输出等......如果你可以看一下并告诉我,这是我现在该块的代码?
  • def calculate_difference(difference): 差异 = datetime.datetime.now().year - input_integer 返回差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多