私はJavaスクリプト(私は初心者です)からPython(中間レベル)にコードを変換しています。このコードには、条件付き(3値)演算子の形式でif文が含まれています。"奇妙な"三項演算子をJavaスクリプトから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を知っている:
条件? expr1の:expr2の
しかし、私はどのように解釈するか分からない余分な "条件" としての私のコード:現時点ではΔλ = Δλ>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の欄の行間隔のセクションにあります。
EDIT: ここでは、私は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;
私は前述のif文を除いてほぼ全コードを変換することができました。もし私がこの文を書いていなければ、私のpythonコードはJavaScriptコードと同じ結果を返します(良い入力値を使っているからというだけでOKです)。しかし、私が上に示した行を追加すると、私はもう同じ結果を得られません。これは、三項演算子が間違った方法で翻訳されたことを示します。
あなたのPythonコードは実際に私にはよく見えます。結果に「間違っている」ことを詳しく説明できますか? –
'np.pi'はどのライブラリから来たのですか?なぜあなたは' math'ライブラリを使用していませんか? –
よくpythonで私は通常numpをnp ....と使います。したがって3.14 = np.pi ....数学ライブラリも使うことができますが、大したことではありませんか? –