为什么Python元组中的空格很重要?

时间:2011-09-25 20:58:51

标签: python iterable-unpacking

我一直在得到奇怪的结果,我终于注意到我在一个元组中放置空格的习惯导致了这个问题。如果你可以重现这个问题并告诉我它为什么会这样运作,那么你就可以保存我的头发。谢谢!

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

元组中有空格,答案是错误的。没有,答案是正确的。

2 个答案:

答案 0 :(得分:12)

空间应该没有区别。差异是由于案例:SW vs Sw

您不在此处检查SW

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

或许可以改为:

compass.upper() in ['S', 'W', 'SW']] 

答案 1 :(得分:0)

假设“度”与纬度或经度有关,我无法想象为什么“SW”被视为可行的选择。纬度为N或S.经度为E或W.请解释。

根据您的大小为1的样本,用户输入不可信。考虑检查输入,或者至少确保伪造输入会引发异常。你似乎喜欢单行;试试这个:

float_degrees *= {'n': 1, 's': -1, 'e': 1, 'w': -1}[compass.strip().lower()]