参考教材:《Python3程序开发指南(第二版)》1.3.2
程序描述:
创建随机整数数矩阵
运行
分析开始!
- 既然是生成随机数,那么首先我们需要加载一个 random 包
import random
- 然后我们需要一个生成随机整数的函数
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