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

参考教材:《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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容