Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找用户解决数学问题所花费的时间_Python_Math_Random_Time - Fatal编程技术网

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时间,并在超过最大时间后中断。回答问题时打断用户会有点困难。