Ваш исходный код является множеством разных операторов if, поэтому предложение else всегда выполняется для случаев '1' и '2'. Вы должны использовать 'elif' («else if»), чтобы обеспечить выполнение только одного из дел.
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
В вашем примере ordinal_number может соответствовать двум выражениям:
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ты видишь разницу? Пожалуйста, спросите, если что-то неясно.
Этот маленький пример будет немного более питоническим:
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))