Как включить високосные годы в калькулятор возраста? - PullRequest
0 голосов
/ 29 января 2019

Я сделал калькулятор возраста в python, который, после того как вы ответите на ряд вопросов, даст вам ваш возраст в годах, месяцах и днях.Я пытаюсь включить в него високосные годы, используя утверждение if, которое добавляет дополнительный день к вашему возрасту для каждого опыта високосного года, но я думаю, что может быть более короткий путь.Есть идеи?

Вот мой код:

currentDay = int(input('What day of the month is it?'))
currentMonth = int(input('What month is it?'))
currentYear = int(input('What year is it?'))
birthDay = int(input('What day of the month were you born on?'))
birthMonth = int(input('What month were you born?'))
birthYear = int(input('Which year were you born in?'))
ageDays = currentDay - birthDay
ageMonths = currentMonth - birthMonth
ageYears = currentYear - birthYear
daysToAdd = 0

if currentMonth == 1 or currentMonth == 3 or currentMonth == 5 or 
currentMonth == 7:
    daysToAdd = 31

elif currentMonth == 2:
    daysToAdd = 28

elif currentMonth == 8 or currentMonth == 10 or currentMonth == 12:
    daysToAdd = 31

else:
    daysToAdd = 30

if birthDay > currentDay:
    ageMonths = ageMonths + 1
    ageDays = ageDays + daysToAdd

if birthMonth > currentMonth:
    ageMonths = ageMonths + 12

if birthYear < 2016:
    ageDays = ageDays + 1
    if birthYear < 2012:
        ageDays = ageDays + 1
        if birthYear < 2008:
            ageDays = ageDays + 1
            if birthYear < 2004:
                ageDays = ageDays + 1
                if birthYear < 2000:
                    ageDays = ageDays + 1
                    if birthYear < 1996:
                        ageDays = ageDays + 1

print('You are: ', ageYears, ' years, ', ageMonths, ' months, ', ageDays, ' 
days.')

Ответы [ 3 ]

0 голосов
/ 29 января 2019

високосные годы определяются как делимые:

  • на 4, но не 100
  • на 400

с использованием list понимания и range Вы можете получить количество високосных лет между заданными годами следующим образом:

start_year = 1998 #inclusive
end_year = 2019 #exclusive
leaps =  [i for i in list(range(start_year,end_year)) if (i%4==0 and i%100!=0) or i%400==0]
print(leaps)

вывод:

[2000, 2004, 2008, 2012, 2016]
0 голосов
/ 29 января 2019

Попробуйте этот код:

# import date to get current year
from datetime import date
# Get current year
current_year = date.today().year
    # your code here...
    # ...
    # loop from birthYear to current year
    for y in range(birthYear, current_year+1, 1):
        # check if leap year
        if y in range(0, date.today().year, 4):
            ageDays = ageDays + 1

Надеюсь, это поможет!

0 голосов
/ 29 января 2019

Не используя упомянутые модули, предполагая, что вы делаете это ради тренировки, используйте целочисленное деление:

ageDays = ageDays + (2019-birthYear) // 4

Пример:

(2019 - 2016) // 4
>> 0
(2019 - 2015) // 4
>> 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...