| 博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19 |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376 |
| 作业目标 | 能够实现四则运算小程序的基本需求,同时练习写博客(排版等) |
| 学号 | 3190704105 |
二. 题目要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三. 代码
import random # 随机生成数
from fractions import Fraction # 分数的运算
list_questions=[] # 储存 题目 信息的列表
list_answers =[] # 储存 答案 信息的列表
#加法运算
def add():
num1 = random.randint(1, 100) #随机生成两个数
num2 = random.randint(1, 100)
list_questions.append(str(num1) + \'+\' + str(num2) + \'=\') #题目,答案 追加到列表中
list_answers.append(num1 + num2)
#减法运算
def cut():
num1 = random.randint(1, 100)
num2 = random.randint(1, 100)
if num1 < num2:
num1, num2 = num2, num1
list_questions.append(str(num1) + \'-\' + str(num2) + \'=\')
list_answers.append(num1 - num2)
#乘法运算
def mul():
num1 = random.randint(1, 100)
num2 = random.randint(1, 100)
list_questions.append(str(num1) + \'x\' + str(num2) + \'=\')
list_answers.append(num1 * num2)
#除法运算
def div():
num1 = random.randint(1, 100)
num2 = random.randint(1, 100)
num = Fraction(num1,num2)
list_questions.append(str(num1) + \'÷\' + str(num2) + \'=\')
list_answers.append(num)
#随机运算
def rand_nums():
rule = random.choice([\'+\',\'-\',\'x\',\'÷\']) #随机生成 运算符
if rule == \'+\': #生成 加法 题目,答案
add()
elif rule == \'-\': #生成 减法 题目,答案
cut()
elif rule == \'x\': #生成 乘法 题目,答案
mul()
else: #生成 除法 题目,答案
div()
# 判断对错,并计算分数
def judge():
count = 0 #分数值
for i in range(len(list_questions)):
print("第{}题".format(i + 1))
print("题目:",list_questions[i])
y_answer = eval(input("请输入你的答案:")) #输入答案
if y_answer == float(list_answers[i]): #判断对错
print("回答正确!")
print("----------------")
count += 1
else:
print("很遗憾,回答错误!正确答案是:{}".format(list_answers[i]))
print("----------------")
return count
#真分数运算
def frac():
fz1 = random.randint(1,10) #分子 1
fm1 = random.randint(1,10) #分母 1
if fz1 > fm1:
fz1,fm1 = fm1,fz1 # 保证为真分数
num1 = Fraction(fz1,fm1) # 调用 Fraction 生成分数
fz2 = random.randint(1,10) #分子 2
fm2 = random.randint(1,10) #分母 2
if fz2 > fm2:
fz2,fm2 = fm2,fz2
num2 = Fraction(fz2,fm2)
if num1 < num2:
num1,num2 = num2,num1 # 保证结果为正数,除法除外
rule = random.choice([\'+\',\'-\',\'x\',\'÷\'])
if rule == \'+\':
list_questions.append(str(num1) + \' + \' + str(num2) + \'=\')
list_answers.append(num1 + num2)
elif rule == \'-\':
list_questions.append(str(num1) + \' - \' + str(num2) + \'=\')
list_answers.append(num1 - num2)
elif rule == \'x\':
list_questions.append("(" + str(num1) + ")" + \'x\' + "(" + str(num2) + ")" + \'=\')
list_answers.append(num1 * num2)
else:
list_questions.append("(" + str(num1) + ")" + \'÷\' + "(" + str(num2) + ")" + \'=\')
list_answers.append(num1 / num2)
# 打印界面提示信息
def display():
print("------------------------欢迎来到随机生成四则运算小程序------------------------")
print()
print("********* 1. 加法运算(+)")
print("********* 2. 减法运算(-)")
print("********* 3. 乘法运算(x)")
print("********* 4. 除法运算(÷)")
print("********* 5. 随机生成(随机生成四种运算)")
print("********* 6. 真分数运算(随机生成四种运算)")
print()
print("提示:对于除不尽的数可以用分数表示:如 1÷3 = 1/3, 13÷67 = 13/67")
print("---------------------------------------------------------------------------")
#主函数
def main():
display() #调用显示函数
n = int(input("请输入题目的数量:"))
print("----------------")
choose_rule = int(input("请选择要进行的运算(1-6):"))
for i in range(n):
if choose_rule == 1:
add()
elif choose_rule == 2:
cut()
elif choose_rule == 3:
mul()
elif choose_rule == 4:
div()
elif choose_rule == 5:
rand_nums()
elif choose_rule == 6:
frac()
else:
print("输入有误,请选择(1-6)!")
break
count = judge() #调用judge函数,判断对错,并计分
rate = count/n
print("总共{}分,共答对{}分,正确率:{:.2f}%".format(n,count,rate*100))
main() #主函数调用
三.运行结果
1.显示界面
2.加法运算
3.随机运算
4.真分数运算
| 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
|---|---|---|
| 计划 | 20 | 20 |
| 估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 15 |
| 开发 | 0 | 0 |
| 需求分析(包括学习新技术) | 60 | 120 |
| 生成设计文档 | 0 | 0 |
| 设计复审 | 15 | 30 |
| 代码规范 | 5 | 5 |
| 具体设计 | 30 | 20 |
| 具体编码 | 120 | 180 |
| 代码复审 | 10 | 10 |
| 报告 | 0 | 0 |
| 测试报告 | 0 | 0 |
| 计算工作量 | 300 | 300+ |
| 事后总结,并提出过程改进计划 | 30 | 50 |
四.总结或感想
通过此次班级作业学习到了一些新知识或技能,首先,因为第一次随笔只是简单的叙述,此次随笔学习到了博客园中如何插入代码,图片,设置表格等操作。其次,通过此次小程序的设计,对Python知识有了进一步的熟悉,为什么选择Python语言呢?因为最近接触的比较多,而且即将面临Python的考试。同时考虑到真分数的运算,调用Python的第三方库也比较方便。再者,作业中提到了psp表格,对软件开发过程有进一步了解,从目前自身情况来看,包括一些小程序的设计或者课程设计报告,每次都只是着重如何设计代码,没有考虑开发过程中的一系列步骤。就算考虑到了,也只是简而了之,对每个过程中的具体任务没有明确的划分。反应的问题就是,现实世界可能要比想象的复杂,从而导致需求也只是基本得到满足,还要考虑的因素还有很多。