如何在Python 3中定义一个将字符串作为输入的函数

时间:2017-02-17 01:54:38

标签: string python-3.x user-input

我正在尝试创建一个简单的纬度/经度转换器(从度/分/秒到十进制度),但我遇到的问题是该函数如何征求和处理用户输入,即关于主要方向纬度(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,所以任何其他错误或指针(特别是处理整数和浮点处理)都会受到赞赏。

1 个答案:

答案 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