String 如何在Python3中定义将字符串作为输入的函数
我试图创建一个简单的纬度/经度转换器(从度/分/秒到十进制度数),但我在函数如何请求和处理用户输入方面遇到了一个问题,即关于纬度(N/S)或经度(E/W)的基本方向。我希望函数接受一个N/S/E/W的用户输入,并应用一个条件语句,以确保转换输出为正(N或E)或负(S或W) 我试图使用户界面尽可能友好,这样外行就不必使用引号输入字符串字母 以下是迄今为止的代码: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 ==
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作为响应。而不是打印,你的逻辑将进入循环的主体。