Определение функции, которая принимает два аргумента, включая имя (строку) и дату рождения (дату).

Мое домашнее задание просит меня: Определить функцию make_birthday_intro(), которая принимает два аргумента: имя (строка) и дату рождения (дата).

Вы должны использовать свою функцию make_introduction() из части 1! Возможно, вам потребуется вычислить переменную для передачи в этот вызов функции.

Подсказка: используйте функцию relativedelta(), чтобы вычислить текущий возраст человека, а также когда он станет на 1 год старше. Вы можете получить количество дней или лет из значения relativedelta (например, time_difference), обратившись к свойствам .days или .years (например, time_difference.years).

И вторая часть

Создайте переменную my_bday_intro, вызвав функцию make_birthday_intro() и передав свое имя (уже переменную!) и дату своего рождения. Распечатайте переменную после ее создания.

Мой наставник и я действительно изо всех сил пытались решить это вместе, но я считаю, что часть проблемы заключалась в том, что мы не работали над первой частью задания вместе, поэтому он не полностью понял эту часть задания, которая, как я позже понял, может быть отчасти из-за того, что мы так застряли, нам не хватало переменной. Я даже не могу понять, с чего начать вторую часть задания, потому что мы так застряли на части make_birthday_intro.

мой код make_introduction из части 1, включая весь предшествующий код

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)

Я не знаю, с чего начать вторую часть задания

Эта функция должна возвращать строку в формате "Здравствуйте, меня зовут {ИМЯ}, мне {ВОЗРАСТ} лет. Через {N} дней мне будет {NEW_AGE}" (заменяет {ИМЯ}, {ВОЗРАСТ} , {N} и {NEW_AGE} с соответствующими значениями).

Там, где он должен быть готов: «Здравствуйте, меня зовут Кейтлин, мне 24 года. Через 274 дня мне будет 25».

однако мой текущий вывод:

8857 days, 0:00:00

И я, честно говоря, не уверен, что мне следует искать во второй части.


person Kaitlyn Griffith    schedule 12.05.2019    source источник
comment
make_birth_intro(make_introduction(my_name, my_age), dateThing). Аргументы функции должны быть переданы. Аргументы сами по себе не могут быть ссылками на переменные. Либо вы передаете его, либо используете глобальные переменные внутри функции.   -  person Error - Syntactical Remorse    schedule 13.05.2019


Ответы (2)


Вы очень близки. Чтобы получить возраст в годах, вы можете взять только параметры года из дат и вычесть их, чтобы получить разницу в годах. Чтобы получить количество дней, оставшихся до дня рождения, вы можете сначала получить дату рождения в текущем году, а затем вычесть ее из текущей даты, чтобы получить разницу в днях. Сложность возникает, когда день рождения уже прошел, но может быть изменен простым увеличением лет.

Вы бы примерно сделали это так (сам не проверял):

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)

person razdi    schedule 12.05.2019

Я не особо вчитывался в постановку задачи, и, как сказал Разди, вы близки, я кое-что переписал.

С этим решением вам просто нужен 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.
person Error - Syntactical Remorse    schedule 12.05.2019
comment
но теперь я получаю странный вывод со второй частью my_bday_intro = make_birthday_intro(my_name, DOB) print(my_bday_intro) #output 8857 days, 0:00:00 None - person Kaitlyn Griffith; 13.05.2019
comment
make_birthday_intro из моего примера не принимает двух аргументов, поэтому я не знаю, где вы получили этот вывод (и я никогда не печатаю это число)... Но 8857 - это ваш возраст в днях.... 8857/365 - это 24 и некоторые изменения. - person Error - Syntactical Remorse; 13.05.2019
comment
В моем вопросе выше есть две части, во второй части меня просят создать переменную my_bday_intro, вызвав вашу функцию make_birthday_intro() и передав ваше имя (уже переменная!) и дату вашего рождения. Распечатайте переменную после ее создания. поэтому я пытаюсь сделать это с помощью y_bday_intro = make_birthday_intro(my_name, DOB) print(my_bday_intro), и вот как я получаю странный вывод - person Kaitlyn Griffith; 13.05.2019
comment
Это не странно. Это печатает разные today - DOB. Вам нужно вручную что-то сделать с ним, например my_age = results.days // 365. Скопируйте и вставьте мой код в IDE, добавьте несколько отпечатков и просмотрите его, чтобы увидеть, как все это работает. Тогда вы сможете ответить на ваши вопросы. - person Error - Syntactical Remorse; 13.05.2019