测试人都会的鸡娃神器——python随机生成算术题

2742 篇文章 2 订阅
2644 篇文章 26 订阅

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读3k次,点赞86次,收藏13次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

同学们,先问一个尖锐的问题,你们都多大了,如果你已成为宝爸宝妈,那么你们有没有过这样的需求呢:你的熊孩子已经步入了小学,数学课的计算要求越来越高,你需要让Ta每天做上几十道口算题。有同学说了,这定西在淘宝拼多多上七八块钱不能就买一套嘛。是的,七八块钱确实可以买一套,但七八块钱它也是钱呀,难道你不想省吗?而且一套题做几天也做完了,接着你不还得再花七八块嘛,这样积少成多实际钱也没少花。

如果你不差钱儿,那么好,你有没有这样的尴尬时刻:你身边的朋友们对你说,你这个做IT的能不能用编程帮我们搞出点算术题来呀,这时,身为手工酱的你编程水平太一般了,你只好弱弱地说:

“亲,我……,我……,我不会……”

此时,你的朋友翻着白眼,一脸嫌弃地说:“呦,做IT的还不会编程啊,谁信呀,切,不想管就直说呗,得,不劳您大驾,我自己淘宝拼多多上买去!”

此时你想辩解,可是你苍白的辩解有谁信呢?这时候,你看额别说跳进黄河了,就算你跳进密西西比河也洗不清了!你说,这尴尬不尴尬?

如果你也遇到过这种尴尬,那么好了,今天这篇文章你算是来着了,因为它就是为身为宝爸宝妈的你量身打造的,绝对是宝宝宝妈们的code福音呢。

但有同学说,我水平比较高,我已经会了,那你就请自行绕路吧,可以去阴凉地儿休息休息,还不太会的同学继续。

我们先说需求,假设你的熊孩子已经二年级了,不仅学习了100以内的加减法,还学了九九乘法表,那么需求来了:生成1000道算术题,要求加减乘除四种算式各随机占25%,且答案不得大于100,加减法的加数和减数不能超过100,乘除法只能包含九九乘法表里的内容,所有算式题每50题为一组,每一组题的后面要跟上这组算式的答案,即第一组题,第一组答案,第二组题,第二组答案……这样以此类推,直到1000道题及其答案全部打印完成。

怎么样,宝爸宝妈们有思路吗?如果你没有思路,那就跟着文章继续看下去吧。

首先,这里用到了九九乘法表,那么,我们是不是首先应该生成一个九九乘法表呢,当然,这不需要算式,只需要结果,所以,我们把九九乘法表里每一个算式的结果存在一个列表里:

def get_chengfa_result_list():
    r = []
    for ir in range(1,10):
        for ir1 in range(1,ir+1):
            r.append(ir1 * ir)
            if ir1 == ir:
                break
    return r

这样,就生成了结果,结果为:

[1, 2, 4, 3, 6, 9, 4, 8, 12, 16, 5, 10, 15, 20, 25, 6, 12, 18, 24, 30, 36, 7, 14, 21, 28, 35, 42, 49, 8, 16, 24, 32, 40, 48, 56, 64, 9, 18, 27, 36, 45, 54, 63, 72, 81]

有人说了,这数据也不多啊,我一个数一个数地手敲行不?当然行,但那样不是麻烦嘛,而且也容易被人鄙视,回头你的朋友又该说了:“呦,会编程的连个九九乘法表都写不出来呀,谁信呀!”,那你又该跳密西西比河了(密西西比河:“我招谁惹谁了!”)。

九九乘法这个比较简单,我们就不在这里过多赘述了,我们下面创建最关键的函数,那就是生成算式及其答案,下面先上结果:

# coding=utf-8

import random

import copy

def jiajianchengchu(maxdigit):

    f_list = ["+", "-", "×", "÷"]

    tem_list0 = []

    while 1:

        d_list = range(0, 101)

        d_chengchu_list= [0,1,2,3,4,5,6,7,8,9]

        d_chengchu_list_result = get_chengfa_result_list()

        f = random.choice(f_list)

        if f == "+":

            while 1:

                d0 = random.choice(d_list)

                d1 = random.choice(d_list)

                if d0 + d1 > 100:

                    continue

                else:

                    tem_list0.append(str(d0) + "+" +str(d1) + "=")

                    break

        if f == "-":

            while 1:

                d0 = random.choice(d_list)

                d1 = random.choice(d_list)

                if d0 - d1 < 0:

                    continue

                else:

                    tem_list0.append(str(d0) + "-" +str(d1) + "=")

                    break

        if f == "×":

            d0 = random.choice(d_chengchu_list)

            d1 = random.choice(d_chengchu_list)

            tem_list0.append(str(d0) + "×" +str(d1) + "=")

        if f == "÷":

            while 1:

                d0 = random.choice(d_chengchu_list_result)

                d1 = random.choice(d_chengchu_list)

                if d1 == 0:

                    continue

                if d0 % d1 != 0:

                    continue

                if d0 / d1 >=10:

                    continue

                if d0 < d1:

                    continue

                else:

                    tem_list0.append(str(d0) + "÷" +str(d1) + "=")

                break

        if len(tem_list0) == maxdigit:

            break



    r_list = []

    tem_list = []

    tem_list_result = []

    for ite_str in tem_list0:

        suanshi = copy.deepcopy(ite_str)

        if "×" in ite_str:

            ite_str = ite_str.replace("×","*")

        if "÷" in ite_str:

            ite_str = ite_str.replace("÷","/")



        tem_list.append(suanshi)

        tem_list_result.append(suanshi + str(int(eval(ite_str[0:-1]))))

        if len(tem_list) == 50:

            for ite in tem_list:

                r_list.append(ite + " "*8)

            r_list.append("-"*50)

            tem_list = []

            for iter in tem_list_result:

                r_list.append(iter + " "*8)

            r_list.append("-" * 50)

            tem_list_result = []

    r_str = ""

    for i in r_list:

        r_str += i

    return r_str

在这个函数里,我们需要生成加减乘除各25%,有同学说了,那我就生成250道加法,250道减法,250道乘法和250道除法不就完了,多简单。不,同学,你错了,我们要求的可是随机生成,你这样能随机吗?所以你看,我们在最前面引入了随机模块。

在函数中我们首先生成一个列表f_list,它里面包含了四个符号"+", "-", "×", "÷",为的就是随机。

接着,我们创建了一个临时列表tem_list0,它用来存储所有的算式,此时先不管答案。

下面,我们搞一个死循环while 1,有同学说了,既然是1000道,数目是定的,为什么要死循环?为什么不循环1000遍?这个啊,你要知道,题目是有限制的,计算结果不能超过100,加数和减数不能超过100,乘除法只能包含九九乘法表里的内容,那么我们又是随机生成的,难免会生成超出范围的算式,那超出了范围怎么办呢?自然就放弃了,进行下一次循环,因为是随机的,那么到底会发生几次放弃我们也不知道,所以就必须死循环啦。

我们在死循环里先创建一个数字列表d_list,它包含从1到100的所有数字,我们的加数、减数都从这里面出,它就是我们加法和减法的原料池。

再定义一个乘数和除数的原料池,是0到9。

再定义一个乘除法结果的列表,这个列表里存的是九九乘法表里所有算式的结果,它来自于我们事先定义好的那个函数。

我们从d_list里随机取一个数,存到变量f里,下面,f分四种情况分别处理。

当f为加号时,我们要再嵌套一个死循环,在这个死循环里,先把加数d0和被加数d1分别从d_list里随机取出来,计算,如果d0+d1大于100,则放弃,进行下一个循环,否则如果小于100,则把算式存储到tem_list0里,然后跳出死循环,别忘了这个跳出哦,因为这可是死循环,没有这步跳出它就会一直循环下去,循环到你怀疑人生。还有一点要注意,这里存的是算式,没有结果哦。

当f为减号时,用同样的思路,这里直接进行下一次循环的条件是d0-d1为负数,因为熊孩子还没学负数,如果有的同学说了,我孩子都上高年级了,早就学负数了,那你就不要那个条件就好了,同时也恭喜你响应了当年国家的晚婚晚育号召。

下面是乘法,乘法的话不需要有什么直接进入下一个循环的条件了,这个就不多解释了,大家自品,细品。

除法复杂一点,直接进入下一个循环的条件有四个,第一是d1不能为0,因为分母不能为0,这个如果有忘的,自行复习啊,而且别忘了给你们中学数学老师赔个不是:“对不起老师,我把您教的东西还给您了!”

第二个条件是d0除以d1不能有余数,即必须是整除,还是因为熊孩子没学,当然,如果你说你孩子学了,那还得恭喜你响应了当年的晚婚晚育号召。

第三个条件是d0除以d1必须大于10,不然就有小数点了,不多解释了,没学,号召。

第四个条件是d0不能小于d1,不然就得零点几了,还是没学,号召。

以上四个条件都通过了,恭喜你,即将进入否则环节,也就是else语句块,那就是拼接除法算式并存入tem_list0

接下来,跳出,别忘了,不然又怀疑人生了。

再下面,我们判断一下tem_list0的长度,如果等于maxdigit,就跳出这个大死循环。有同学问了,不是说1000个算式嘛,那这个maxdigit是什么鬼?这个啊,就是做灵活一点,这次是生成1000个,下次需要生成2000了怎么办?难道重写一个吗?那不又被鄙视了,如果你没得被鄙视综合症,那还是写灵活一点吧。

接下来,可就有意思了,我们创建三个列表,r_list用来存储最终的结果,即所有算式加结果,并以50个为一组。tem_list用来存储算式,tem_list_result用来存储结果。

我们搞一个循环,来循环tem_list0,就是所有算式,每一次循环的值存储在变量ite_str里,首先,使用深度拷贝把ite_str赋值给变量suanshi,为什么要赋值给变量suanshi?还是用深度拷贝而不直接用等号赋值?我们后面再说。

接下来,我们把所有乘法和除法算式里的×替换为*,÷替换为/,这是为了下一步做计算用。

我们把算式存储到tem_list中,把算式的结果存储到tem_list_result中,这里注意了,算式的结果我们是用eval()函数来实现的,大家记得,刚才我们把ite_str深度拷贝给了suanshi,这下明白原因了吗?因为我们做了替换,suanshi存的是算式,ite_str通过eval()函数来计算出来的结果,他们两个是不同的,所以要分开,至于说为什么要用深度拷贝,因为如果是直接用等号赋值,即a=b实际只是把b的址赋值给了a,当b被改变了,a也跟着变,而我们把ite_str里的乘号和除号都替换成了*和/,如果不用深度拷贝的话,suanshi也容易跟着改变,所以为了保险起见,我们用了深度拷贝。

有同学又说了,我用了深拷贝,怎么报错呢?你仔细看看你的报错,你八成是没引破特吧?你看我们的样例代码最前面,是不是有import copy?

再顺便说一下,ite_str后面为什么跟个[0:-1],因为eval()函数里面是不能包含等号的,否则就报错啦。有同学问这是为什么,这个啊,可以说没有为什么,这就是语法,具体得问Python之父去,就是那个穿着“人生苦短,我用Python”上衣的老头子。

好了,再下面呢,我们判断一下tem_list的长度是否等于50,因为50个一组嘛,如果等于50,则循环tem_list,即把每一个算式都添加到r_list最终结果列表里,注意,每一次存入都要在后面加8个空格,因为算式后面得给留出写答案的地方啊,这8个空格就是写答案的,当50次循环完成后,再存入50个-,为什么呢,因为每一组之间得来个分隔符来分割一下,所以这里就用50个-作为那道华丽的分隔线,同时,我们还要把tem_list清空,以便下一组50个算式来使用。

完成后,再循环tem_list_result,刚才我们已经把计算结果都存入到tem_list_result了,我们再循环它,把结果也存储到r_list里,与上一段同理,就不赘述了。

最后一步终于到了,我们设置一个字符串变量r_str,循环r_list把它赋给r_str,最后再返回这个r_str,就算大功告成啦。

现在,我们写这样两行:

r = jiajianchengchu(1000)

print(r)

见证奇迹的时刻到了,我们来run一下,看,结果扑面而来:

我们把结果复制出来,粘贴到Word里,再调整一下字体字号,就OK了,在这里我悄悄告诉大家,只要把字体调成宋体,字号为小四,1.5倍行距,是最合适的,然后我们再每一页敲几下回车就OK了。

有同学说了,粘到Word还得手动调节字体字号啊,能不能自动调节啊,这个啊,这个可以有,但我这还真没有,因为我也没学这个,平时用Python操作Word的需求基本没有,几乎全是操作Excel的,所以就没搞这块,不过大家放心,如果有一天我学了操作Word,一定上来分享!

最后,解答一个很多同学都问的问题,我算式都做出来,熊孩子就是爱玩爱闹不做可怎么办,有没有专治熊孩子的Python包啊?这个嘛,估计是有,但我还真没学,如果我学了一定上来分享哈!

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述​​​

在这里插入图片描述

​​​

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值