小白问一个 python 入门的问题

2016-08-12 11:29:44 +08:00
 kangsgo

获取了一个变量 s,如果 s 的值属于如下范围,对应有 x 的值

1<s<2
x=1
2<s<3
x=2
3<s<4
x=5

我只知道用 if 语句来实现,有什么更好的更简洁办法吗?

3960 次点击
所在节点    Python
27 条回复
q397064399
2016-08-12 11:37:49 +08:00
没有 你能想到的 就是最简单的 代码是给人看的 不是用来炫技
kangsgo
2016-08-12 12:35:08 +08:00
@q397064399 因为条件太多了,所以问一下有没有简单方法,有很多判定条件
Mistwave
2016-08-12 12:45:23 +08:00
如果区间都是 1 ,可以用 round()或 int()映射之后用 dict 取值。
以你的例子:
d = {1:1, 2:2, 3:5}
x = d[int(s)]
dongfang
2016-08-12 12:46:01 +08:00
用 lambda 表达式也可以
def f(s):
L = [(lambda :1),
(lambda :2),
(lambda :5),]
x = L[int(s)-1]()
return x
dongfang
2016-08-12 12:54:05 +08:00
这样也可以
x = int(s)**2 -2*int(s) +2
tumb8r
2016-08-12 12:58:47 +08:00
if s>min and s<max:
x=min
tumb8r
2016-08-12 12:59:14 +08:00
好吧,我错了
mazyi
2016-08-12 13:01:43 +08:00
@Mistwave 你的这个答案应该是比较符合 python 编程的风格的, python 的作者不喜欢 switch 也不喜欢很多个 if else ,而是建议用 dict 完成 switch 的工作。

题主学习的时候要多注意呀。
bomb77
2016-08-12 13:01:45 +08:00
xiaoc19
2016-08-12 13:18:03 +08:00
我跟楼上的思路不太一样啊,既然这么有规律 抓住 规律好了

def test(a):
return int(a-1)

print test(s)


这样当 s 为 1.5 ,输出就是 1 ,,为 2.5 ,输出不就是 2
xiaoc19
2016-08-12 13:18:34 +08:00
额 接楼上 return 那行的缩紧 不知道为啥 回复后没了
lostsquirrel
2016-08-12 13:20:11 +08:00
用 dict
xiaoc19
2016-08-12 13:23:46 +08:00
原来 V2EX 回复会自动缩紧,那改成
x = int(s-1)
print x
xiaoc19
2016-08-12 13:26:53 +08:00
额,原来看错了,
3<s<4
x=5
这没有规律了,
那为了可读性 还是用 if 吧
xvx
2016-08-12 13:54:32 +08:00
@Mistwave 思路不错。+1
q397064399
2016-08-12 15:14:52 +08:00
@kangsgo 那就把所有条件弄出来
bravecarrot
2016-08-12 18:22:40 +08:00
@mazyi xue 到了!
eliteYang
2016-08-12 19:16:36 +08:00
如果找不到规律就用 dict 或者 if
czheo
2016-08-12 19:23:11 +08:00
@xvx
@Mistwave 思路不错+ 1 。 jump table 的思想。
zhicheng
2016-08-12 19:34:20 +08:00
加个 if 加个缩进这代码就有了,还问个啥。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/298833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX