Python - ввод пользовательского ввода дней с последующим отображением эквивалентных лет, месяцев и дней - PullRequest
0 голосов
/ 26 сентября 2018

Я изо всех сил пытаюсь найти алгоритм для части дней.Я могу сократить годы и месяцы.Вот мой код

def main():

    # Prompt the user for an integer that represents a total number of days 
    user_days = int(input("Enter a total number of days: "))

    # constant variables for: years, months, days

    DAYS_IN_YEAR = 365
    DAYS_IN_MONTH = 30

    # Calculate the user's days into equivalent years
    years = (int(user_days // DAYS_IN_YEAR))

    # Calculate the user's days into equivalent months
    months = (int(user_days // DAYS_IN_MONTH))

    # Calculate the user's days into equivalent days
    # days = (int( user_days - DAYS_IN_MONTH ))
    # days = (int( ))

    # give user their results
    print(user_days, "days are equivalent to: ")

    # display the equivalent years
    print("Years: ", years)

    # display the equivalent months
    print("Months: ", months)

    # display the equivalent days
    print("Days: ", days)



main()

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Это хорошее использование для divmod(), которое выполняет целочисленное деление и дает вам как частное, так и остаток:

user_days = 762

DAYS_IN_YEAR = 365
DAYS_IN_MONTH = 30

# Calculate number of years and remainder
years, rem = divmod(user_days, DAYS_IN_YEAR)

# Calculate number of months and remainder
months, days = divmod(rem, DAYS_IN_MONTH)

# Display results
print(user_days, "days are equivalent to: ")
print("Years: ", years)
print("Months: ", months)
print("Days: ", days)

# output:
# 762 days are equivalent to: 
# Years:  2
# Months:  1
# Days:  2
0 голосов
/ 26 сентября 2018

Вы не можете сделать это без даты начала, потому что месяцы меняются (особенно в високосные годы).Я предлагаю оставить дату математики в стандартной библиотеке.Получите datetime.datetime для даты начала, используйте значение «days» для построения datetime.timedelta, сложите их вместе, чтобы получить дату окончания, а затем сравните день, месяц и год дат начала и окончания.

0 голосов
/ 26 сентября 2018

Сначала вы берете days и делаете floor div на 365, и это дает вам годы.Затем нам нужны оставшиеся дни, поэтому мы используем дни modulus 365 и получаем оставшиеся дни, мы берем их и делаем floor div к 30, чтобы получить наши месяцы.затем мы берем те оригинальные оставшиеся дни и modulus 30, чтобы получить наши дни, которые остались за

days = int(input())
years = days // 365
years_r = days % 365
months = years_r // 30
days_r = years_r % 30
400
Years: 1, Months: 1, Days: 5
500
Years: 1, Months: 4, Days: 15
...