Python不接受我输入的实数

Python不接受我输入的实数,python,python-3.x,input,Python,Python 3.x,Input,当我在控制台中输入浮点数时,控制台会打印出以下内容: # Math Quizzes import random import math import operator def questions(): # Gets the name of the user name= ("Alz")## input("What is your name") for i in range(10): #Generates the questions number1

当我在控制台中输入浮点数时,控制台会打印出以下内容:

# Math Quizzes

import random
import math
import operator

def questions():
    # Gets the name of the user
    name= ("Alz")## input("What is your name")
    for i in range(10):
    #Generates the questions
        number1 = random.randint(0,100)
        number2 = random.randint(1,10)
    #Creates a Dictionary containg the Opernads
        Operands ={'+':operator.add,
                   '-':operator.sub,
                   '*':operator.mul,
                   '/':operator.truediv}
        #Creast a list containing a dictionary with the Operands       
        Ops= random.choice(list(Operands.keys()))
        # Makes the  Answer variable avialabe to the whole program
        global answer
        # Gets the answer
        answer= Operands.get(Ops)(number1,number2)
        # Makes the  Sum variable  avialbe to the whole program
        global Sum
        # Ask the user the question
        Sum = ('What is {} {} {} {}?'.format(number1,Ops,number2,name))
        print (Sum)

        global UserAnswer

        UserAnswer= input()

        if UserAnswer == input():
            UserAnswer= float(input())            
        elif UserAnswer != float() :
            print("Please enter a correct input")


def score(Sum,answer):
    score = 0

    for i in range(10):
        correct= answer

        if UserAnswer == correct:
            score +=1

            print("You got it right")
        else:
            return("You got it wrong")


    print ("You got",score,"out of 10")     


questions()
score(Sum,answer)

我只是好奇如何使控制台不打印消息和正确的数字。

您可以构造条件if语句,使其导致的数字类型不仅仅是float

What is 95 * 10 Alz?
950

Please enter a correct input

这是一种确保从用户处获得可以解释为浮动的内容的方法:

    if UserAnswer == input():
        UserAnswer= float(input())            
    elif UserAnswer != float() :
        print("Please enter a correct input")

其思想是尝试将用户输入的字符串转换为float,并在失败时再次询问。如果它签出,
从(无限)循环中中断。

跟踪您的代码以了解其不起作用的原因:

此行不向用户提供提示。然后,它将从标准输入中读取字符,直到到达一行的末尾。读取的字符被分配给变量
UserAnswer
(类型为
str

在读取输入之前,再次不向用户提供提示。将新输入与
UserAnswer
中的值进行比较(该值刚刚在前一行中输入)。如果此新输入等于上一个输入,则执行下一个块

连续第三次读取输入而不显示提示。尝试将第三个输入解析为浮点数。如果无法解析此新输入,将引发异常。如果对其进行分析,则会将其分配给
UserAnswer

仅当第二个输入不等于第一个输入时,才会计算此表达式。如果这令人困惑,那是因为代码同样令人困惑(可能不是您想要的)。第一个输入(字符串)与新创建的float对象进行比较,该对象具有
float()
函数返回的默认值

因为字符串永远不等于浮点,所以not equals测试将始终为真

这样,这条信息就被打印出来了

将整个代码段更改为如下内容(但这只是一个代表性示例,实际上,您可能需要一些不同的行为):


如果UserAnswer==input():
,为什么要执行
?(以及随后的几行——你想在这里测试什么?整个答案输入部分都是胡言乱语。同意@IgnacioVazquez Abrams。不确定,但看起来OP需要一些异常处理,应该测试wither
float(UserAnswer)==answer
。我运行了这个程序,在打印下一个提示之前需要输入3个回复。我认为这不是期望的行为。
while True:
    try:
        user_input = float(input('number? '))
        break
    except ValueError:
        print('that was not a float; try again...')

print(user_input)
UserAnswer= input()
   if UserAnswer == input():
       UserAnswer= float(input())            
    elif UserAnswer != float() :
       print("Please enter a correct input")
while True:
    try:
        raw_UserAnswer = input("Please enter an answer:")
        UserAnswer = float(raw_UserAnswer)
        break
    except ValueError:
        print("Please enter a correct input")