Как я могу это исправить, если еще заявление в Python? - PullRequest
1 голос
/ 07 октября 2019

Вопрос состоит в том, чтобы каждое число отображалось один раз с соответствующим термином (от 1 до 9, переходя к 1-му, 2-му, 3-м и т. Д.), Каждое из которых отображается в отдельных строках. Когда я запускаю этот код:

ordinal_numbers = ('1','2','3','4','5','6','7','8','9')
for ordinal_number in ordinal_numbers:
    if '1' in ordinal_number:
        print('1st')
    if '2' in ordinal_number:
        print('2nd')
    if '3' in ordinal_number:
        print('3rd')
    else:
        print(ordinal_number + 'th')

, я получаю каждый код в отдельной строке, но для 1 и 2 он также отображает 1-й и 2-й, наряду с 1-м и 2-м. Для числа 3 отображается только 3-е. Как мне это исправить?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Ваш исходный код является множеством разных операторов 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))
0 голосов
/ 07 октября 2019

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

ordinal_numbers = ('1', '2', '3', '4', '5', '6', '7', '8', '9')
postfixes = ['st', 'nd', 'rd'] + ['th'] * (len(ordinal_numbers) - 3)

for num, ppostfix in zip(ordinal_numbers, postfixes):
    print(num + ppostfix)

Вывод:

1st
2nd
3rd
4th
5th
6th
7th
8th
9th
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...