关于python:如何确定输入的类型?

How to determine the type of input?

本问题已经有最佳答案,请猛点这里访问。

我正在尝试制作一个因子计算器。

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

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

如果有人能够解决这个问题,那将是非常有帮助的,因为我正在自己学习。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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语句适应这一点。

这个程序可能会这样使用:

1
2
3
4
5
6
7
8
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


检查输入是否为正整数检查此链接以及上面用户@ cricket_007提供的链接。将这两个信息结合起来可以帮助您找到正确的方向。


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

1
str.isnumeric()

我们用一个声明条件,如果

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

它是使用的最佳选择

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

希望这可以帮到你