有没有一种方法可以将这个if-elif-else链流化?(Python初学者)

有没有一种方法可以将这个if-elif-else链流化?(Python初学者),python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,第一篇文章在这里,这不是一个问题,因为我得到了我想要的输出,但我只是好奇是否有一个更简单的方法去做。请记住,我是python的初学者,我正在使用python 3,我非常喜欢它,这是一篇纯粹的好奇文章 因此,我正在进行的练习要求您创建一个if-elif-else链来循环数字1-9,并在st、rd、nd…等末尾添加适当的后缀,然后一次在线打印它们。这就是我想到的 ordinalNumbers = range(1,10) for ordinalNumber in ordNumbers: if

第一篇文章在这里,这不是一个问题,因为我得到了我想要的输出,但我只是好奇是否有一个更简单的方法去做。请记住,我是python的初学者,我正在使用python 3,我非常喜欢它,这是一篇纯粹的好奇文章

因此,我正在进行的练习要求您创建一个if-elif-else链来循环数字1-9,并在st、rd、nd…等末尾添加适当的后缀,然后一次在线打印它们。这就是我想到的

ordinalNumbers = range(1,10)

for ordinalNumber in ordNumbers:
    if ordinalNumber == 1:
        print(str(ordinalNumber) + "st")
    elif ordinalNumber == 2:
        print(str(ordinalNumber) + "nd")
    elif ordinalNumber == 3:
        print(str(ordinalNumber) + "rd")
    else:
        print(str(ordinalNumber) + "th")

就像我说的,这给了我想要的结果,只是想知道是否有一种重复性更少的方法。谢谢大家

查找每种情况下重复的内容:调用strordinalNumber和print。if语句真正做的是选择要使用的正确后缀:

for ordinalNumber in ordNumbers:
    if ordinalNumber == 1:
        suffix = "st"
    elif ordinalNumber == 2:
        suffix = "nd"
    elif ordinalNumber == 3:
        suffix = "rd"
    else:
        suffix = "th"

    print(str(ordinalNumber) + suffix)
很多时候,您可以使用合适的dict查找完全替换if语句。在上一次重构之后,更容易看到合适的dict

suffixes = {1: "st", 2: "nd", 3: "rd"}
for ordinalNumber in ordNumbers:
    print(str(ordinalNumber) + suffixes.get(ordinalNumber, "th"))

可以考虑嵌套条件表达式,但我自己并不太喜欢它。

    print(str(ordinalNumber) + "st" if ordinalNumber == 1 else
                               "nd" if ordinalNumber == 2 else
                               "rd" if ordinalNumber == 3 else
                               "th")

查找每种情况下重复的内容:调用strordinalNumber和print。if语句真正做的是选择要使用的正确后缀:

for ordinalNumber in ordNumbers:
    if ordinalNumber == 1:
        suffix = "st"
    elif ordinalNumber == 2:
        suffix = "nd"
    elif ordinalNumber == 3:
        suffix = "rd"
    else:
        suffix = "th"

    print(str(ordinalNumber) + suffix)
很多时候,您可以使用合适的dict查找完全替换if语句。在上一次重构之后,更容易看到合适的dict

suffixes = {1: "st", 2: "nd", 3: "rd"}
for ordinalNumber in ordNumbers:
    print(str(ordinalNumber) + suffixes.get(ordinalNumber, "th"))

可以考虑嵌套条件表达式,但我自己并不太喜欢它。

    print(str(ordinalNumber) + "st" if ordinalNumber == 1 else
                               "nd" if ordinalNumber == 2 else
                               "rd" if ordinalNumber == 3 else
                               "th")

我相信有一个更好的解决方案,但这里有一个重复性较少的解决方案

ordinalNumbers = range(1,10)
suffixes = ["", "st", "nd", "rd"]

for ordinalNumber in ordinalNumbers:
    print(str(ordinalNumber), end="")
    print(suffixes[ordinalNumber]) if ordinalNumber < 4 else print("th")

我相信有一个更好的解决方案,但这里有一个重复性较少的解决方案

ordinalNumbers = range(1,10)
suffixes = ["", "st", "nd", "rd"]

for ordinalNumber in ordinalNumbers:
    print(str(ordinalNumber), end="")
    print(suffixes[ordinalNumber]) if ordinalNumber < 4 else print("th")
产出:

['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th']
产出:

['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th']

您可以使用字典存储表示映射,如下所示:

ordinalNumbers = range(1, 10)
mapper = {1: 'st', 2: 'nd', 3: 'rd'}

for ordinalNumber in ordinalNumbers:
    if ordinalNumber % 10 <= 3:
        print(str(ordinalNumber) + mapper[ordinalNumber])
    else:
        print(str(ordinalNumber) + 'th')

这适用于任何数字范围

您可以使用字典存储表示映射,如下所示:

ordinalNumbers = range(1, 10)
mapper = {1: 'st', 2: 'nd', 3: 'rd'}

for ordinalNumber in ordinalNumbers:
    if ordinalNumber % 10 <= 3:
        print(str(ordinalNumber) + mapper[ordinalNumber])
    else:
        print(str(ordinalNumber) + 'th')
这适用于任何数字范围