罗杨美慧 20190919-6 四则运算试题生成,结对

本次作业要求参见:[https://edu.cnblogs.com/campus/nenu/2019fall/homework/7631]

结对伙伴:徐丽君

 

功能1  四则运算

支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答。

重难点:随机生成多个表达式,用户输入的答案要与正确答案相比较。python中有一个函数eval能计算表达式的结果。判断结果使用一个answer 的列表存储每一个输入的答案,再用for 提取其中的每个答案并与result中的结果一一对应,判断其对错。

重点代码片段

def integer(n):
    ch = []                               #存储表达式
    number = random.randint(1, 4)        #随机产生表达式的数量
    for i in range(number):
        rand = random.randint(0, 1)       #随机产生0和1 判断是否使用括号
        a = func_integer(number)          #调用表达式产生函数,产生表达式
        if rand == 0:
            op = operation[random.randint(2,3)]    #产生*,/来连接有括号的表达式,避免产生+,—
            rand = random.randint(0, 1)            #随机产生0和1 判断是否使用内嵌括号或外嵌括号
            if i != number - 1:                    #避免开始和结尾用无意义的括号
                if rand == 0:
                    ch.append('(')
                    ch.append(a)
                    ch.append(op)
                    ch.append(random.randint(1,10))
                    ch.append(')')
                    ch.append(operation[random.randint(0, 3)])
                else:
                    ch.append(a)
                    ch.append(operation[random.randint(0, 3)])
            else:
                ch.append(a)
                ch.append(operation[random.randint(0, 3)])
        else:
            ch.append(a)
            ch.append(operation[random.randint(0, 3)])

    f = ''
    for k,i in enumerate(ch):             #把列表中的所有值用f一个个连起来
        if k != len(ch)-1:
            f += str(i)
    result_integer(f, n)                  #调用输出函数

运行截图:

 

功能2  支持括号

重难点:生成括号,随机生成括号,判断是否符合生成括号的条件,避免一个表达式也生成括号 。

重点代码片段

def func_integer(number):
    f = ''
    ch = []
    rand = random.randint(0, 1)  #选择内嵌或外嵌括号
    if number != 1:         #避免一个表达式也产生括号
        if rand == 0:
            ch.append('(')
            op = operation[random.randint(0, 3)]
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
            ch.append(')')
        else:
            op = operation[random.randint(0, 3)]
            if op == '/':
                a = random.randint(1, 10)
                ch.append(a)
                ch.append(op)
                ch.append(random.randint(a, 10))
            else:
                ch.append(random.randint(1, 10))
                ch.append(op)
                ch.append(random.randint(1, 10))
    else:
        op = operation[random.randint(0, 3)]
        if op == '/':
            a = random.randint(1, 10)
            ch.append(a)
            ch.append(op)
            ch.append(random.randint(a, 10))
        else:
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
    for i in ch:       #把产生表达式当成一个整体
        f += str(i)
    return f

运行截图:

 

功能4  支持括号

重难点:支持真分数的运算,避免单独一个表达式生成括号。

重点代码片段

def func_integer(number):
    f = ''
    ch = []
    rand = random.randint(0, 1)  
    if number != 1:        
        if rand == 0:
            ch.append('(')
            op = operation[random.randint(0, 3)]
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
            ch.append(')')
        else:
            op = operation[random.randint(0, 3)]
            if op == '/':
                a = random.randint(1, 10)
                ch.append(a)
                ch.append(op)
                ch.append(random.randint(a, 10))
            else:
                ch.append(random.randint(1, 10))
                ch.append(op)
                ch.append(random.randint(1, 10))
    else:
        op = operation[random.randint(0, 3)]
        if op == '/':
            a = random.randint(1, 10)
            ch.append(a)
            ch.append(op)
            ch.append(random.randint(a, 10))
        else:
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))

 

(1)编程体会:

       本次是和徐丽君同学组队进行的结对编程,两人编程难免就会有意见不合的地方,互相都想说服对方,比如首先在编程语言的选择上就会有分歧,最后选择了Python语言。另外,自己的编程能力不够,而且对Python语言并不了解,对我来说是一门新的语言。在这个过程中,徐丽君同学悉心为我指点,我也查阅了很多资料,尽量让自己跟上她的脚步。不得不说两个人共同完成编程会提供多种思路,且效率会更高一些。

(2)编码收获以及花费时间较长和给我较大收获的事件:

  1. 在争论究竟采用哪种编程语言上花了一些时间,最后选择了Python语言编写。
  2. 这次作业中,学习了新的编程语言,安装Python环境,查阅了很多相关资料,收获很多。
  3. 对于代码的编写规范方面,编写时经常忘记遵守,导致编译失败,花费了不少的时间,在循序渐进后,我们会互相提醒对方,避免这种现象的发生。
  4. 由于两人擅长的语言不同,但对代码编程思路上有着不同的理解和思路,也让项目进度快了许多,学会了两人合作共同编程,现在能比较有默契也算是一个大的收获吧。
  5. 我的编写能力一般,查阅博客和资料以及队友的口头指点花了不少时间,也对我有了较大收获,在此非常感谢我的室友徐丽君同学。

(3)给出照片1张,包括结对的2位同学、工作地点、计算机

工作地点:星华公寓B320

计算机:徐丽君同学的笔记本

照片:

(4)版本控制

git地址:https://e.coding.net/xulijun/sizeyunsuan.git

posted @ 2019-09-23 18:47  luoyangmh  阅读(197)  评论(0编辑  收藏  举报