【问题标题】:Is there a way to shorten if-elif-else statement in python?有没有办法缩短python中的if-elif-else语句?
【发布时间】:2021-09-11 18:07:52
【问题描述】:

我刚开始学习 python,我用if 语句编写了一些代码,我认为代码中有太多elif 语句,所以我想知道是否有任何方法可以缩短代码。

from random import *
month = randrange(1, 13)
if month == 1:
    print("January")
elif month == 2:
    print("February")
elif month == 3:
    print("March")
elif month == 4:
    print("April")
elif month == 5:
    print("May")
elif month == 6:
    print("June")
elif month == 7:
    print("July")
elif month == 8:
    print("August")
elif month == 9:
   print("September")
elif month == 10:
   print("October")
elif month == 11:
    print("November")
else:
    print("December")

【问题讨论】:

    标签: python-3.x if-statement


    【解决方案1】:

    您可以将月份放在一个列表中并通过随机索引访问它:

    from random import *
    months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'Augsut', 'September', 'October', 'November', 'December']
    month = randrange(12)
    return months[month]
    

    【讨论】:

      【解决方案2】:

      改用查找字典:

      month_lu = { 1:"January", 2:"February", 3:"March" ) # etc
      
      m = randrange(1, 3)  # got 2
      print( month_lu[m] )
      

      输出:

      February
      

      或者从一个可迭代的元组/月份名称列表中随机使用一个:

      month = random.choice( ( "Jan","Feb","Mar","Apr") ) # etc
      

      您直接选择月份,无需先绘制数字。


      如果你真的很懒,请使用日历模块提供名称:

      import random
      import calendar
      
      months = list(calendar.month_name)
      
      print(random.choice(months))
      

      输出:

      October
      

      【讨论】:

        【解决方案3】:

        等到 Python 3.10,其中匹配大小写语句 are being introduced

        这是一个例子:

        def sign_as_string(x:int)->str:
            """Returns the sign of x as a string. 
            A quick example that implements 3.10 syntax"""
            match x:
                case 0 :
                    return "null"
                case y if y > 0:
                    return "pos"
                case _ :
                    return "neg"
        
        print(sign_as_sign( 1 )) # pos
        print(sign_as_sign(-1 )) # neg
        print(sign_as_sign( 0 )) # null
        

        【讨论】:

        • 您能否详细说明一下答案,并说明这种新语法将如何帮助 OP 编写他们的程序?
        • 给你@Mureinik,我添加了一些代码。它没有经过测试,因为我还没有 3.10,但是根据文档它应该可以工作
        【解决方案4】:

        对于这种情况,您可以创建一个字典,键是数字,值是文本。如果您正在寻找,python 中没有内置的 switch case

        【讨论】:

          最近更新 更多