【问题标题】:Is there a way to stream line this if-elif-else chain? (Python beginner)有没有办法简化这条 if-elif-else 链? (Python初学者)
【发布时间】:2019-01-31 19:09:27
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:
    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']
    

    【讨论】:

      【解决方案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")
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          您可以像这样使用字典来存储表示映射:

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

          这适用于任何数字范围

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-07
            • 2020-07-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多