【问题标题】:How to determine the type of input? [duplicate]如何确定输入的类型? [复制]
【发布时间】:2018-02-04 09:44:26
【问题描述】:

我正在尝试制作一个阶乘计算器。

输入和预期输出::如果用户输入是正整数,我希望程序给出结果。如果用户输入不是正整数(负整数、浮点数或字符串),我希望程序再次请求输入。另外,我希望程序在用户输入为 0 时结束。

问题:由于输入始终被视为字符串数据,因此我只能根据输入类型进行编码。

如果有人能回答这个问题,那将是非常有帮助的,因为我正在自学。

【问题讨论】:

标签: python


【解决方案1】:

尝试将其视为算法问题而不是 Python 问题,您可能会找到解决方案,因为通常每种语言都有其功能,并且它们几乎都相同,只是名称不同。 在 python 中,它们是一个函数调用isnumeric(),如果每个字符都是数字则返回 true,否则返回 false。

str.isnumeric()

用 if 之类的语句条件来使用它

if str.isnumeric()==true // so it's numeric
  // what to do!!!!!

使用 while 和 if 的最佳选择

while true
   //read data as string
   if str.isnumeric()==true
      break; // this to break the while loop

希望对你有帮助

【讨论】:

  • 您的代码并不是真正的 Python。Python cmets 使用 #,“真正”布尔值的 Python 文字是 True,您需要在缩进之前使用 :,而不是检查if condition==true,你可以使用if condition
  • 是的,我知道,我不是 python 程序员,我说这就像一个算法问题,每种语言都有自己的函数来解决大多数此类问题,isnumeric() 它是一个 python 函数。他可以在while if中使用它。 python 没有 do..while 条件,所以他需要像这样使用它 while ... if (cindition){ break:}
  • 在这种情况下,作为一种算法,它属于 LBYL。在 Python 中,AFAIK 通常认为使用EAFP 方法解决这类问题会更​​好,因此从某种意义上说,除了需要 Python 语法之外,它的算法本质上是一个“Python 问题”。跨度>
  • 好吧,我不能和你争论太多,你在 python 方面比我好得多,而且正如我所见,你使用 EAFP 方法是对的,但这并不意味着另一种方式不起作用(LBYL),这就像同一解决方案的两种方式。最好的是你的,顺便谢谢你的信息。我想说的是,他可以使用 isumeric() 作为解决方案,如果它是浮点负数或字符串,这不会给他有关输入的信息,它只有在它是一个正整数时才有效。
【解决方案2】:

如果你想确保它是一个正整数,并且如果你想继续要求你的问题中指定的输入,你将需要更多的控制结构:

from math import factorial

def get_input():
    while True:
        try:
            inp = int(input("Enter a positive integer> "))
            if inp < 0:
                raise ValueError("not a positive integer")
        except ValueError as ve:
            print(ve)
            continue
        break

    return inp

print(factorial(get_input()))

这只是尝试将输入转换为整数,如果失败则重试。 continue 语句用于跳过breaktry/except 结构在它不是整数时捕获错误,或者在小于 0 时显式引发错误。它还使用 exceptas 特性来打印更好的错误指示。它被封装在一个函数中,让事情变得更简单——我发现factorial(get_input()) 非常有表现力,而且更易于重用。

当用户输入为0 时,这目前不会结束,因为0factorial 的完全有效输入,尽管使用if 语句来适应这一点应该很容易。

这个程序可以这样使用:

Enter a positive integer> abc
invalid literal for int() with base 10: 'abc'
Enter a positive integer> 0.2
invalid literal for int() with base 10: '0.2'
Enter a positive integer> -5
not a positive integer
Enter a positive integer> 6
720

顺便说一句,这段代码根据EAFP 工作——它只是尝试转换为整数,并处理失败。这比首先尝试确定它是否可以是整数 (LBYL) 更符合 Python 的习惯。

如果您使用的是 Python 2,则需要将 input 更改为 raw_input

【讨论】:

  • 谢谢!正是我想要的:)
【解决方案3】:

Check if input is positive integer 检查此链接以及上面用户@cricket_007 提供的链接。将这两个信息结合起来应该会让您朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2018-08-22
    • 2014-11-16
    • 2019-07-04
    相关资源
    最近更新 更多