我正在尝试创建一个简单的纬度/经度转换器(从学位/分钟/秒到十进制度),但是我对函数索取和处理用户输入的方式有一个问题即,关于纬度(N/S)或经度(E/W)的基本方向。我希望该功能将用户输入N/S/E/W进行应用,并应用条件语句以确保转换输出为正(N或E)或负(S或W)。
我试图使用户界面尽可能用户友好,以便外行不必使用引号输入字符串字母。
这是到目前为止的代码:
def coord_convert (card,deg,mins,sec):
if card == 'S' or card == 's' or card == 'W' or card == 'w':
deg=-deg
mins=-mins
sec=-sec
mins_decimal = mins + (float(sec)/60)
deg_decimal = deg + (mins_decimal/60)
return deg_decimal
如果用户调用函数coord_convert(W,30,30,0)
,这将生成错误,而coord_convert('W',30,30,0)
返回正确的-30.5
。有什么方法可以使此用户友好,以使card
输入正确地读入字符串?
顺便说一句,此功能已从Python 2.7转换为Python 3.6,因此任何其他错误或指示器(尤其是处理整数和浮动处理)都将不胜感激。
只要您正确记录了此信息,就要求用户将字符串传递给函数输入的要求不应引起关注或问题。这是所有接受字符串输入的python函数中的标准。
当然,如果您还有其他方法可以输入信息,而不是直接与您的函数接口(即通过命令行参数),那么您不应在用户提供的字符串周围引用引号。但这将需要更多的代码,并且不会更改此功能。
如果用户将字符串存储在变量中:
相同。cardinal = 'W'
coord_convert(cardinal, 30, 20, 10)
我建议您确保您在Python 2兼容性(使用from __future__ import division
)中构建并添加功能DOCSTRING。您还可以简化检查基数的支票。
from __future__ import division
def coord_convert(cardinal, deg, mins, sec):
'''
This is your function docstring.
Put some examples here, along with expected inputs and output.
'''
if cardinal.upper() in ['S', 'W']:
deg = -deg
mins = -mins
sec = -sec
mins_decimal = mins + (float(sec)/60)
deg_decimal = deg + (mins_decimal/60)
return deg_decimal