定义一个带有两个参数的函数,包括名称(字符串)和生日(日期)

时间:2019-05-12 23:10:44

标签: python python-3.x datetime relativedelta

我的作业要求我:定义一个函数make_birthday_intro(),该函数带有两个参数:名称(字符串)和生日(日期)。

您应该利用第1部分中的make_introduction()函数!您可能需要计算一个变量以传递给该函数调用。

提示:使用relativedelta()函数可计算该人的当前年龄以及他们何时变老1岁。您可以通过访问.days或.years属性(例如time_difference.years)从relativedelta值(例如time_difference)中获得天数或年数。

第二部分

通过调用my_bday_intro函数并传入名称(已经是变量!)和出生日期来创建变量make_birthday_intro()。创建变量后,将其打印出来。

我和我的导师真的很难一起解决这个问题,但是我认为部分问题是我们没有一起完成作业的一部分,所以他没有完全理解我意识到的这部分作业后来可能是为什么我们如此卡住,缺少变量的一部分。我无法弄清楚从第二部分开始的地方,因为我们陷入了make_birthday_intro部分。

第1部分中我的make_introduction代码,包括所有通往该代码的代码

my_name = "Kaitlyn Griffith"
print(my_name)

my_age = 24
print(my_age)

def make_introduction(my_name, my_age):
    return "Hello, my name is, " + my_name + " and I'm " + str(my_age) + " years old."

我对家庭作业问题的尝试

import datetime

def make_birth_intro(name, date_of_birth):
    age = datetime.date.today() - date_of_birth
    print(age)

dateThing = datetime.date(1995, 2, 10)
make_birth_intro(make_introduction, dateThing)

我不确定从第二部分开始的地方

此函数应返回格式为“你好,我的名字是{NAME},我已经{AGE}岁。在{N}天内,我将是{NEW_AGE}”(替换{NAME}, {AGE},{N}和{NEW_AGE}(具有适当的值)。

应该准备就绪的地方“你好,我叫Kaitlyn,今年24岁。在274天内我将25岁”

但是,我当前的输出是:

8857 days, 0:00:00

老实说,我不确定第二部分应该找什么

2 个答案:

答案 0 :(得分:0)

您非常亲密。要获得以年为单位的年龄,您可以仅从日期中获取年份参数,然后减去它们以获取以年为单位的差异。 要获得生日的剩余天数,您可以先获取当年的出生日期,然后从当前日期中减去该天数以得到天数的差额。当生日已经过去,但可能会随着几年的增加而简单地改变。

您大概会这样(尚未测试自己):

def make_birth_intro(name, date_of_birth):
    today = datetime.date.today()
    age = today.year - date_of_birth.year
    print(age)
    this_birthday = date_of_birth.replace(year = today.year)
    if(this_birthday < today):
        this_birthday = this_birthday.replace(year=this_birthday.year + 1)
    days_left = this_birthday - today
    print(days_left.days)

答案 1 :(得分:0)

我没有充分阅读整个问题说明,并且正如razdi所说,您很亲密,我重写了一些东西。

使用此解决方案,您只需要DOB,而不需要您的年龄。


import datetime

def make_introduction(my_name, birth_info):
    """
    Handles the printing
    """
    return f"Hello, my name is {my_name} and I'm {birth_info[0]} years old, in {birth_info[1]} I'll be {birth_info[0] + 1}."

def make_birth_intro(date_of_birth):
    # // is a floor division to get age in years given days
    today = datetime.date.today()
    age = (today - date_of_birth).days // 365

    next_birthday = datetime.date(today.year, date_of_birth.month, date_of_birth.day)
    if next_birthday < today:
        """
        If we already had a birthday this year then add a year.
        """
        next_birthday = next_birthday.replace(year=today.year + 1) 
    days_till_level_up = (next_birthday - today).days
    return age, days_till_level_up

my_name = "Kaitlyn Griffith"
DOB = datetime.date(1995, 2, 10)

output = make_introduction(my_name, make_birth_intro(DOB))
print(output)

输出:

Hello, my name is Kaitlyn Griffith and I'm 24 years old, in 274 I'll be 25.