-1

我正在为变量编写一些自定义值。有没有更好的方法来写这个?

if val == 1:
    val = -20
elif val == 2:
    val = -15
elif val == 3:
    val = -10
elif val == 4:
    val = -5
elif val == 5:
    val = 0
elif val == 6:
    val = 4
elif val == 7:
    val = 8
elif val == 8:
    val = 12
elif val == 9:
    val = 16
elif val == 10:
    val = 20
4

5 回答 5

4

尝试找到模式并使用一些数学。您以 5 递增直到val5,然后从那里以 4 递增。

if 1 <= val < 5:
    val = -25 + 5 * val 
elif 5 <= val <= 10:
    val = (val - 5) * 4

或者,如果您找不到该模式,则可以改用字典(如评论中所建议的那样)。

values = {1: -20, 2: -15, 3: -5, ... , 10: 20}  # Don't write '...', fill with your values.
val = values[val]
于 2020-06-01T06:46:48.827 回答
2

感谢 Michael Butscher 的想法:

    values = {
        1: -20,
        2: -15,
        3: -10,
        4: -5,
        5: 0,
        6: 4,
        7: 8,
        8: 12,
        9: 16,
        10: 20,
    }

    value = values.get(value)
于 2020-06-01T06:51:15.880 回答
0

假设我有正确的模式,最通用的解决方案是:

def func(val):
    return abs(5-val)*min(max(val, -5, key=abs), 4)

输出:

[func(i) for i in range(-5, 13)]
[..., -50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0, 4, 8, 12, 16, 20, 24, 28, ...]
于 2020-06-01T07:17:53.783 回答
0

如果你的

是一个随机值,那么您可以使用如下字典

options = {1: -20, 2:-15,3:-10,4 : -5, 5:0,6 : 4,7 : 8, 8 : 12, 9 : 16 , 10 : 20}
val = options[val]
于 2020-06-01T06:54:01.477 回答
0

只需编写一个循环,5如果小于 5,则递增,4如果大于 5。然后将值添加到字典中。

counter = -20

result = {}
for number in range(1, 11):
    result[number] = counter

    if number < 5:
        counter += 5
    else:
        counter += 4

print(result)

输出:

{1: -20, 2: -15, 3: -10, 4: -5, 5: 0, 6: 4, 7: 8, 8: 12, 9: 16, 10: 20}

然后,如果您想从字典中获取值,您可以result[key]按照其他答案中所示的方式进行操作。

于 2020-06-01T08:25:11.007 回答