通过计算当年 - 出生年份使用python创建年龄计算器

问题描述:

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

# 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() 

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

我对这一计划的目的是真的才算年,所以如果我出生在2000年,我希望该计划从2017年计算,这意味着我会是17岁截至目前。

我的第一个功能是使虚假输入无效的循环,第二个功能是获取用户出生的年份,第三个功能应该是计算当前日期和用户出生日期之间的差异,以及输出用户的实际年龄的第四功能。

+0

在你的get_number_of_age()方法中,你没有做任何减法。 age = current_year - input_integer ...你所做的只是返回用户输入。 – reticentroot

+0

听起来像功课?分解成步骤1)获得年龄。 2)验证年龄3)用它做一些事情。首先关注各个步骤。 – user1269942

+0

显示你的实际尝试。 “当我实际上输入某些东西时......”并没有向我们展示你实际上在做什么,所以我们不能告诉你如何解决它。就目前而言,'today'没有定义,因此调用“calculate_age_year()”时代码崩溃。 –

要在Python中的日期时,您可以使用该模块datetime

为了验证错误,做的Python的方式是使用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() 

有了这个,应该是比较简单的返回TrueFalse,并把功能在一个循环。

编辑

下面是一段代码,询问他的出生年份的用户和打印的区别:

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,它不会返回错误。

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

+0

谢谢你的帮助,但是我不希望程序计算特定的日期或时间,仅仅是一年。你能帮我多一点吗?我已经试过在你提到它之前和之后导入日期时间,但我觉得我可能会使用它错误,所以它不工作?我已经按照我认为它会工作的方式添加了它(我尝试的最后一种方法是我发布的最新方式),并且它不起作用。任何建议将非常有帮助! – andyhle95

+0

你可以检查编辑,它应该更接近你想要实现的。 –

+0

目前仍在努力,感谢您的帮助。我的任务是选择任何一种程序来真正编码,我选择编写一个计算器,通过计算出生年份(输入),并从当前年份(2017年) 。不幸的是,一切都必须有它自己的块,输入,输出等...这是我现在的代码,如果你可以看一看,让我知道吗? – andyhle95