罗杨美慧 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)编码收获以及花费时间较长和给我较大收获的事件:
- 在争论究竟采用哪种编程语言上花了一些时间,最后选择了Python语言编写。
- 这次作业中,学习了新的编程语言,安装Python环境,查阅了很多相关资料,收获很多。
- 对于代码的编写规范方面,编写时经常忘记遵守,导致编译失败,花费了不少的时间,在循序渐进后,我们会互相提醒对方,避免这种现象的发生。
- 由于两人擅长的语言不同,但对代码编程思路上有着不同的理解和思路,也让项目进度快了许多,学会了两人合作共同编程,现在能比较有默契也算是一个大的收获吧。
- 我的编写能力一般,查阅博客和资料以及队友的口头指点花了不少时间,也对我有了较大收获,在此非常感谢我的室友徐丽君同学。
(3)给出照片1张,包括结对的2位同学、工作地点、计算机
工作地点:星华公寓B320
计算机:徐丽君同学的笔记本
照片:
(4)版本控制
git地址:https://e.coding.net/xulijun/sizeyunsuan.git