【问题标题】:How to return value for different layers of (x,y) levels如何为(x,y)级别的不同层返回值
【发布时间】:2015-01-21 14:58:46
【问题描述】:

我的问题如下。 I 一个功能需求,用户可以在 3 或 5 个级别之间进行选择,并根据 (x,y) 所属的级别返回一个值。

例如,我们有 3 个级别

def f(x,y):
        if (0 <= x <= 0.3 and 0 <= y <= 1) or (0.3 <= x <= 1 and 0 <= y <= 0.3):
            return 1
        elif (0.3 < x <= 0.6 and 0.3 < y <= 1) or (0.6 <= x <= 1 and 0.3 < y <= 0.6):
            return 2
        else:
            return 3

对于 5 个级别,我们将有 5 个 if 分支,依此类推。

我想知道在 Python 中使用 DRY 原则哪个是最好的(或好的)方法。我现在脑子短路了。

【问题讨论】:

  • 输入时的xy 可以是&gt; 1吗?
  • 或者小于 0。
  • 不,只有 [0, 1]。之前是标准化的方式

标签: python logic


【解决方案1】:

首先,我们可以认识到我们可以将您的程序重写为:

def f(x, y):
    if min(x, y) <= 0.3:
        return 1
    elif min(x, y) <= 0.6:
        return 2
    else:
        return 3

然后我们可以很容易地将其格式化为一个 for 循环:

from __future__ import division

def f(x, y, n=3):
    for i in range(1, n+1):
        if min(x, y) <= i/n:
            return i
    else:
        return n

我们也可以为此写一个数学方程式并去掉 for 循环:

def f(x, y, n=3):
    return int(min(x, y) * n) + 1

x == 1y == 1 时,最后一个等式将失败。您可能应该为此做一个特殊情况,或者也执行max(result_so_far, n)

【讨论】:

  • 你的意思是在 lambda 表达式中?谢谢!
  • @MayTheSchwartzBeWithYou:我已经用我对数学变体的想法编辑了答案。
  • 需要for循环,因为我实际上不返回数字而是Qt画笔。
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 2019-06-03
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
相关资源
最近更新 更多