【问题标题】:How to condense (or abstract) multiple if and elif statements?如何压缩(或抽象)多个 if 和 elif 语句?
【发布时间】:2018-03-19 21:32:32
【问题描述】:

我正在为 Tkinter 的假设风险投资家创建一个程序,以输入他们去年和去年第二年的业务收入。该程序将汇总金额,对其进行分析并分配分数(范围从 0 到 18)。 18 是满分,这意味着收入很高。 0 是最低分,表示收入过低。

具体来说,我设置了 50,000 美元的增量(例如,收入在 100,000 美元到 150,000 美元之间的任何总价值将加 1 分,收入在 150,000 美元和 200,000 美元之间的任何总价值将加 2 分,等等. 一直到 18)。

因为这会占用很多代码行并且效率不高,有没有更好的方法来抽象这一切?我仍然想保留特异性。

代码如下:

TotalPoints = 0

def SumOfTwoYearRevenue():
    global TotalPoints
    LastYearRevenue = (float(Revenue_LastYear.get()))
    SecondLastYearRevenue = (float(Revenue_SecondLastYear.get()))

    Sum = LastYearRevenue + SecondLastYearRevenue

    if Sum < 100000:
        pass
    elif Sum >= 100000 and Sum < 150000:
        TotalPoints = TotalPoints + 1
    elif Sum >= 150000 and Sum < 200000:
        TotalPoints = TotalPoints + 2
    elif Sum >= 200000 and Sum < 250000:
        TotalPoints = TotalPoints + 3
    elif Sum >= 250000 and Sum < 300000:
        TotalPoints = TotalPoints + 4
    elif Sum >= 300000 and Sum < 350000:
        TotalPoints = TotalPoints + 5
    elif Sum >= 350000 and Sum < 400000:
        TotalPoints = TotalPoints + 6

#etc... all the way until "TotalPoints = TotalPoints + 18"

【问题讨论】:

  • 类似while Sum &gt; TotalPoints*50000: TotalPoints += 1。我也可以想出更多办法。
  • @Tobias,使用while 循环不会有效。
  • @KeyurPotdar 我会争辩,因为比较的次数太少了,无论如何都没关系
  • @Tobias 呵呵,我不明白这部分: while Sum > TotalPoints*50000 。因为一开始TotalPoints不会是0吗?
  • 这是Code Review 的绝佳候选者(请注意,他们的问题格式略有不同,因此请务必阅读他们的“导览”和“如何提问”页面)。

标签: python python-3.x


【解决方案1】:

乍一看,switch 语句可以更好地表示您的代码,该语句在 C 等语言中可用,但在 python 中不可用。

但是,如果您更仔细地观察它,您会发现您可能根本不需要一堆条件语句,并且使用以下内容会更适合:

if Sum < 100000:
    pass

TotalPoints = TotalPoints + (Sum // 50000) - 1

希望这会有所帮助!

【讨论】:

  • 是的。 "//" 将划分为更接近的整数表示。
【解决方案2】:

我想这应该可行:

TotalPoints += max(0, Sum//50000 - 1)

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多