Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在Python3中定义将字符串作为输入的函数_String_Python 3.x_User Input - Fatal编程技术网

String 如何在Python3中定义将字符串作为输入的函数

String 如何在Python3中定义将字符串作为输入的函数,string,python-3.x,user-input,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 ==

我试图创建一个简单的纬度/经度转换器(从度/分/秒到十进制度数),但我在函数如何请求和处理用户输入方面遇到了一个问题,即关于纬度(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\u convert(W,30,30,0)
,这将生成一个错误,而
coord\u convert('W',30,30,0)
返回正确的
-30.5
。是否有任何方法使此用户友好,以便将
输入作为字符串正确读入


顺便说一句,该函数已从Python 2.7转换为Python 3.6,因此任何其他错误或指针(尤其是处理整数和浮点处理)都是值得赞赏的。

只要您正确地记录了这一点,用户向函数输入传递字符串的要求就不会引起关注或问题。这在所有接受字符串输入的Python函数中都是标准的

当然,如果用户输入信息的方式不是直接与函数交互(即通过命令行参数),那么就不需要在用户提供的字符串周围加引号。但是这需要更多的代码,并且不会改变这个函数

如果用户将字符串存储在变量中,则同样适用:

cardinal = 'W'
coord_convert(cardinal, 30, 20, 10)
我建议您确保在Python 2中构建兼容性(与来自uuu future\uuuuu 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

除非用户定义了W,否则它们必须在W的周围加引号。当您使用字母W时,python正在寻找一个名为W的变量,以将其值传递到函数中。TL;DR您将需要引号。任何有Python经验的人都将使用引号来传递字符串输入。按照你建议的方式做会造成更多的混乱。这是关于解释用户的输入,对吗?输入时不需要引号。需要澄清的是:
对于sys.stdin:print(line)
中的行,用户键入“W”,并打印W作为响应。而不是打印,你的逻辑将进入循环的主体。