【问题标题】:How can I shortern if, elif, elif statements in Python如何缩短 Python 中的 if、elif、elif 语句
【发布时间】:2022-11-23 23:07:08
【问题描述】:

我怎样才能使下面的代码简短:

q=0.34
density=''
    if abs(q) ==0:
        density='Null'
    elif abs(q) <= 0.09:
        density='negligible'
    elif abs(q) <= 0.49:
        density='slight'
    elif abs(q) <= 0.69:
        density='strong'
    else:
        density='very strong'
    print(q,", ", density)

预期输出:

0.34, 'slight'

我认为使用dictionaries 有一个解决方案,

非常感谢您的帮助!

【问题讨论】:

  • @EdwardPeters 请解释一下您将如何使用字典。字典的键应该是什么?
  • 实际上,对不起,我撒谎了——我错过了&lt;=的东西。我的错。字典在这里将是一个糟糕的情况,因为它们需要特定的键,而不是范围。
  • @EdwardPeters 感谢您的评论,我正在更新我的问题
  • 那么你可以使用模式匹配和守卫来做到这一点,但它会涉及更多语法并且几乎不会给你带来任何好处。我认为您的代码原样实际上很好。我要更改的一件事是首先将 abs(q) 绑定到一个值,这样您就不会在每一行都重新调用。
  • @EdwardPeters q 的值发生变化,因为我的代码将在 function 中使用

标签: python


【解决方案1】:

你可以尝试这样的事情:

def f(q):
    # List of your limits values
    limits = [0, 0.09, 0.49, 0.69]
    # The associated density values
    densities = ["Null", "negligible", "slight", "strong"]
    # Default value of the density, i.e. your else statement
    density = "very strong"

    # Search the good density and stop when it is found
    for i, l in enumerate(limits):
        if abs(q) <= l:
            density = densities[i]
            break

    print(q, ", ", density)

我认为 cmets 足够明确,可以解释代码,但如果不清楚,请毫不犹豫地询问。

【讨论】:

    最近更新 更多