Дата Порядковый Выход? - PullRequest
       24

Дата Порядковый Выход?

20 голосов
/ 11 апреля 2009

Мне интересно, есть ли быстрый и простой способ вывода ординалов с заданным числом в python.

Например, учитывая число 1, я хотел бы вывести "1st", число 2, "2nd", и так далее, и так далее.

Это для работы с датами в хлебной крошке

Home >  Venues >  Bar Academy >  2009 >  April >  01 

- это то, что в данный момент отображается

Я бы хотел иметь что-то вроде

Home >  Venues >  Bar Academy >  2009 >  April >  1st

Ответы [ 14 ]

0 голосов
/ 07 сентября 2013

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

Он работает, определяя, является ли число выше или ниже 20, если число меньше 20, оно превратит int 1 в строку 1st, 2, 2nd; 3, 3; а остальные добавят к нему "st".

Для чисел старше 20 потребуется последняя и вторая до последней цифры, которые я назвал десятками и единицами соответственно, и проверим их, чтобы увидеть, что добавить к числу.

Кстати, это на python, поэтому я не уверен, смогут ли другие языки найти последнюю или последнюю или последнюю цифру в строке, если они это сделают, это должно довольно легко перевести.

def o(numb):
    if numb < 20: #determining suffix for < 20
        if numb == 1: 
            suffix = 'st'
        elif numb == 2:
            suffix = 'nd'
        elif numb == 3:
            suffix = 'rd'
        else:
            suffix = 'th'  
    else:   #determining suffix for > 20
        tens = str(numb)
        tens = tens[-2]
        unit = str(numb)
        unit = unit[-1]
        if tens == "1":
           suffix = "th"
        else:
            if unit == "1": 
                suffix = 'st'
            elif unit == "2":
                suffix = 'nd'
            elif unit == "3":
                suffix = 'rd'
            else:
                suffix = 'th'
    return str(numb)+ suffix

Я вызвал функцию «o» для простоты использования, и ее можно вызвать, импортировав имя файла, которое я назвал «ординал», путем импорта ordinal, а затем ordinal.o (число).

Дайте мне знать, что вы думаете: D

P.S. Я отправил этот ответ на другой вопрос об ординалах, но понял, что этот вопрос более применим, учитывая, что это питон.

0 голосов
/ 21 мая 2013

Мне пришлось конвертировать скрипт из javascript, где у меня был полезный fn, который копировал phps date obj. Очень похоже

def ord(n):
    return str(n)+("th" if 4<=n%100<=20 else {1:"st",2:"nd",3:"rd"}.get(n%10, "th"))

это связано с моим стайлером даты:

def dtStylish(dt,f):
    return dt.strftime(f).replace("{th}", ord(dt.day))

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

0 голосов
/ 21 января 2012

Исправлено для отрицательных входов, основанных на хорошем sol'n eric.frederich (просто добавлен abs при использовании %):

def ordinal(num):
    return '%d%s' % (num, { 11: 'th', 12: 'th', 13: 'th'}.get(abs(num) % 100, { 1: 'st',2: 'nd',3: 'rd',}.get(abs(num) % 10, 'th')))
0 голосов
/ 17 февраля 2010

Вот еще более короткое общее решение:

def foo(n):
    return str(n) + {1: 'st', 2: 'nd', 3: 'rd'}.get(4 if 10 <= n % 100 < 20 else n % 10, "th")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...