2

私は奇妙な結果を得ていましたが、タプルにスペースを入れるという私の習慣が問題を引き起こしていることに最終的に気付きました. この問題を再現して、なぜこのように機能するのかを教えていただければ、私の髪の残りを節約できます. ありがとう!

jcomeau@intrepid:/tmp$ cat haversine.py
#!/usr/bin/python
def dms_to_float(degrees):
 d, m, s, compass = degrees
 d, m, s = int(d), float(m), float(s)
 float_degrees = d + (m / 60) + (s / 3600)
 float_degrees *= [1, -1][compass in ['S', 'W', 'Sw']]
 return float_degrees

jcomeau@intrepid:/tmp$ python
Python 2.6.7 (r267:88850, Jun 13 2011, 22:03:32) 
[GCC 4.6.1 20110608 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from haversine import *
>>> dms_to_float((111, 41, 0, 'SW'))
111.68333333333334
>>> dms_to_float((111,41,0,'Sw'))
-111.68333333333334

タプルにスペースがある場合、答えは間違っています。無ければ正解です。

4

2 に答える 2

12

スペースに違いはありません。違いはケースによるものです: SWvs Sw.

ここではチェックしませんSW

compass in ['S', 'W', 'Sw']] 

おそらくこれを次のように変更します。

compass.upper() in ['S', 'W', 'SW']] 
于 2011-09-25T21:00:40.273 に答える
0

「度」が緯度または経度に関連していると仮定すると、「SW」が実行可能なオプションとして扱われる理由が想像できません。緯度は北または南、経度は東または西です。説明してください。

サイズ 1 のサンプルに基づくと、ユーザー入力は信頼できません。入力を確認するか、少なくとも偽の入力によって例外が発生することを確認してください。あなたはワンライナーが好きなようです。これを試して:

float_degrees *= {'n': 1, 's': -1, 'e': 1, 'w': -1}[compass.strip().lower()]
于 2011-09-25T21:45:42.673 に答える