我正在尝试创建一个简单的纬度/经度转换器(从度/分/秒到十进制度),但我遇到的问题是该函数如何征求和处理用户输入,即关于主要方向纬度(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,所以任何其他错误或指针(特别是处理整数和浮点处理)都会受到赞赏。
答案 0 :(得分:1)
只要您正确记录,用户将字符串传递给函数输入的要求不应引起问题或问题。这是接受字符串输入的所有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