结对-四则运算答题器-结对项目总结

项目地址:https://github.com/xyhcq/calc

结对成员:

学号:2015035107136 张良

学号:2015035107128 邢云淇

本次结对项目历时2个月,2位成员都是第一次从事结对编程,我们都能感到自己有了很大的收获,在结对编程的过程中,我们交换了一些自己的想法,发现了对方的一些想法优于自己的想法,互相学习了一番。

我们的结对项目为:四则运算答题器,能够根据用户输入的数值来界定出题的算数的最大值,同时可以控制生成计算题的数目,在生成题目后,由用户输入算式的答案来进行下一步,同时判断答案的正确与否,在最后,能够反馈给用户正确与错误的题目的数量。

在程序开始时,我们先导入了random模块来实现能够生成随机数的功能

1 import random

我们定义了一个变量hard用于控制算数的最大值,然后就可以生成随机数,这样,就可以控制了数值的最大值,实现了控制难易度的功能了。

random.randint(1, hard)

在往下一步,我们该考虑运算符了,正常来说加减乘除是+,-,*,/,我编写的时候直接用会报错,于是我们商量了一下,把运算符都扔进了列表,用的时候可以调用

# 运算符
ops = [‘+‘, ‘-‘, ‘*‘, ‘/‘]

比如我需要加,就是

ops[0]

所以我们随机生成0-3就相当于随机生成运算符了

# 随机生成运算符
op = random.randint(0, 3)

这时,我们需要生成2个数,中间夹一个运算符就能生成算式了。

# 生成第一个数和第二个数
num1 = random.randint(1, hard)*1.0
num2 = random.randint(1, hard)*1.0

在这里我们测试的时候发现,除法时候会有bug,因为是int的数,所以我们将生成的数*1.0,使其变成了浮点型。

我们用变量i来控制生成题目数量,所以在循环中,i就可以作为循环的控制条件了。

while i < int(number) + 1:
    # 生成第一个数和第二个数
    num1 = random.randint(1, hard)*1.0
    num2 = random.randint(1, hard)*1.0
    # 随机生成运算符
    op = random.randint(0, 3)
    # 产生算式和答案
    eq = str(num1) + ops[op] + str(num2)

我们在这时又遇到问题了,eq是算式,可是数据类型是str,这不能计算,乍办呢,于是我们在网上查了一下,发现还有这种用法:

value =eval(eq)

这样,我们既可以将算式的值保存到value变量中,又可以print出我们的算式,作为让用户计算的题目。

    # 显示问题
    print "问题%d: %s=" % (i, eq)

我们添加上了判断正误的功能

    # 接收用户的答案
    answer = raw_input("请输入答案: ")
    # 判断正误
    if value == float(answer):
        print "回答正确!"
    else:
        print "回答错误,正确答案是: %d" % value

我们兴高采烈测试,于是bug应声而来,测试时候输入过快,当答案为空时候报错了,于是我们用笨方法加上了不允许输入空值的条件:

    # 接收用户的答案
    answer = raw_input("请输入答案: ")
    while answer == ‘‘:
        answer = raw_input("答案不能为空,请重新输入: ")

我们开始了各种测试,发现,产生了很多重复的算式,这不是我们想要的结果,所以,我们将生成过的算式加入一个列表中,每次生成前先遍历一下列表,看看有没有生成过,避免重复,不过我觉得当生成成千上万个算式后,应该会降低效率,可我们现在管不了那么多了,没有别的办法

# 生成过的算式
used_eq=[]

# 将算式添加到用过的算式列表
used_eq.append(eq)
    # 判断是否重复,重复则重新生成
    while eq in used_eq:
        # 生成第一个数和第二个数
        num1 = random.randint(1, hard)*1.0
        num2 = random.randint(1, hard)*1.0
        # 随机生成运算符
        op = random.randint(0, 3)
        # 产生算式和答案
        eq = str(num1) + ops[op] + str(num2)

    # 将算式添加到用过的算式列表
    used_eq.append(eq)

这样我们以为就完事了,可随着我们功能越多,bug就越多了,我们发现,当能生成的算式达到了够生成的算式数量时,程序会异常报错,于是我们又加上了限制生成数量的方法,从源头上阻止bug的产生:

# 题目数量
number = raw_input(‘请输入题目数量:‘)

while int(number)> 4**hard:
    print ‘你输入的数将产生重复的题,请重新输入‘
    number = raw_input(‘请输入题目数量:‘)

可是我们测试时候,输入的不是数字,是字母,bug又来了,字母当然不能作为数字用了,我们在网上找了老半天,发现有个Python自带的方法可以轻易解决,就是

number.isdigit()

当number不是数字时候,会返回False,是则返回True,ok,就它了,于是诞生了这个方法:

# sw控制循环
sw1=1
while sw1:
    if number.isdigit():
        #number=int(number)
        sw1=0
    else :
        number = raw_input(‘请输入题目数量:‘)
        sw1=1

我们还需要统计计算正确与错误的数量,于是定义2个变量,并将它们插入题目中

# 计算正确和错误的数量
calc_true, calc_false= 0,0
    # 判断正误
    if value == float(answer):
        print "回答正确!"
        calc_true+=1
    else:
        print "回答错误,正确答案是: %d" % value
        calc_false+=1

在程序的最后,我们实现输出统计计算结果,程序就完成了

print ‘共计算‘+str(number)+‘道题,\n计算正确‘+str(calc_true)+‘道题,\n计算错误‘+str(calc_false)+‘道题。‘

现在看来,我们这程序写的是真的糟糕,看起来很幼稚,我们还需要更多学习才能写出更好的程序。

时间: 2024-08-06 21:17:06

结对-四则运算答题器-结对项目总结的相关文章

《结对-四则运算答题器-结对项目总结》

通过2个多月的学习和努力终于做完了四则运算答题器,在这两个月的时间和我的队友学习到了很多,这2个多月我们共同成长. 在我们写代码的时候遇到各种各样的问题.如选难度时输入字母会报错等等,我们通过上网查资料.询问他人,解决了很多问题. 我们也通过这个项目深刻知道自身的不足,我们还差的很多,我希望我会继续学下去,变得更完美.

结对-四则运算答题器-开发环境搭建过程

成员: 0:2015035107136-张良 1:2015035107128-邢云淇 结对项目:四则运算答题器 本次结对编程和团队项目我们都需要用python环境,为了便于书写代码,因此都选择了用pycharm这款ide 先准备好了Python和pycharm社区版安装包(社区版是免费的,功能够用了) 首先安装python2.7.5,一路下一步到finish结束,安装完成,环境变量已经自动配置好了,win+r运行python,成功运行,python环境搭建完毕. 选择安装路径 运行Python,

结对-四则运算答题器-需求分析

四则运算答题器-需求分析 编写目的 本需求分析文档说明描述了四则运算答题器项目的要求,描述了用户对功能的需求. 任务概述 四则运算答题器可以根据用户选择的难度,为其展示相应难度的题目,并在最后显示正确题目数量和错误题目数量. 项目功能 用户可以自由选择四则运算答题器的难度,难度分为简单.困难和极难.每种难度都有10道题(无重复的题目),都有做题所用的时间. 参考资料 四则运算出题器 随机四则运算的出题程序java

结对-四则运算答题器-设计文档

项目名称:四则运算生成器 项目成员:孙明亮.刘爽 开发环境:Python2.7 实现功能:1.加.减.乘.除基本运算

结对-四则运算答题器-开发过程

码云:https://gitee.com/xierweisi/SiZeYunSuan github:https://github.com/xyhcq/calc 开发过程:根据需求分析,我们知道了我们需要实现的各种功能,因为需要产生随机数,所以我们在Python中导入了random用于生成随机数.在刚开始开发时,我们先将程序的主题框架写了出来.四则运算有4个运算符,我们将其放入一个列表中,角标为0-3,这样,当随机数产生0-3就可以实现4种运算符了.然后声明了几个变量,用于接收数作为最大值的存储.

《结对-四则运算出题器-测试过程》

为了对这个计算器进行有效地检验,设计了几组测试案例,测试结果如下: Test No.1: (1.11) = 1.110000 Test No.2: 1.11+2.22-3.33*4.44/5.55 = 0.666000 Test No.3: 1.11+(2.22-3.33)*4.44/5.55 = 0.222000 Test No.4: 1.11+(2.22-3.33)*(4.44+5.55)/6.66 = -0.555000 Test No.5: 1.11*((2.22-3.33)*(4.44

四则运算3(结对开发)

本次试验是由上次的基础上迭代开发而来,并且用结对开发的模式进行开发. 结对开发的伙伴: 博客名:Mr.缪 姓名:缪金敏 链接:http://www.cnblogs.com/miaojinmin799/ 功能要求: 1.乘除可控 2.随机添加括号 3.输入结果判断正误 4.统计正确数量 5.正负,余数可控 6.去除连除误区 程序思想: 1.无乘除可用0,1表示,有乘除可再加2,3,共四种选择 2.用随机函数选择左括号放在哪个操作数前面,然后再用随机函数添加右括号,在使用循环判断去除左括号加在最左边

20150401 作业2 结对 四则运算

结对 四则运算 编译环境:eclipse 开发人员:de 开发时间:2015-04-07 实现功能: 1.基本的加减乘除 2.每次出1道题目,提交后会显示是否答对,如果错了,还会出现正确答案 3.题目是随机的 4.能出于分数相关的运算以及可以输入真分数 5.可以控制题目的数量 缺点: 1.分数计算的答案输入分数格式才显示正确 2.不能用户选择做什么运算 3.还不能统计答题的时间 4.不能统计答题正确的数目 ...... 个人体会: 1.能力还是不足,一些东西想到了却不能实现 2.要多点和伙伴讨论

结对作业——四则运算 Part3. 对于结对编程的总结与思考

结对作业--四则运算 Part3. 对于结对编程的总结与思考 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分 Part 2. 封装与对接相关问题 Part 3. 对于结对编程的总结与思考 关于结对 View:(From 艾中) 不得不说,结对编程给笔者带来了一次全新的编程体验.就领航员与驾驶员的分工而言,刘承担了生成和计算的大部分任务,笔者(艾)负责了显示和输出部分的函数. 首先我作为领航员的时候,实际上是有点懵的