注意:这个练习应该仅使用当前我们学过的语句和特性来实现。
【习题 3.3.1】 编写一个函数,绘制如下表格:
提示:要在同一行打印出个值,可以使用逗号分隔不同的值:
print ('+', '-')
如果一个序列以逗号结尾,Python会认为这一行没有结束, 于是下一个打印出的值会
出现在同一行。
print ('+', end=' ')
print ('-')
这两条语句的输出结果是’+ -’。
一条单独的print语句会结束当前行,开始下一行。
【分析】
第一步:先分析表格下表格
第二布:确认下方案
首先,题目给出的 print
语句的用法肯定是有用的
print ('+', end=' ')
print ('-')
其次,【习题 3.2.4】 的 do_twice 和 do_four 也是有用的
#执行函数f(x)两次
def do_twice(f,x):
f(x)
f(x)
#通过执行do_twice(f,x)两次,实现执行f(x)四次
def do_four(f,x):
do_twice(f,x)
do_twice(f,x)
所以我打算用 do_twice 画边界和空白的每一条,再用 do_four 画4条空白的行高
【求解】
#执行函数f(x)两次
def do_twice(f,x,y):
f(x,y)
f(x,y)
#通过执行do_twice(f,x)两次,实现执行f(x)四次
def do_four(f,x,y):
do_twice(f,x,y)
do_twice(f,x,y)
#画出表格的每条,边界、空白可用
def do(x,y):
print (x, end=' ')
print (x, end=' ')
print (y)
#画出表格的“一行”:1条上边+4条行高
def line():
do('+ - - - -','+')
do_four(do,'| ','|')
#画出表格:2行+1底边
def list():
line()
line()
do('+ - - - -','+')
list()
【再解】 瞄了一眼,下面 【习题 3.3.1】 要求变成 4 × 4 的表格,我想能不能把变量尽量提出来,改变表格的时候改个数字就好了?最后发现列很容易做到(用《Think Python》13页《2.6 字符串操作》中的 ‘Spam’*3),行还是要靠 print
语句一行一行打印。
当然此方法中的“+ - - - - ”和“| ”要比 【求解】 中多1个空格
#变量:表格列数
n = 2
#n列表格的1条:n个循环体+1个终止符,边界、空白均可使用
def cell(x,y,n):
print(x*n+y)
#行高:4条空白(直接4条,懒得再定义do_twice和do_four了)
def line_height_4(n):
cell('| ','|',n)
cell('| ','|',n)
cell('| ','|',n)
cell('| ','|',n)
#行:一条边界+行高
def line(n):
cell('+ - - - - ','+',n)
line_height_4(n)
#表格:2行+1底
def list(n):
line(n)
line(n)
cell('+ - - - - ','+',n)
#执行表格函数,打印出表格
list(n)
【习题 3.3.2】 编写一个函数绘制类似的表格,单有4行4列。
【求解】 基于 【习题 3.3.1】 中的 【求解】,用了 do_twice 和 do_four,没有被拿出来的变量。
代码变动:需要在画“每条”时多打印“列” print (x, end=’ ') 2次,画表格的时候多打印“行” line() 2次
#执行函数f(x)两次
def do_twice(f,x,y):
f(x,y)
f(x,y)
#通过执行do_twice(f,x)两次,实现执行f(x)四次
def do_four(f,x,y):
do_twice(f,x,y)
do_twice(f,x,y)
#画出表格的每条,边界、空白可用
def do(x,y):
print (x, end=' ')
print (x, end=' ')
print (x, end=' ')
print (x, end=' ')
print (y)
#画出表格的“一行”:1条上边+4条行高
def line():
do('+ - - - -','+')
do_four(do,'| ','|')
#画出表格:2行+1底边
def list():
line()
line()
line()
line()
do('+ - - - -','+')
list()
【再解】 基于 【习题 3.3.1】 中的 【再解】,没有使用 do_twice 和 do_four,变量 n 派上了用场!
代码变动:将 n 的值从 2 改成 4,最后画表格的时候多打印“行” line(n) 2次
#变量:表格列数
n = 4
#n列表格的1条:n个循环体+1个终止符,边界、空白均可使用
def cell(x,y,n):
print(x*n+y)
#行高:4条空白(直接4条,懒得再定义do_twice和do_four了)
def line_height_4(n):
cell('| ','|',n)
cell('| ','|',n)
cell('| ','|',n)
cell('| ','|',n)
#行:一条边界+行高
def line(n):
cell('+ - - - - ','+',n)
line_height_4(n)
#表格:2行+1底
def list(n):
line(n)
line(n)
line(n)
line(n)
cell('+ - - - - ','+',n)
#执行表格函数,打印出表格
list(4)