for i in range(0,len(A) - 1):
cand = (A[i] A[i 1]) / 2
cand2 = i 2 < len(A) and (A[i] A[i 1] A[i 2]) / 3 or cand
A[i] = min(cand, cand2)
我已經撰寫了上面的代碼來計算整數陣列的下兩個和三個元素的最小平均值。例如,如果我們有陣列[2,3,5,6]
,則在第一次迭代時cand
將是2.5
,cand2
將是3.33
,A[0]
將被更新為2.5
等等。
此代碼有效,除非(A[i] A[i 1] A[i 2]) / 3
是0
。在這種情況下,or
陳述句將執行并cand2
設定為cand
。
我很確定這是因為 Python 將0
as解釋為False
并執行or
陳述句 - 我該如何解決這個問題?
uj5u.com熱心網友回復:
如果在這里,您似乎想要做一個三元,它會像這樣作業:
for i in range(0,len(A) - 1):
cand = (A[i] A[i 1]) / 2
cand2 = (A[i] A[i 1] A[i 2]) / 3 if i 2 < len(A) else cand
A[i] = min(cand, cand2)
你用布爾運算子將它們鏈接起來,這可能可以作業,就像在 python 中一樣,它們會做一些技巧(一個and
-chained 運算式將回傳鏈的第一個Falsy 值,或者如果所有都是真值,則回傳最后一個值 - - - 一個or
-chained 運算式將回傳第一個 Truthy 值或如果全部為 Falsy 的值),但這會使您的程式更難理解。
無論如何,您可能需要考慮if
在此處使用常規構造以獲得最佳可讀性。
一些潛規則是:
- if 分支應該是最有可能的分支。
- 不要使用嵌套的三元運算子(使用普通的多行 if ... elif > ... then ... 陳述句)。
- 不要在復雜的運算式中使用長三元運算子(再次使用多行 if 陳述句)。
for i in range(0,len(A) - 1):
cand = (A[i] A[i 1]) / 2
if i 2 < len(A):
cand2 = (A[i] A[i 1] A[i 2]) / 3
else:
cand2 = cand
A[i] = min(cand, cand2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/395354.html
上一篇:如何確定旋轉角度?