Your original code is multiple different if statements, and so the else clause always executes for the '1' and '2' cases. You should use 'elif' ("else if") to ensure only one of the cases ever executes.
ordinal_numbers = ('1','2','3','4','5','6','7','8','9')
for ordinal_number in ordinal_numbers:
if '1' in ordinal_number:
print('1st') # 1
elif '2' in ordinal_number:
print('2nd') # 2
elif '3' in ordinal_number:
print('3rd') # 3
else:
print(ordinal_number + 'th') # 4,5,6,7,8,9
In your example ordinal_number can match two expressions:
ordinal_numbers = ('1','2','3','4','5','6','7','8','9')
for ordinal_number in ordinal_numbers:
if '1' in ordinal_number:
print('1st') # 1
if '2' in ordinal_number:
print('2nd') # 2
if '3' in ordinal_number:
print('3rd') # 3
else:
print(ordinal_number + 'th') # 1,2,4,5,6,7,8,9
Do you see the difference?
Please ask if something is unclear.
This little example would be a little more pythonic:
def get_suffix(number):
"""Returns the suffix from the dictionary or 'th'
Works for numbers from 1 to 20
"""
return {1: 'st', 2: 'nd', 3: 'rd'}.get(int(number), 'th')
def get_suffix2(number):
"""same as above but works with all numbers"""
return {1: 'st', 2: 'nd', 3: 'rd'}.get(
int(number) % 10 * (int(number) % 100 not in [11, 12, 13]), "th"
)
for ordinal_number in ordinal_numbers:
print(ordinal_number + get_suffix(ordinal_number))