Любое красивое форматирование строки Python для счетчика? - PullRequest
3 голосов
/ 20 февраля 2012

Есть ли форматирование строки для использования правильного суффикса с сообщениями журнала, например:

for n in itertools.count():
  print 'printing for the {:nth} time'.format(n)

Ожидаемый результат:

printing for the 0th time
printing for the 1st time
printing for the 2nd time
printing for the 3rd time
printing for the 4th time
printing for the 5th time
...
printing for the 23rd time
...
printing for the 42nd time
...
etc

Я мог бы кататься самостоятельно, но мне было интересно, есть ли уже встроенное решение. Если нет, я приму в качестве ответа самое элегантное решение!

Ответы [ 2 ]

8 голосов
/ 20 февраля 2012

А как же просто:

def stringify(x):
  if x // 10 % 10 == 1:
    return str(x) + 'th'
  else:
    return str(x) + { 1:'st', 2:'nd', 3:'rd' }.get(x % 10, 'th')

Или, если вы предпочитаете некрасивые хаки:

return str(x) + { 1:'st', 2:'nd', 3:'rd' }.get(x//10%10 != 1 and x%10, 'th')

Я чувствовал себя немного грязно, когда писал это.

0 голосов
/ 20 февраля 2012
ordinal = lambda x: str(x) + ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'][0 if int(str(x)[-2:]) > 9 and int(str(x)[-2:]) < 21 else int(str(x)[-1])]

Не очень эффективно, но определенно однострочно;)

...