繁体   English   中英

检查用户输入是否为数字

[英]Checking whether the user input is a number

我正在尝试比较用户收到的输入,检查输入是否实际上是一个数字。 这是我到目前为止所拥有的:

numstring = input("Choose a number between 1 and 10")

然后比较我在这样的方法中有它:

def check(a):
   if int(a) == int:
       print("It's a number!")
   else:
       print("It's not a number!")

它总是打印出它不是一个数字,即使它是。

这个计划的目标:我正在做一个猜谜游戏:

import random

numstring = input("Choose a number between 1 and 10")

def check(a):
    if int(a) == int:
        print("It's a number!")
    else:
        print("It's not a number!")

    if abs(int(a)) < 1:
        print("You chose a number less than one!")
    elif abs(int(a)) > 10:
        print("You chose a number more than ten!")
    else:
        randomnum = random.randint(1, 10)
        randomnumstring = str(abs(randomnum))
        if randomnum == abs(int(a)):
            print("You won! You chose " + a + "and the computer chose " + randomnumstring)
        else:
            print("You lost! You chose " + a + " and the computer chose " + randomnumstring)


check(numstring)

谢谢你的帮助! 实际的代码有效,但它只是检查它失败了。

你可以使用str。 isdigit()方法:

def check(a):
    if a.isdigit(): 
        print("It's a number!")
    else:
        print("It's not a number!")

对于负数输入,上述方法将失败。 '-5'.isdigit()给出False 因此,另一种解决方案是使用try-except

try:
    val = int(a)
    print("It's a number!")
except ValueError:
    print("It's not a number!")

int(a)int不相等,因为int()返回一个整数,只有int而没有()是python2中的一个类型。(或python3中的类)

>>> a = '10'
>>> int(a)
10
>>> int
<type 'int'>

如果你只处理整数,那么就像其他人所说的那样使用try-except和int 要处理任何类型的数字,您可以使用ast.literal_eval和try-except:

>>> from ast import literal_eval
>>> from numbers import Number
def check(a):
    try:
        return isinstance(literal_eval(a), Number)
    except ValueError:
        return False

>>> check('foo')
False
>>> check('-100')
True
>>> check('1.001')
True
>>> check('1+1j')
True
>>> check('1e100')
True

尝试在try/except块中将输入转换为int

numstring = input("Choose a number between 1 and 10")

try:
    a = int(numstring)
    print("It's a number!")
except ValueError:
    print("It's not a number!")

如果您使用的是python 2,请考虑切换到raw_input()而不是input() input()接受任何python表达式,这很糟糕且不安全,比如eval() raw_input()只是将输入作为字符串读取:

numstring = raw_input("Choose a number between 1 and 10")

try:
    a = int(numstring)
    print("It's a number!")
except ValueError:
    print("It's not a number!")

请注意, raw_input()已在python 3中重命名为input()

另见:

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM