【问题标题】:How to define a function to take a string as input in Python 3如何在 Python 3 中定义一个函数以将字符串作为输入
【发布时间】:2017-02-17 01:54:38
【问题描述】:

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

【问题讨论】:

  • 除非 W 由用户定义,否则他们将不得不在 W 周围添加引号。当您使用字母 W 时,python 正在寻找一个名为 W 的变量来传递它的值进入你的功能。 TL;DR,您将需要引号。
  • 任何有 Python 经验的人都会使用引号来传递字符串输入。按照您的建议进行操作会造成更多混乱。
  • 这是关于解释用户的输入,对吧?输入根本不需要引号。澄清一下:for line in sys.stdin: print(line) 用户键入“W”并打印 W 作为响应。您的逻辑不是打印,而是进入该循环的主体。

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


【解决方案1】:

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

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

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

cardinal = 'W'
coord_convert(cardinal, 30, 20, 10)

我的建议是确保构建 Python 2 兼容性(使用 from __future__ import division)并添加函数文档字符串。您还可以简化基数检查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2020-04-10
    • 2016-04-21
    • 2017-07-29
    • 2021-09-10
    相关资源
    最近更新 更多