2017-10-08 65 views
1

是否有写作的一个更Python的方式:被测试Python的成语对于这种结构

if value <= 10: 
    print 1 
elif value <= 13: 
    print 2 
elif value <= 15: 
    print 3 
elif value <= 24: 
    print 4 

值没有落入任何图案。

+0

在您详细说明如何接收输入,这些上边界与打印值之间的逻辑关系等等之后,会提出更pythonic,更干净,更易读的重构,清理代码实际上是软件开发过程的一部分。 – marmeladze

+0

如果value <= v),None),你可以做'to_print = next((我为i,v在枚举中([10,13,15,24],1)'但这只是你的确切代码的映射正如@marmeladze所说 - 如果你想切换到较低/上限或者为每个if/elif等添加更多标准,那么它就很好,可读性强,而且非常灵活...所以 - 这一切都取决于 - 你认为当前代码有什么错误? –

+0

@marmeladze这是一个通用的问题。如果你有一个任意值的列表,并且你希望根据值执行一些操作 – Psionman

回答

-1

不知道这是否是更Python,但是这可能会做同样的事情的另一种方式:

d = {1: [float('-inf'), 10], 2: [11, 13], 3: [14, 15], 4: [16, 24]} 
[print i for i in d if value >= d[i][0] and value <= d[i][1]] 

在这里,您编码的下限和上限为每个条件到字典和打印键对于value所在的对应范围。

+0

鉴于他们应该是'elif's - 你不想为所有支票建立一个清单 - 你想在第一个成功的支票上短路 –

+0

(更不用说它不提供对于<= 10条件...) –

+0

@JonClements词典中的第一件事符合<= 10条件,但该案例的下限可能不同。此外,这些范围是不相交的,这使得'价值'不可能满足多于一张支票。 – Antimony