有没有一种方法可以简化该if-elif-else链? (Python初学者)

时间:2019-01-31 19:09:27

标签: python python-3.x python-2.7

这里的第一篇文章并没有多大问题,因为我得到了想要的输出,但我只是想知道是否有更简单的方法来解决这个问题。还要记住,我是python的初学者(我正在使用python 3),而且我真的很喜欢它,这完全是出于好奇。

因此,我正在练习的练习要求您创建一个if-elif-else链以遍历数字1-9,并在末尾(st,rd,nd..etc)添加适当的后缀,然后将其打印在一次排队。这就是我想出的。

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")

就像我说的那样,这给了我想要的输出,只是想知道是否有一种不太重复的方式来处理它。谢谢大家!

4 个答案:

答案 0 :(得分:2)

查找在每种情况下重复的内容:对str(ordinalNumber)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)

很多时候,您可以将if语句替换为合适的dict查找。在先前的重构之后,更容易看到适当的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")

答案 1 :(得分:2)

我肯定有更好的解决方案,但这是一种重复性较低的解决方案

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")

答案 2 :(得分:2)

suffix = ('st', 'nd', 'rd', 'th')
print([str(i) + suffix[min(i-1,3)] for i in range(1,10)])

输出:

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

答案 3 :(得分:1)

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

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')

这适用于任何范围的数字