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需要一些异常处理,应该测试witherfloat(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")