Python不接受我的输入作为实数

时间:2015-11-11 19:06:04

标签: 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 = 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)

当我在控制台中输入一个浮点数时,控制台会输出:

What is 95 * 10 Alz?
950

Please enter a correct input

我只是好奇如何让控制台不打印出信息和正确的号码。

3 个答案:

答案 0 :(得分:1)

这是一种确保从用户那里获得可以解释为浮点数的方法:

while True:
    try:
        user_input = float(input('number? '))
        break
    except ValueError:
        print('that was not a float; try again...')

print(user_input)

这个想法是尝试将用户输入的字符串转换为浮点数,只要失败就再次询问。如果它从(无限)循环中检出break

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

跟踪您的代码,了解它为什么不起作用:

UserAnswer= input()

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

   if UserAnswer == input():

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

       UserAnswer= float(input())            

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

    elif UserAnswer != float() :

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

由于字符串永远不等于float,因此not-equals测试将始终为true。

       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")