Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find ordinal numbers with loop dynamically: find th - st - nd - rd

I would like to find dynamically the correct ordinal number root for instance:

111 = 111st
112 = 112nd 
113 = 113rd ...

I tried other solutions but I can't find a good one.

This is my code:

for number in range(1, 114):
    print(number)
    ex1 = 11
    ex2 = 12
    ex3 = 13
    if number == ex1:
        print("is the " + str(number) + "th number.")
    elif number % 10 == 1 or not ex1:
        print("is the " + str(number) + "st number.")
    elif number == ex2:
        print("is the " + str(number) + "nd number.")
    elif number % 10 == 2 or not ex2:
        print("is the " + str(number) + "nd number.")
    elif number == ex3:
        print("is the " + str(number) + "rd number.")
    elif number % 10 == 3 or not ex3:
        print("is the " + str(number) + "rd number")
    else:
        print("is the " + str(number) + "th number.")
like image 696
Revoked Avatar asked Mar 01 '23 19:03

Revoked


1 Answers

Note that 11, 12 and 13 have th suffix.
Also note you can change the end of the line in print function (default \n):

print('text', end=' ')
print('another text')

Then, I suggest you to use formatted string using f"{data} constant text" or "{} constant text".format(data).

Here is my solution to your problem:

def getSuffix(n):
    if n < 0: raise Exception("Ordinal negative numbers are not allowed")
    if n % 100 in [11, 12, 13]: return 'th'
    if n % 10 == 1: return 'st'
    if n % 10 == 2: return 'nd'
    if n % 10 == 3: return 'rd'
    return 'th'


for number in range(1, 114):
    print(f"{number} is the {number}{getSuffix(number)} number")

I hope I was helpful.

like image 182
M3601 Avatar answered Apr 01 '23 01:04

M3601