用什么样的python方式写一个长if-else语句?

用什么样的python方式写一个长if-else语句?,python,Python,虽然我以前有Java方面的经验,但我对Python还是很陌生 我有以下代码将分数转换为间隔增量(作为我正在实施的间隔重复系统(SRS)程序的一部分)。这段代码看起来很难看,可读性不强。通常我会在Java中使用switch语句。但是在python中,我找不到一个等价物。因此,我编写了这段代码来生成结果。但我想借此机会学习使用更多python方法实现相同输出的不同选项。我将感谢任何帮助,即使它们是指向我可以阅读以改进此代码的资源的指针 # Convert score into an inter

虽然我以前有Java方面的经验,但我对Python还是很陌生

我有以下代码将分数转换为间隔增量(作为我正在实施的间隔重复系统(SRS)程序的一部分)。这段代码看起来很难看,可读性不强。通常我会在Java中使用switch语句。但是在python中,我找不到一个等价物。因此,我编写了这段代码来生成结果。但我想借此机会学习使用更多python方法实现相同输出的不同选项。我将感谢任何帮助,即使它们是指向我可以阅读以改进此代码的资源的指针

   # Convert score into an interval delta
    if score == 0:  # Perfect page
        intervalDelta = +3
    elif score == 1:  # 1 Word Mistake
        intervalDelta = +2
    elif score <= 3:  # 3 Word Mistakes
        intervalDelta = +1
    elif score == 4:  # 1 Line Mistake
        intervalDelta = 0
    elif score <= 8:  # 2 Line Mistakes
        intervalDelta = -1
    elif score <= 12:  # 3 Line Mistakes
        intervalDelta = -2
    elif score <= 20:  # 5 Line Mistakes
        intervalDelta = -3
    elif score <= 30:  # 7.5 Line Mistakes - Half a page
        intervalDelta = -5
    else:  # More than half a page
        intervalDelta = -7
#将分数转换为区间增量
如果得分=0:#完美页面
间隔增量=+3
elif分数==1:#1个单词错误
间隔增量=+2

elif score我不认为长的
if
语句不可读,尽管我会改为使用
官方的说法是switch语句很容易用if语句完成,因此编写长if语句是Python的方式。并记录switch语句被省略的原因。在实践中,虽然有几个。最常见的是对开关的字典方法

def case_a():
打印('正在执行案例A')
def case_b():
打印('执行案例B')
def case_else()
打印('正在执行默认情况')
def dict_开关(参数):
开关={
“a”:案例a
“b”:案例b
}
返回开关.get(参数、大小写或其他)()
dict_开关(x)
另一种方法是将所有条件逻辑保留在一个类中,但我发现只有当存在大量条件逻辑时才有必要这样做

类切换器:
定义数字\u到\u方法\u到\u字符串(自身、参数):
“分派方法”
#在方法\u名称前加上“number\u”,因为方法名称
#不能以整数开头。
方法\u name='number\u'+str(参数)
#从“self”获取方法。默认为lambda。
method=getattr(self,方法名称,lambda:“nothing”)
#在返回方法时调用该方法
返回方法()
def编号_0(自身):
返回“零”
def编号_1(自身):
返回“一”
def编号_2(自身):
返回“2”

然而,在您的情况下,我认为@ashasr方法是最干净的。

我的意思是,这段代码对我来说非常可读。我唯一的建议是使用python命名约定,因此
interval_delta
而不是
intervalDelta
。这对我来说似乎很好,没有什么“错误”。@juanpa.arrivillaga非常感谢您让我意识到我没有使用python命名约定。我意识到我继承了我早期使用Java的工作中的约定。如果这个答案总结了相关的信息,而不是仅仅依赖于链接,我会投赞成票…@infosmith,非常感谢你提供了两个切换选项。我问这个问题的目的是了解更多关于python的知识,我很高兴了解实现switch的字典方法,以及getattr()函数。然而,我不确定如何将这个想法转化为我的案例,在我的案例中,测试的条件是不平等的-你能给我一些提示吗?哇-实现长if-else逻辑的不同方式。我很高兴看到这种想法。
from math import inf


SCORE_DELTAS = (
    (0, +3),
    (1, +2),
    (3, +1),
    (4, +0),
    (8, -1),
    (12, -2),
    (20, -3),
    (30, -5),
    (inf, -7),
)


def score_to_delta(score):
    for bound, delta in SCORE_DELTAS:
        if score <= bound:
            return delta