【问题标题】:Python Logic - Simplify/more efficient multiple if elif statementsPython Logic - 简化/更高效的多个 if elif 语句
【发布时间】:2013-09-09 06:35:33
【问题描述】:

I'm taking an Intro to Python course online 并希望更有效地解决这个问题。

单词 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th 称为序数形容词。编写一个程序,从输入中读取一个介于 1 和 9 之间的整数 x。程序应该输出对应于 x 的序数形容词。 提示:您不需要有 9 个单独的案例; 4个就够了。

x = int(input())
if x == 1:
   print("1st")
elif x == 2:
   print("2nd")
elif x == 3:
   print("3rd")
elif x == 4:
   print("4th")
elif x == 5:
   print("5th")
elif x == 6:
   print("6th")
elif x == 7:
   print("7th")
elif x == 8:
   print("8th")
elif x == 9:
   print("9th")

我无法弄清楚如何用四行更有效地编写此代码。是否涉及列表?他们还没有教过列表或数组。

【问题讨论】:

    标签: python if-statement


    【解决方案1】:
    x = int(input())
    if x == 1:
       print("1st")
    elif x == 2:
       print("2nd")
    elif x == 3:
       print("3rd")
    else:
       print(str(x)+"th")
    

    【讨论】:

      【解决方案2】:

      只需使用字符串格式。并说明 1、2、3 和其余数字之间的不同后缀

      x = int(raw_input())
      if x == 1:
          suffix = "st"
      elif x == 2:
          suffix = "nd"
      elif x == 3:
          suffix = "rd"
      else:
          suffix = "th"
      print "{number}{suffix}".format(number=x,suffix=suffix)
      

      您实际上可以使用映射而不是 if/else 块以更 Pythonic 的方式进行操作

      x = int(raw_input())
      suffix = {1: "st", 2: "nd", 3: "rd"}.get(x, "th")
      print "{number}{suffix}".format(number=x, suffix=suffix)
      

      【讨论】:

        【解决方案3】:

        为什么要转换成int

        x = input()
        if x == "1":
            print("1st")
        elif x == "2":
            print("2nd")
        elif x == "3":
            print("3rd")
        else:
            print(x+"th")
        

        【讨论】:

          【解决方案4】:

          我需要我的函数超过 9,但没有一个答案正是我所需要的。我想出了这个,并认为我会分享。我知道这不是最优雅的解决方案,但它可以满足我的需要。

          def ordinal_adjective(n):
              if ('%s' % (n,))[-2:] in ['11','12','13']:
                  return '%sth' % n
              elif ('%s' % (n,))[-1] == '1':
                  return '%sst' % n
              elif ('%s' % (n,))[-1] == '2':
                  return '%snd' % n
              elif ('%s' % (n,))[-1] == '3':
                  return '%srd' % n
              else:
                  return '%sth' % n
          
          x = input()
          print ordinal_adjective(x)
          

          【讨论】:

            【解决方案5】:

            你不能在 python 中做 switch case 语句,但是你可以使用这些例子以不同的方式来做,没有必要更好:

            【讨论】:

            • 为每个人添加一个简短的摘要可能会很有用。
            • 如果您添加摘要,您的帖子可能会在您的链接失效后继续有用。 :)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-23
            • 1970-01-01
            • 2020-10-28
            • 2015-01-16
            • 1970-01-01
            相关资源
            最近更新 更多