Skip to main content
 首页 » 编程设计

python之有没有办法简化这个 if-elif-else 链 ( python 初学者)

2025年05月04日11zfyouxi

第一次发帖在这里,这不是什么大问题,因为我得到了我想要的输出,但我只是想知道是否有更简单的方法来解决这个问题。还要记住,我是 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") 

就像我说的那样,这给了我正在寻找的输出,只是想知道是否有一种重复性较低的方法来解决这个问题。谢谢大家!

请您参考如下方法:

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

很多时候,您可以用合适的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")