我有標志,每個值范圍都有一個標志。
例如:
- 值 = 0 是 D
- 值 > 0 且 < 0.2 為 C
- 值 >=0.2 且 <=0.8 為 B
- 值 > 0.8 是 A
標志 = [“A”、“B”、“C”、“D”]
def get_flag(value) :
if value == 0: return "D"
elif value > 0.8: return "A"
elif value <=0.8 and value >= 0.2: return "B"
else: return "C"
我認為這個實作很煩人,而且在演算法上并不漂亮,任何建議讓我可以在 python 中獲得正確的索引,我考慮過模和 div,但值是 0 到 1 之間的浮點數。
uj5u.com熱心網友回復:
您不需要elifand else ,因為return結束了函式的執行(因此如果觸發return了前面的代碼,則不會執行a 之后的行):return
def get_flag(value) :
if value == 0: return "D"
if value < 0.2: return "C"
if value <= 0.8: return "B"
return "A"
uj5u.com熱心網友回復:
重新排序您的條件:
def get_flag(value) :
if value == 0: return "D"
elif value < 0.2: return "C"
elif value <= 0.8: return "B"
else: return "A"
我現在很清楚范圍是多少。
uj5u.com熱心網友回復:
提高可讀性的另一種選擇:
def get_flag(value):
if value >= 0.8:
return('A')
elif value >= 0.2:
return('B')
elif value > 0:
return('C')
else:
return('D')
uj5u.com熱心網友回復:
使用與@aa_nador 相同的思路(他的答案已被洗掉),將分隔點和標志存盤在串列中,并通過二分查找確定索引。這里,第二個分離點是負方向的下一個浮點數 0.2 而不是 0.2,因此可以將 0.2 分配給索引 2:
>>> seps = [0, math.nextafter(0.2, -math.inf), 0.8]
>>> flags = list('DCBA')
>>> {i / 10: flags[bisect.bisect_left(seps, i / 10)] for i in range(10)}
{0.0: 'D',
0.1: 'C',
0.2: 'B',
0.3: 'B',
0.4: 'B',
0.5: 'B',
0.6: 'B',
0.7: 'B',
0.8: 'B',
0.9: 'A'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/514873.html
標籤:Python算法开关语句
