我的任务是为小学生创建数学测验。这是我到目前为止所做的:
import random
import math
def test():
num1=random.randint(1, 10)
num2=random.randint(1, 10)
ops = ['+', '-', '*']
operation = random.choice(ops)
num3=int(eval(str(num1) + operation + str(num2)))
print ("What is {} {} {}?".format(num1, operation, num2))
userAnswer= int(input("Your answer:"))
if userAnswer != num3:
print ("Incorrect. The right answer is {}".format(num3))
return False
else:
print ("correct")
return True
username=input("What is your name?")
print ("Welcome "+username+" to the Arithmetic quiz")
correctAnswers=0
for question_number in range(10):
if test():
correctAnswers +=1
print("{}: You got {} answers correct".format(username, correctAnswers))
我现在需要做的是让我的程序只创建积极答案的问题。例如,没有3-10=-7
我尝试过在网上搜索,但我找不到任何东西,所以我转向你们寻求帮助。任何帮助将不胜感激:)
答案 0 :(得分:2)
我建议的是:
#Random code...
if num1<num2:
num1, num2 = num2, num1
#Rest of program
因此3 - 7 = -4变为7 - 3 = 4
我建议这样做的原因是答案仍然与上一个等式相同,只是正面而不是负数,所以你仍在测试相同的数字。
答案 1 :(得分:1)
保留表达式左侧的较大数字,也使用运算符而不是eval:
from operator import add, sub, mul
def test():
num1 = random.randint(1, 10)
num2 = random.randint(1, 10)
d = {"+": add, "-": sub, "*": mul}
operation = random.choice(list(d)))
num1 = max(num1, num2)
num2 = min(num1, num2)
num3 = d[operation](num1, num2)
print("What is {} {} {}?".format(num1, operation, num2))
userAnswer = int(input("Your answer:"))
if userAnswer != num3:
print("Incorrect. The right answer is {}".format(num3))
return False
else:
print("correct")
return True
username = input("What is your name?")
print("Welcome {} to the Arithmetic quiz".format(username))
correctAnswers = sum(test() for question_number in range(10))
print("{}: You got {} answers correct".format(username, correctAnswers))
或者@jonclements建议排序也会起作用:
num2, num1 = sorted([num1, num2])
另一方面,您应该使用try / except来验证用户输入并转换为int,否则第一个无法转换为int的值将会崩溃。
答案 2 :(得分:0)
您可以选择num2
与1
之间num1
之间的数字,如:
num1=random.randint(1, 10)
num2=random.randint(1, num1)
或num1 > num2
:
n1=random.randint(1, 10)
n2=random.randint(1, 10)
num1 = max(n1,n2)
num2 = min(n1,n2)
我会选择第一个选项。没有额外的变数,没有额外的行。
答案 3 :(得分:0)
在选择随机数的代码之后,你可以在循环中添加它:
while num3<0:
num1=random.randint(1, 10)
num2=random.randint(1, 10)
ops = ['+','-','*']
operation = random.choice(ops)
num3=int(eval(str(num1) + operation + str(num2)))
每次答案为否定时,它都会进入此循环。这将确保程序退出循环时答案是肯定的。
答案 4 :(得分:0)
一行更改应该这样做:
if num1 > num2:
num3=int(eval(str(num1) + operation + str(num2)))
else:
num3=int(eval(str(num2) + operation + str(num1)))