Github地址:

https://github.com/guoyuyi/gyy.github.io/blob/%E4%BD%9C%E4%B8%9A1/zy1.py

题目描述:

  通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算。

Psp表格:

第一次作业PSP

任务内容

计划完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

60

60

Estimate

估计这个任务需要多少时间,并规划大致工作步骤

20

30

Analysis

需求分析 (包括学习新技术)

40

80

Design

具体设计

30

40

Coding

具体编码

300

500

test

测试(自我测试,修改代码,提交修改)

150

200

Postmortem & Process

Improvement Plan

事后总结 ,并提出过程改进计划

30

50

Summary

合计

630

960

1.程序设计

生成简单的四则运算题目需要两个整数或是分数,为了将答案与算式分类,用两个列表储存。q[]用来存储问题,ans[]用来存储答案。我们可以通过random模块生成一定区间里的随机数,分数也可以通过随机生成分子和分母的形式随机生成。同时分数可以使用Fraction模块,可以同时实现分数与整数的运算以及分子和分母的约分。

下面是各个函数的代码:

2.实现代码

# -*- coding: utf-8 -*-
"""
Created on Sun Sep 20 20:24:13 2020

@author: guo'yu'yi
"""
import datetime
import argparse
import re
import random
from fractions import Fraction
##四则运算
def count1(question, ans1):
symbol = random.choice(['+', '-', '*', '/']) # 随机符号的产生
if symbol == '+':#加法
n1 = random.randint(0, 20)
n2 = random.randint(0, 20)
question.append(str(n1) + '+' + str(n2) + '=')
ans1.append(n1 + n2)
elif symbol == '-':#减法
n1 = random.randint(0, 20)
n2 = random.randint(0, 20)
n1,n2 = max(n1,n1),min(n1,n2)#保证出现的数字为正数
question.append(str(n1) + '-' + str(n2) + '=')
ans1.append(n1 - n2)
elif symbol == '*':#乘法
n1 = random.randint(0, 20)
n2 = random.randint(0, 20)
question.append(str(n1) + '×' + str(n2) + '=')
ans1.append(n1 * n2)
else:#除法保证分母不为0
n1 = random.randint(0, 20)
if n1 == 0:
n2 = random.randint(1, 20)
else:
n2 = random.randint(1, n1 + 1)
question.append(str(n1) + '÷' + str(n2) + '=')
ans1.append(Fraction(n1, n2))

##随机生成两个分数
def createF():
fz1 = random.randint(0, 20)
if fz1 == 0:
fm1 = random.randint(1, 20)
else:
fm1 = random.randint(1, 20)
f1 = Fraction(fz1, fm1)
fz2 = random.randint(1, 20)
fm2 = random.randint(20, 20)
f2 = Fraction(fz2, fm2)
return f1, f2

def f(f):#分数的转换
a=f.numerator #分子
b=f.denominator #分母
if a%b==0:#计算为整数
return '%d'%(a/b)
elif a<b:#计算为真分数
return '%d%s%d' % (a,'/',b)
else:#计算为带分数
c=int(a/b)
a = a - c * b
return '%d%s%d%s%d' % (c,'’',a,'/',b)#带分数

##两个分数的四则运算
def count2(question,ans1):
symbol = random.choice(['+','-','*','/'])
f1,f2 = createF()
if symbol =='+':
while f1+f2>1:
f1,f2 = createF()
question.append(str(f1)+'+'+str(f2)+'=')
ans1.append(f1+f2)
elif symbol =='-':
f1,f2 = max(f1,f2),min(f1,f2)#保证出现的数字为正数
question.append(str(f1)+'-'+str(f2)+'=')
ans1.append(f1-f2)
elif symbol == '*':
while f1*f2>1:
f1,f2 = createF()
question.append(str(f1)+'×'+str(f2)+'=')
ans1.append(f1*f2)
else:
while f1/f2>1:
f1,f2=createF()
question.append(str(f1)+'÷'+str(f2)+'=')
ans1.append(Fraction(f1,f2))

##主类
def main():
while 1:
print("输入题目的数量", end=" ")
k = int(input())
temp = 100 / k
score = 0
question = []
ans1 = []
ans2 = []
for i in range(k):
n = random.randint(1, 4)
if n == 1:
count1(question, ans1)
g = Fraction(ans1[i])
ans2.append(f(g))
else:
count2(question, ans1)
g = Fraction(ans1[i])
ans2.append(f(g))#记录带分数答案
for i in range(k):
print("第{}题:{}".format(i + 1,question[i]), end=" ")
a = input()
if a == str(ans1[i]):
score =score + temp
print("所得的分数为:{}".format(score))
print("正确答案:", end=" ")
for i in range(k):
if str(ans1[i]) == str(ans2[i]):
print(question[i] + str(ans1[i]))
else:
print("{}{}或{}".format(question[i],str(ans2[i]),str(ans1[i])))

if __name__ == '__main__':
main()

  

3.程序运行结果

总结:

写程序过程中发现了很多不足,花费的时间比起预计的时间超出很多,而且注册账号摸索GitHub花了很多时间,下次争取补上吧~

Python实现自动生成小学四则运算题目的更多相关文章

  1. python实现自动生成小学四则运算题目(软工第二次项目作业)

    前言 软件工程 传送带 作业要求 传送带 作业目标 结对编程:代码实现.性能分析.异常处理说明.记录PSP表格 代码见: github 个人信息:朱育清 3118005437 信安二班 我的partn ...

  2. myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)

    1.Github项目地址 https://github.com/baiyexing/myapp.git 2.功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n ...

  3. 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序

    1. 编写一个能自动生成小学四则运算题目的程序.(10分)   基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图.   本题发一篇随笔,内容包括: 题 ...

  4. Individual Project "写一个能自动生成小学四则运算题目的程序"

    一.题目简介 写一个能自动生成小学四则运算题目的程序. 初步拟定要实现的功能后,估计一下自己需要花多长时间.编程过程中记录自己实际用了多长时间. 然后和同学们比较一下各自程序的功能.实现方法的异同等等 ...

  5. C语言:一个能自动生成小学四则运算题目的程序

    完成这个程序,半个小时内完成了,这个程序,可以自动生成小学简易的四则运算,提供菜单让用户选择,然后判断加减乘除,判断答对答错的题目个数,用户同时也可以重新选择继续答题或重新选择或退出程序. 源程序: ...

  6. 实现一个自动生成小学四则运算题目的命令行程序(java实现)

    Github项目地址:https://github.com/xiaobaot/wordcount/tree/master/sizeyusuan 团队成员:谢家明(代码生成)    谢竣(测试完善) 项 ...

  7. java实现自动生成小学四则运算——朱庭震,詹祺豪

    组员:朱庭震,詹祺豪 Github地址:https://github.com/ztz1998/second/tree/master 1题目:实现一个自动生成小学四则运算题目的命令行程序. 2说明: 自 ...

  8. 使用MFC做一个简单的‘能自动生成小学生四则运算的软件’

    这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...

  9. (Python)自动生成代码(方法一)

    在写某个平台的自动化脚本时,笔者把全部的操作都封装到了两个类中,page.py和commonpage.py: page.py部分代码: class BasePage(object): ''' 页面基础 ...

随机推荐

  1. JavaScript学习系列博客_7_JavaScript中的逻辑运算符、三元运算符

    逻辑运算符 ! 非 - 非运算可以对一个布尔值进行取反,true变false false边true - 当对非布尔值使用!时,会先将其转换为布尔值然后再取反 - 我们可以利用 !! 来将其他的数据类型 ...

  2. netbox demo

    参考链接:https://pypi.org/project/python-netbox/ # python 参考链接 https://ttl255.com/pynetbox-netbox-python ...

  3. Linux下执行SQL文件

    最近在使用MySQL数据库时,想要执行一些sql文件,就想到了source命令. source介绍:source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令. 功能:使Shell ...

  4. mysql 8.0.19 win10快速安装教程

    本文教程为大家分享了mysql 8.0.19安装教程,供大家参考,具体内容如下 1.下载.zip安装文件 2.根目录存放my.ini,文件路径用“/”分割,例如: [mysqld] port=3306 ...

  5. 23种设计模式 - 领域问题(Interpreter)

    其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 领域问题 Interpreter 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比 ...

  6. 23种设计模式 - 单一职责(Decorator - Bridge)

    其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 单一职责 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀, ...

  7. android开发之java代码中字符串对比忽略大小写。java程序员必回,可用来比对验证码等问题

    比如:字符串a与字符串B对比,只需调用 a.equalsIgnoreCase(B);即可.很简单的一个方法.忽略大小写.

  8. unity接入安卓SDK,与安卓相互通信

    .接SDK是个什么样的活计? SDK的工作流程: 1. 从unity端出发,向安卓发起一系列的请求(unity call android). 2. 安卓端收到unity端调用,然后在具体调用SDK的一 ...

  9. DLX AlgorithmX

    AlgorithmX精确覆盖: https://en.wikipedia.org/wiki/Knuth's_Algorithm_X DLX的基础算法 https://zh.wikipedia.org/ ...

  10. linux常用命令及配置文件

    linux常用命令 基于centos 以我自己实际使用情况来说,从最常用的开始开始,大致如下: 1. 基本命令 cd ls ll(ls -l 别名 ) cat vi/vim touch echo mk ...