ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

利用PYTHON出小学数学题

2022-01-12 13:00:50  阅读:301  来源: 互联网

标签:randint PYTHON 小学 random 算式 随机 答案 数学题 100


先看要求

小学数学老师很辛苦,经常为出一套数学练习题而绞尽脑汁,答案需反复计算,以免出错影响学生练习。通过python程序可以非常容易的随机出数学练习题,答案实时获得,基本无错。编写一个混合加减法出题程序,可以根据输入出题数量随机输出100以内混合加减法的计算题。出题试卷分为不带答案和带答案两部分,分别输出到屏幕和文件(math.txt和key.txt)中。屏幕输出效果如图所示。

 

再看代码

from random import randint
import random
def get_expression():#算式的生成
    a=randint(0,100)
    b=randint(0,100)#随机生成1~100之间的整数
    sign=random.choice(['+','-'])#随机进行+,-运算
    if sign=='+':
        ans=a+b
    else:
        ans=a-b
    if ans<0 or ans>100:#如果结果不在0-100之间 则重新生成a b
        get_expression()
    else:
        a='{: <2d}'.format(a)
        b='{: <2d}'.format(b)
        ans='{: <2d}'.format(ans)
        #a,b,ans格式化,统一为2个宽度 使输出更整齐,美观
        #存放 带没有(ex1)答案  和 有答案(ex2) 的算式
        ex1=str(a)+str(sign)+str(b)+'='
        ex2=str(a)+str(sign)+str(b)+'='+str(ans)
        global expression
        expression=list()
        expression.append(ex1)
        expression.append(ex2)
    return expression#得到的两个算式以列表的形式返回

def save_expression(n):#得到指定数量的算式
    expression_Noans=list()#不带有答案
    expression_withans=list()#带有答案
    for i in range(0,n):#调用n次生成函数,得到n个满足条件的算式
        get_expression()
        expression_Noans.append(expression[0])
        expression_withans.append(expression[1])
    return [expression_Noans,expression_withans]#返回的expression_Noans,expression_withans列表中各有n个算式


def show_expression(n=int(eval(input('请输入出题数量:')))):#算式的输出和打印
    fp1= open(r'C:\Users\Peng\Desktop\math.txt','a+')#’a+’表示如果没有这个文件则生成,有则在内容中继续填充
    fp2= open(r'C:\Users\Peng\Desktop\key.txt','a+')
    #expression_Noans=save_expression(n)[0]
    #expression_withans=save_expression(n)[1]
#如果这么写,就相当于重新调用了get_expression()函数,答案会不一致
    lis=save_expression(n)
    expression_Noans=lis[0]
    expression_withans=lis[1]
    show_number=0#用于记录每行输出的题量 控制排版
    print(n,'道混合加减法题:')#在频幕上输出
    print(n,'道混合加减法题:',file=fp1)#打印至文本文档中
    for i in range(0,len(expression_Noans)):
        print(expression_Noans[i],end='     ')
        print(expression_Noans[i],end='     ',file=fp1)
        show_number+=1
        if show_number%2==0:#每行输出两个题
            print('\n')#在频幕上输出
            print('\n',file=fp1)#打印至文本文档中
    show_number=0#用于记录每行输出的题量 控制排版
    print()#换一行输出
    print(n,'道混合加减法题(带答案):')#在频幕上输出
    print(n,'道混合加减法题(带答案):',file=fp2)#打印至文本文档中
    for i in range(0,len(expression_withans)):
        print(expression_withans[i],end='      ')
        print(expression_withans[i],end='      ',file=fp2)
        show_number+=1
        if show_number%2==0:
            print('\n')
            print('\n',file=fp2)
show_expression()



最后看一些创作过程中的总结

1,题目生成并不难,只要利用randint()模块随机生成两个整数,然后随机做加减法就可以完成,计算符号的随机==>      random.choice(['+','-']),注意一个细节,100以内加减法应该控制答案的范围,防止越界(不应该出现答案是负数的算式)

2,输出的格式化问题,如何让题目排版整齐,是难点,把没有答案和有答案的分开输出在频幕上比打印到对应的文档要难一点。打印到文档只要存入不同路径,相当于做两件独立的事情,打印到频幕上要整体一起做,而且有先后显示的区别。

3,要注意get_expression()函数每调用一次,都会生成一个不一样的算式,所以要化动为静,每生成一个,就把他存入列表,然后返回该列表,就得到了固定不变的算式,方便后续操作,否则可能会遇到算式和答案不匹配的情况。

4,然后就是一些小问题,让每个算式的长度一致,打印的时候会相对美观,'{: <2d}'.format(a),利用数字的format格式化方法,让每个数字占2个长度,像1和11就会对齐

结果:

 

 

标签:randint,PYTHON,小学,random,算式,随机,答案,数学题,100
来源: https://blog.csdn.net/m0_63445876/article/details/122450278

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有