Python如何只接受数字作为输入

pftdvrlh  于 2022-12-02  发布在  Python
关注(0)|答案(7)|浏览(173)
mark= eval(raw_input("What is your mark?"))
try:
    int(mark)
except ValueError:
    try:
        float(mark)
    except ValueError:
        print "This is not a number"

所以我需要做一个python程序,它会查看你的标记,并根据它是什么给你不同的响应。
然而,我还需要添加一种方法来阻止随机文本,这不是数字被输入到程序。
我以为我已经找到了一个解决方案,但它不会使它过去的第一个语句,以故障安全代码,这是为了捕捉它,如果它是任何东西,但数字。
如果我输入hello而不是一个数字,它会在第一行失败,并返回一个错误消息exceptions:NameError: name 'happy' is not defined
我如何更改它,使它可以进入代码,为他们提供他们需要输入一个数字的print语句?

j8ag8udp

j8ag8udp1#

删除eval,您代码就是正确的:

mark = raw_input("What is your mark?")
try:
    int(mark)
except ValueError:
    try:
        float(mark)
    except ValueError:
        print("This is not a number")

只需检查浮动即可:

try:
    float(mark)
except ValueError:
    print("This is not a number")
ct2axkht

ct2axkht2#

声明一个全局值比传递一个参数容易吗,在我的例子中,它也会给出一个错误。

def getInput():
    global value
    value = input()
    while not value.isnumeric():
        print("enter a number")
        value = input("enter again")
    return int(value)

getInput()
print(value)

无法评论:)

dly7yett

dly7yett3#

您可以简单地cae到floatint并捕获异常(如果有的话)。您使用的eval被认为是不好的,并且您添加了许多冗余语句。

try:
    mark= float(raw_input("What is your mark?"))
except ValueError:
    print "This is not a number"

“为什么不使用eval?”您会问,那么...请尝试用户的以下输入:[1 for i in range (100000000)]

vcirk6k6

vcirk6k64#

你可以使用一个名为isnumeric的String对象方法。它比try-except方法更有效。请看下面的代码。

def getInput(prompt):
    value = input(prompt)
    while not value.isnumeric():
        print("enter a number")
        value = input("enter again")
    return int(value)
a6b3iqyw

a6b3iqyw5#

import re

pattern = re.compile("^[0-9][0-9]\*\\.?[0-9]*")

status = re.search(pattern, raw_input("Enter the Mark : "))

if not status:

        print "Invalid Input"
qlvxas9a

qlvxas9a6#

可能有点太晚了,但要做到这一点,你可以这样做:

from os import system
from time import sleep
while True:
    try:
        numb = float(input("Enter number>>>"))
        break

    except ValueError:
        system("cls")
        print("Error! Numbers only!")
        sleep(1)
        system("cls")

但要使其在某个数字范围内,可以执行以下操作:

from os import system
from time import sleep
while True:
    try:
        numb = float(input("Enter number within 1-5>>>"))
        if numb > 5 or numb < 1:
            raise ValueError
        else:
            break

    except ValueError:
        system("cls")
        print("Error! Numbers only!")
        sleep(1)
        system("cls")
xwbd5t1u

xwbd5t1u7#

实际上,如果你要使用 eval(),你必须定义更多的东西。

acceptables=[1,2,3,4,5,6,7,8,9,0,"+","*","/","-"]
try:
    mark= eval(int(raw_input("What is your mark?")))
except ValueError:
    print ("It's not a number!")
if mark not in acceptables:
    print ("You cant do anything but arithmetical operations!")

它是 eval() 的基本控制机制。

相关问题