个人PSP(四则运算)升级
源代码管理平台Gitbee地址:https://gitee.com/chen-haijin/
1.题目要求:能自动生成小学四则运算题目,且每一道题目的运算结果不能为负。除了支持整数运算外,还要支持真分数四则运算。
2.工具清单:
1)编程语言:python
2) 效能分析工具:profile
3)源代码管理平台:Gitbee
3.PSP表格
| 预计耗时(分钟) | 实际耗时(分钟) | ||
| Planning | 计划 | 20 | 20 |
| Estimate | 估计这个任务需要多少时间 | 5 | 5 |
| Development | 开发 | 80 | 90 |
| Analysis | 需求分析 | 10 | 10 |
| Design Spec | 生成设计文档 | / | / |
| Design Review | 设计复审(和同事审核设计文档) | / | / |
| Coding Standerd | 代码规范(为目前的开发制定合适的规范) | / | / |
| Design | 具体设计 | 30 | 30 |
| Coding | 具体编码 | 100 | 100 |
| Code Review | 代码复审 | 10 | 15 |
| Text | 测试(自测,修改代码,提交修改) | 20 | 20 |
| Reporting | 报告 | 20 | 20 |
| Text Report | 测试报告 | 10 | 10 |
| Size Measurement | 计算工作量 | 5 | 5 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 5 |
| Sum | 合计 | 305 | 330 |
4.功能升级
原来自动生成四则运算题目的设计过于简单(上一条博客),生成的题目四则运算只是两个整数的运算,没有出现分数和小数的运算。为此我在功能上进行了升级。升级后的功能分为:1)两个整数之间加减运算 2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算 4)两个整数之间乘除法运算 5)两个分数之间的加减运算。
另外我还增加了一个用户可以自己选择题目等级的选择,题目等级分为:
1)初级 :参与四则运算的两个数的取值范围位0~20
2)中级 : 参与四则运算的两个数的取值范围位0~50
3)高级: 参与四则运算的两个数的取值范围位0~300
5.代码说明
1)主干函数
import random
from fractions import Fraction #主干函数
def useAnsult():
print("\033[1;31m此软件能计算的类型有:1)两个整数之间加减运算 2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算\033[0m")
print("\033[1;31m 4)两个整数之间乘除法运算 5)两个分数之间的加减运算\033[0m")
homeworkType=int(input("请输入要生成的题目类型代号(1,2,3,4,5,6)中的其中一个:"))
homeworkCount=int(input("请输入要生成的题目个数:"))
level=input("\033[1;35m请输入你想计算的四则题目的等级(初级,中级,或高级):")
if level=="初级":
level=20
elif level=="中级":
level=50
else:
level=300
count=0
while count< homeworkCount:
if homeworkType==1:
count=count+1
print("第"+str(count)+"道题目")
intAddSub(level)
elif homeworkType==2:
count=count+1
print("第"+str(count)+"道题目")
decAddSub(level)
elif homeworkType==3:
count=count+1
print("第"+str(count)+"道题目")
proFraAddSub(level)
elif homeworkType==4:
count=count+1
print("第"+str(count)+"道题目")
intMulDiv(level)
elif homeworkType==5:
count=count+1
print("第"+str(count)+"道题目")
proFraMulDiv(level)
else:
homeworkType=input("\033[1;35m没有该题目类型,输入错误,请重新输入:\033[0m")
2)两个整数之间加减运算函数
#两个整数之间加减运算
def intAddSub(level):
typeCh=random.randint(0,1) #选择加减运算符
left=random.randint(0,level) #生成随机整数
right=random.randint(0,level)
if typeCh==0: #加法运算
print(str(left)+"+"+str(right)+"= ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(left+right))
else: #减法运算
if left< right: #确保减法的结果不会出现负数
middleVariable=left
left=right
right= middleVariable
print(str(left)+"-"+str(right)+" = ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(left-right))
3)带有两位小数的两个数之间加减运算函数
#带有两位小数的两个数之间加减运算
def decAddSub(level):
left = random.uniform(0, level)
left=round(left, 2) #生成的随机数保留两位小数
right = random.uniform(0, level)
right=round(right, 2)
typeCh=random.randint(0,1) #选择加减运算符
if typeCh==0: #加法运算
print(str(left)+"+"+str(right)+"= ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:{:.2f}\033[0m".format(left+right))
else: #减法运算
if left< right: #确保减法的结果不会出现负数
middleVariable=left
left=right
right= middleVariable
print(str(left)+"-"+str(right)+" = ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:{:.2f}\033[0m".format(left-right))
4)两个分数之间的加减运算 函数
#两个分数之间的加减运算
def proFraAddSub(level):
number1=random.randint(0,level)
number11=random.randint(1,level)
left=Fraction(number1,number11 )
number2=random.randint(0,level)
number22=random.randint(1,level)
right=Fraction(number2,number22)
typeCh=random.randint(0,1) #选择加减运算符
if typeCh==0: #加法运算
print(str(left)+"+"+str(right)+"= ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(Fraction(left+right)))
else: #减法运算
if left< right: #确保减法的结果不会出现负数
middleVariable=left
left=right
right= middleVariable
print(str(left)+"-"+str(right)+" = ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(Fraction(left-right)))
5)两个整数之间乘除运算函数
#两个整数之间乘除运算
def intMulDiv(level):
typeCh=random.randint(0,1) #选择运乘除算符
if typeCh==0: #乘法
left=random.randint(0,level)
right=random.randint(0,level)
print(str(left)+"*"+str(right)+"= ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(left*right))
else: #除法
if level<300:
right=random.randint(1,level)
left=right*random.randint(0,4) #此处考虑到用户如果选择初级或中级的除法计算,计算结果是整数比较好,故设除数是被除数的倍数
else:
left=random.randint(1,level)
right=random.randint(1,level)
print(str(left)+"÷"+str(right)+" = ?")
input("请输入你的答案:")
if left%right==0: #判断是否能整除
print("\033[1;35m正确答案是:\033[0m",str(int(left/right)))
else:
print("\033[1;35m正确答案是:\033[0m",str(Fraction(left,right)))
6)两个分数之间乘除计算函数
#两个分数之间乘除计算
def proFraMulDiv(level):
number1=random.randint(0,level)
number11=random.randint(1,level)
left=Fraction(number1,number11 )
typeCh=random.randint(0,1) #选择乘除运算符
if typeCh==0: #乘法运算
number2=random.randint(0,level)
number22=random.randint(1,level)
right=Fraction(number2,number22)
print(str(left)+"*"+str(right)+"= ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(left*right))
else: #除法运算
number2=random.randint(1,level)
number22=random.randint(1,level)
right=Fraction(number2,number22)
print(str(left)+"÷"+str(right)+" = ?")
input("请输入你的答案:")
print("\033[1;35m正确答案是:\033[0m",str(Fraction(left,right)))
7)运行主干函数
useAnsult()
6.测试运行


7.性能分析


个人PSP(四则运算)升级的更多相关文章
- 代码规范、代码复审、PSP
作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...
- 软件工程课堂作业(二)续——升级完整版随机产生四则运算题目(C++)
一.设计思想: 1.根据题目新设要求,我将它们分为两类:一类是用户输入数目,根据这个数目改变一系列后续问题:另一类是用户输入0或1,分情况解决问题. 2.针对这两类要求,具体设计思路已在上篇博文中写出 ...
- 第四周四则运算3 PSP表格
PSP2.1 Personal Software Process Stages time Plan 计划 -Estimate 整数四则运算 分数四则运算 括号 括号四则运算 在主函数中调用 30m ...
- 四则运算3+PSP
题目要求: 1.要求在第二次实验(四则运算2)的基础上加上其他功能. 2.要求能够在每个运算式打印出来后,用户能够进行输入计算的答案,并且程序进行判断给出用户输入的答案的正确性. 3.要求实现四则混合 ...
- PSP个人项目耗时对比记录表:四则运算
Personal Software Process Stages Time(%) 计划 5 •估计这个任务需要多长时间 5 开发 60 •需求分析 5 •生成设计文档 5 ...
- 20170928-3 四则运算psp
1.本周psp: 2.本周进度条: 3.累计进度图(折线图): 4.psp饼状图:
- PROJECT | 四则运算UI设计 - PSP表格&需求分析
PSP表格(TP版) 需求分析 [GUI编程语言选择] 考虑到Java编写GUI效率偏低且界面不算特别美观(即使有Windowbuilder插件帮助),所以我们使用控件更多,开发效率更高,具有集成开发 ...
- 四则运算第三次 PSP
- 基于GUI的四则运算
基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...
- 结队编程--基于GUI的四则运算
coding地址 https://git.coding.net/lizhiqiang0x01/GUI-sizeyunsuan.git 李志强 201421123028 连永刚 201421123014 ...
随机推荐
- 学习-Vue2-Vue实例-数据与方法-Object.freeze()
Object.freeze(),会阻止修改现有的property,意味着响应系统无法再追踪变化 代码示例: <!DOCTYPE html> <html lang="en&q ...
- py07-文件处理
"""什么是文件? 操作系统提供给用户操作复杂硬件(硬盘)的简易的接口 为什么操作文件 人或者应用程序需要永久的保存数据 如何用 f = open() f.read() ...
- 工程能力-远程JUNO-linux
工程能力-远程JUNO-linux 1 ping 通linux 地址 2 ssh/scp 连接/传输数据 ssh root@10.188.72.42 scp -P 22 README.md root@ ...
- Modern C++ ——constexpr的各种用法
Modern C++ --constexpr的用法 Reference <现代C++语言核心特性解析> 为什么引入constexpr const可以定义常量,但也可以用来定义只读变量.co ...
- 如何使用css绘制三角形
背景 用迪卡侬官方主页进行页面练习,发现头部导航栏需要使用到梯形 分析 图形分解 通过图片我们可以发现该梯形可以分解成一个长方形和一个直角三角形,长方形:110*65:直角三角形:11*65(底边*另 ...
- everything 基本功能是本地搜索 高级功能 可以建立 HTTP服务器
局域网,可以查看,播放,等操作
- WSL2安装了Ubuntu之后root不知道密码
更新了WSL2,安装完 Ubuntu 只要求新建账号和密码,不知道root密码,各种不方便Ubuntu 的默认 root 密码是随机的,即每次开机都有一个新的 root 密码在终端输入命令 sudo ...
- ID生成器实现方式的优缺点比较以及最优的ID生成器原理剖析
引用:https://blog.csdn.net/luoyang_java/article/details/90679456 本文的重点主要是ID发号器相关的知识,介绍了雪花算法,以及他的基本原理和实 ...
- json extionsion
using System.Collections.Generic;using Newtonsoft.Json;using Newtonsoft.Json.Converters; namespace D ...
- 时间处理及interval函数运用
MySql时间操作1.interval的说明1.1.当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果4:原理:10为被比较数,后面1,3,5,7为 ...