获取了一个变量 s,如果 s 的值属于如下范围,对应有 x 的值
1<s<2
x=1
2<s<3
x=2
3<s<4
x=5
我只知道用 if 语句来实现,有什么更好的更简洁办法吗?
#补充:
应为判定条件太多了,有10多个变量,每个变量都类似上面这种有一些取值范围对应不同的值,然后对这些最后的值加和。如果都是一个一个写if感觉代码维护非常麻烦,所以问下有没有简便方法.
1
q397064399 2016-08-12 11:37:49 +08:00 via iPhone 1
没有 你能想到的 就是最简单的 代码是给人看的 不是用来炫技
|
2
kangsgo OP @q397064399 因为条件太多了,所以问一下有没有简单方法,有很多判定条件
|
3
Mistwave 2016-08-12 12:45:23 +08:00 via iPhone 1
如果区间都是 1 ,可以用 round()或 int()映射之后用 dict 取值。
以你的例子: d = {1:1, 2:2, 3:5} x = d[int(s)] |
4
dongfang 2016-08-12 12:46:01 +08:00 1
用 lambda 表达式也可以
def f(s): L = [(lambda :1), (lambda :2), (lambda :5),] x = L[int(s)-1]() return x |
5
dongfang 2016-08-12 12:54:05 +08:00
这样也可以
x = int(s)**2 -2*int(s) +2 |
6
tumb8r 2016-08-12 12:58:47 +08:00
if s>min and s<max:
x=min |
7
tumb8r 2016-08-12 12:59:14 +08:00
好吧,我错了
|
8
mazyi 2016-08-12 13:01:43 +08:00 1
@Mistwave 你的这个答案应该是比较符合 python 编程的风格的, python 的作者不喜欢 switch 也不喜欢很多个 if else ,而是建议用 dict 完成 switch 的工作。
题主学习的时候要多注意呀。 |
9
bomb77 2016-08-12 13:01:45 +08:00
|
10
xiaoc19 2016-08-12 13:18:03 +08:00 1
我跟楼上的思路不太一样啊,既然这么有规律 抓住 规律好了
def test(a): return int(a-1) print test(s) 这样当 s 为 1.5 ,输出就是 1 ,,为 2.5 ,输出不就是 2 |
11
xiaoc19 2016-08-12 13:18:34 +08:00
额 接楼上 return 那行的缩紧 不知道为啥 回复后没了
|
12
lostsquirrel 2016-08-12 13:20:11 +08:00
用 dict
|
13
xiaoc19 2016-08-12 13:23:46 +08:00
原来 V2EX 回复会自动缩紧,那改成
x = int(s-1) print x |
14
xiaoc19 2016-08-12 13:26:53 +08:00
额,原来看错了,
3<s<4 x=5 这没有规律了, 那为了可读性 还是用 if 吧 |
16
q397064399 2016-08-12 15:14:52 +08:00 via iPhone
@kangsgo 那就把所有条件弄出来
|
17
bravecarrot 2016-08-12 18:22:40 +08:00
@mazyi xue 到了!
|
18
eliteYang 2016-08-12 19:16:36 +08:00
如果找不到规律就用 dict 或者 if
|
20
zhicheng 2016-08-12 19:34:20 +08:00 via Android
加个 if 加个缩进这代码就有了,还问个啥。。。
|
21
hard2reg 2016-08-12 19:42:09 +08:00
|
22
hinkal 2016-08-12 19:52:02 +08:00 via Android
x = 1 if 1<s<2 else 2 if 2<s<3 else 5 if 3<s<4 else x
|
23
lichy 2016-08-12 20:02:25 +08:00
学习了
|
24
xujinkai 2016-08-12 20:09:27 +08:00 via Android 1
条件特别多又没规律甚至经常变的话可以写个表,然后通过解析表来赋值,代码稍微多一些。好处是万能。比如
1,2,1 2,3,2 3,4,5 …… 这样,然后一行一行读,符合就赋值。 |
25
lll9p 2016-08-13 03:49:28 +08:00
|
26
kkzxak47 2016-08-13 13:46:20 +08:00
|
27
kkzxak47 2016-08-13 13:53:52 +08:00
|