《Think Python》练习 3-3:用函数画表格

第3章 函数

练习 3-3:用函数画表格

注意:这个练习应该仅使用当前我们学过的语句和特性来实现。
【习题 3.3.1】 编写一个函数,绘制如下表格:
《Think Python》练习 3-3:用函数画表格_第1张图片
提示:要在同一行打印出个值,可以使用逗号分隔不同的值:

print ('+', '-')

如果一个序列以逗号结尾,Python会认为这一行没有结束, 于是下一个打印出的值会
出现在同一行。

print ('+', end=' ')
print ('-')

这两条语句的输出结果是’+ -’。
一条单独的print语句会结束当前行,开始下一行。
【分析】
第一步:先分析表格下表格《Think Python》练习 3-3:用函数画表格_第2张图片
第二布:确认下方案
首先,题目给出的 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)

【实现效果】
《Think Python》练习 3-3:用函数画表格_第3张图片

你可能感兴趣的:(《Think,Python》课后实现)