Python 查找用户解决数学问题所花费的时间
我需要写一个程序,将询问简单的随机加法问题,并找到用户需要的时间来解决这个问题。该程序应继续问数学问题,直到被告知停止。它应该找到正确答案的平均值、最快答案和平均回答时间。 我开始写程序,但它不起作用,所以我甚至不知道如何继续。我没法把数学题打印出来。你能告诉我我做错了什么,并帮助我找到最快的问题和每个问题的平均时间,以及平均有多少问题是正确的吗? 以下是运行时出现的问题:Python 查找用户解决数学问题所花费的时间,python,math,random,time,Python,Math,Random,Time,我需要写一个程序,将询问简单的随机加法问题,并找到用户需要的时间来解决这个问题。该程序应继续问数学问题,直到被告知停止。它应该找到正确答案的平均值、最快答案和平均回答时间。 我开始写程序,但它不起作用,所以我甚至不知道如何继续。我没法把数学题打印出来。你能告诉我我做错了什么,并帮助我找到最快的问题和每个问题的平均时间,以及平均有多少问题是正确的吗? 以下是运行时出现的问题: >>> Math() Are you ready? no Okay fine >>>
>>> Math()
Are you ready? no
Okay fine
>>> Math()
Are you ready? yes
0+5=5
4 + 9 = 13
3 + 2 = 89 1+5=6
3+3=9
1+7=8
7 + 7 = 14 5+4=9
1 + 8 = stop
You answered 75% problems correctly
Your average answer time is 1.4388 seconds
Your fastest answer time is 1.2247 seconds
这就是我所拥有的:
def fastMath():
ready=input('Are you ready?')
num1 = int(random.randint(0,10))
num2 = int(random.randint(0,10))
operator = '+'
math = ((num1)+ operator +(num2))
if ready == 'no':
print ('Okay fine')
else:
start=time.clock
print (math)
while math = true:
print (math)
这显然是个家庭作业,所以我不会提供完整的代码,只会给出一些关于你做错了什么的建议
- 如果要使用该模块中的函数,必须
导入时间
是一个函数,因此您必须调用它,就像clock
一样,而不仅仅是clock()
clock
- 不确定,但我认为
比time.time()
time.clock()
- 你一遍又一遍地问同样的数学问题;将带有
的部分向上移动到num1=…
到函数中,以字符串形式返回方程和正确的结果math=…
没有任何意义<代码>数学是一个字符串。您必须获取用户的而math=true:
,并将其与预期结果进行比较输入
- 创建两个整数变量,
和total_questions
,然后使用它们计算百分比correct_answers
- 创建一个列表,列出每个答案经过的时间。使用
获得最快的时间,使用min
和sum
获得平均值len
#!/usr/bin/env python3
# coding: utf-8
import time
from random import randint
class MathQuestions:
def __init__(self):
self.start_time = None
self.question_status = list()
self.question_durations = list()
self.ask_num_questions()
def ask_num_questions(self):
'''Ask user how many questions should be solved'''
num_questions = input('How many questions should I ask? ')
try:
num_questions = int(num_questions)
self.handle_questions(num_questions)
except ValueError:
print('This is not a valid number.')
self.ask_num_questions()
def ask_user_ready(self):
'''Ask user if he is ready or not'''
user_ready = input('Are you ready? (yes / [no]) ')
if user_ready != 'yes':
sys.exit(0)
else:
return(time.time())
def handle_questions(self, num):
'''Generate as many questions as wanted and get start time'''
self.start_time = time.time()
for n in range(num):
self.ask_question()
self.stop_questions(self.start_time)
def ask_question(self):
'''Ask a question by gernerating two random integers'''
operators = ['+', '-', '*', '/']
op = operators[randint(0, len(operators)-1)]
num1 = randint(0, 100)
if op == '/':
num2 = randint(1, 100)
else:
num2 = randint(0, 10)
start_time = time.time()
answer = input('{} {} {} = '.format(num1, op, num2))
self.question_durations.append(time.time() - start_time)
if op == '+':
question = num1 + num2
elif op == '-':
question = num1 - num2
elif op == '*':
question = num1 * num2
elif op == '/':
question = num1 / num2
try:
answer = float(answer)
if answer == question:
status = True
else:
status = False
except ValueError:
status = False
self.question_status.append(status)
def stop_questions(self, start_time):
'''Stop questioning and do some user statistics'''
stop_time = time.time() - self.start_time
avg_duration = sum(self.question_durations) / len(self.question_durations)
min_duration = min(self.question_durations)
max_duration = max(self.question_durations)
percentage_correct = (self.question_status.count(1) / len(self.question_status)) * 100
print('Your average duration per answer is: {:3.3f} seconds'.format(avg_duration))
print('Your minimum duration was: {:3.3f} seconds'.format(min_duration))
print('Your maximum duration was: {:3.3f} seconds'.format(max_duration))
print('You answered {:3.3f} percent of all questions correct.\n'.format(percentage_correct))
if __name__ == '__main__':
q = MathQuestions()
还有一条建议:查看您在尝试运行程序时遇到的错误,并尝试理解它——从最后一行开始。修复它并重试:你会遇到另一个错误(你的程序有几个语法和类型错误),但最终它会运行,你可以开始集中精力让它正常工作。我怎样才能循环不断地问数学问题,直到被告知停止?@April:事实上这取决于“终止条件”。如果你想问特定数量的问题,你可以使用for循环,如下面我的答案所示。如果您想在特定时间后停止,可以使用while循环检查elpased时间,并在超过最大时间后中断。回答问题时打断用户会有点困难。