我將java-script(我是初學者)的代碼轉換爲python(中級)。代碼涉及條件(三元)運算符形式的if語句。將「奇怪」三元運算符從java-script轉換爲python
的代碼行是這樣的:
// if dLon over 180° take shorter rhumb line across the anti-meridian:
if (Math.abs(Δλ) > Math.PI) Δλ = Δλ>0 ? -(2*Math.PI-Δλ) : (2*Math.PI+Δλ);
我知道definition of ternary operator這是以下幾點:
條件?表達式1:表達式2
然而,我的代碼作爲一個額外的「條件」,我不知道如何解釋:Δλ = Δλ>0
此刻我的Python版本是這樣的:
import numpy as np
# note: delta_lon = Δλ
if np.abs(delta_lon) > np.pi:
delta_lon = -(2*np.pi - delta_lon)
else:
delta_lon = 2*np.pi + delta_lon
但它似乎給出了錯誤的結果。我想這個問題是由前面提到的「條件」給出的,而且我正在重新定義變量delta_lon
。
整個代碼可以在此link的部分恆寬線距離下找到。
編輯: 這裏是我試圖從JavaScript轉換的完整代碼:
var Δψ = Math.log(Math.tan(Math.PI/4+φ2/2)/Math.tan(Math.PI/4+φ1/2));
var q = Math.abs(Δψ) > 10e-12 ? Δφ/Δψ : Math.cos(φ1); // E-W course becomes ill-conditioned with 0/0
// if dLon over 180° take shorter rhumb line across the anti-meridian:
if (Math.abs(Δλ) > Math.PI) Δλ = Δλ>0 ? -(2*Math.PI-Δλ) : (2*Math.PI+Δλ);
var dist = Math.sqrt(Δφ*Δφ + q*q*Δλ*Δλ) * R;
我能幾乎全部代碼轉換除外,如果前面提到的聲明。如果我不寫這個語句,我的python代碼會返回與javascript代碼相同的結果(因爲我使用了很好的輸入值,所以可以這麼做)。但是,如果我添加上面介紹的行,我不會得到相同的結果,這表明三元運算符已被錯誤地翻譯。
你的Python代碼實際上對我來說確實很好。你能否詳細說明你的結果是什麼「錯誤」? –
''np.pi'來自哪個庫,你爲什麼不使用'數學庫'? –
在python中,我通常使用numpy作爲np ....因此3.14 = np.pi ....我可以使用數學庫以及它應該沒有那麼重要嗎? –