美文网首页
菜鸟笔记Python3——生成测试数据

菜鸟笔记Python3——生成测试数据

作者: 灵玉真人 | 来源:发表于2017-05-15 21:58 被阅读0次

    参考教材:《Python3程序开发指南(第二版)》1.3.2

    程序描述:

    创建随机整数数矩阵
    运行

    Paste_Image.png

    分析开始!

    1. 既然是生成随机数,那么首先我们需要加载一个 random 包
    import  random
    
    1. 然后我们需要一个生成随机整数的函数 get_int(msg, minimum, default)
      Ps:其实直接用 random.randint(minimum, maximum)也可以直接得到随机的整数,可能是教材想通过这个例子让我们回顾函数的应用吧。
      示例代码
    def get_int(msg, minimum, default):
        while True:
            try:
                line = input(msg)
                if not line and default is not None:
                    return default
                i = int(line)
                if i < minimum:
                    print('must be >= ',minimum)
                else:
                    return i
            except ValueError as err:
                print(err)
    

    注意 这里的if not line and default is not None:比较绕
    可以这么理解:if not (line and default is not None):等价于if not line and default
    它的意思是:判断输入的字符串跟default 是不是同时指向同一个对象:python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False)
    如果只按下Enter键 那么line指向None,如果default也指向None line and default == None, 函数就返回一个空的defaulf
    Ps: 根据网评,还是推荐大家以后用if not x而不是if not x is None的判断语句,毕竟前者看起来显然很多
    如果input()输入非空,那么就开始接下来转整型等等一系列操作,这里就不多说了

    3.现在,我们要获取生成矩阵的4个要素:行数列数最大值最小值
    很显然可以这么实现:

    rows = get_int('rows: ',1,None)
    columns = get_int('columns: ',1,None)
    minimum = get_int('minmum (or Enter for 0): ',-1000000, 0)
    default = 1000
    if default < minimum:
        default = 2*minimum
    maximum = get_int('maximum (or Enter for '+str(default)+'): ',
                      minimum,default)
    

    Ps:其实这里maximum的定义我觉得根本没必要这么麻烦,直接定义一个值就完事了,多简单,还有这个default的作用我也没有想明白

    4.现在我们用两层循环完成最后的工作

    row = 0
    while row < rows:
        line = ''
        column = 0
        while column < columns:
            i = random.randint(minimum,maximum)
            s = str(i)
            while len(s) < 10: #要让每个元素对齐
                s = ' '+s
            line +=s
            column +=1
        print(line)
        row +=1
    

    最后完整的代码:

    __author__ = 'Administrator'
    #! /usr/bin/python<br># -*- coding: utf8 -*-
    import random
    
    def get_int(msg, minimum, default):
        while True:
            try:
                line = input(msg)
                if not line and default:
                    return default
                i = int(line)
                if i < minimum:
                    print('must be >= ',minimum)
                else:
                    return i
            except ValueError as err:
                print(err)
    
    rows = get_int('rows: ',1,None)
    columns = get_int('columns: ',1,None)
    minimum = get_int('minmum (or Enter for 0): ',-1000000, 0)
    
    default = 1000
    if default < minimum:#其实无所谓
        default = 2*minimum
    maximum = get_int('maximum (or Enter for '+str(default)+'): ',
                      minimum,default)
    
    row = 0
    while row < rows:
        line = ''
        column = 0
        while column < columns:
            i = random.randint(minimum,maximum)
            s = str(i)
            while len(s) < 10:
                s = ' '+s
            line +=s
            column +=1
        print(line)
        row +=1
    
    

    Ps:其实对于给定循环次数的情况,我们更倾向与用 for in 循环
    代码如下:

    for row in range(0,rows):
        line = ''
    
        for column in range(0,columns):
            i = random.randint(minimum,maximum)
            s = str(i)
            while len(s) < 10:
                s = ' '+s
            line +=s
            column +=1
        print(line)
        row +=1
    
    

    相关文章

      网友评论

          本文标题:菜鸟笔记Python3——生成测试数据

          本文链接:https://www.haomeiwen.com/subject/zpckxxtx.html