Вывести количество часов с правильным окончанием час(а/ов)

Рейтинг: 2Ответов: 1Опубликовано: 04.05.2015

Сделал так :

import datetime

def showHours( hours ):
    result = "{0} {1}."
    lastdigits = hours % 20
    s = ""

    if lastdigits == 1:
        s += "час"
    elif lastdigits > 1 and lastdigits < 5:
        s += "часа"
    else:
        s += "часов"

    return result.format( hours, s )

print showHours(datetime.datetime.now().hour)

Какие ещё варианты возможны?

Ответы

▲ 5Принят

Вот принимали бы вы участие в переводе интерфейса Хэшкода, и не пришлось бы задавать этот вопрос :-)

Правильный вариант такой:

def pluralRusVariant(x):
    lastTwoDigits = x % 100
    tens = lastTwoDigits // 10
    if tens == 1:
        return 2
    ones = lastTwoDigits % 10
    if ones == 1:
        return 0
    if ones >= 2 and ones <= 4:
        return 1
    return 2

def showHours(hours) :
    suffix = ["час", "часа", "часов"][pluralRusVariant(hours)]
    return "{0} {1}".format(hours, suffix)

Ваш вариант выдаст неправильный ответ при hours == 32.
Получится 32 часов, а надо 32 часа.