《Think Python 2e》作业实现(三): 函数

《Think Python 2e》作业实现(三): 函数



这是什么?

这里是《Think Python 2e》作业实现 !在这里将记录《Think Python 2e》作业的练习记录、终端信息和结果分析。

  • 这是《Think Python 2e》哪个版本的作业?
    《Think Python:如何像计算机科学家一样思考》第二版。这里主要参考了一个中文网页版《Think Python 2e》中译本
  • 可以当成《Think Python 2e》参考答案吗?
    这里主要记录了我自己完成作业时所产生的成果及习题总结,基本未参考教材所提供的答案,未免有失规范,参考答案建议还是以 绿茶出版社官方代码 为准。
  • 不同的解释器版本结果不尽相同,这里用的哪个版本Python解释器?
    这里用了Python 3.8.6版解释器,部分用安卓Pydroid 4.01_arm64中的3.8.3版Python解释器,在线解释器用教程推荐的PythonAnywhere中的3.8版Python解释器。

习题3-1: 让最后一个字母在第70列上

【习题 3.1】 输入长度<70的任意字符串,让其最后一个字母在第70列上

  • 练习记录:
def right_justify(s):
	l=len(s)
	print(' '*(70-l)+s)
	
right_justify('monty')
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_1.py
                                                                 monty
  • 结果分析:合理使用字符串拼接(string concatenation)和重复;另外,Python提供了一个名叫 len 的内建函数,可以返回一个字符串的长度

习题3-2:在函数中调用另一个函数

函数对象是一个值,可以将它赋值给变量,或者作为其他函数实参传递,例如,do_twice 是一个函数,接收一个函数对象作为实参,并调用它两次:

def do_twice(f):
    f()
    f()
    

下面是一个使用 do_twice 来调用一个 print_spam 函数两次的示例:

def print_spam():
    print('spam')
    
do_twice(print_spam)

【习题 3.2.1】 将这个示例存入脚本并测试它

  • 练习记录:
def do_twice(f):
   f()
   f()
   
def print_spam():
   print('spam')
   
do_twice(print_spam)
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_2_1.py
spam
spam
  • 变形练习:
def do_twice(f, g):
    f()
    g()
	
def print_spam():
    print('spam')
	
def print_bread():
	print('bread')
	 
do_twice(print_spam, print_bread)
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_2_1.py
spam
bread
  • 结果分析:函数能以另一个(或者几个)函数作为实参
    【习题 3.2.2】 修改do_twice,使其接受两个实参,一个是函数对象,另一个是值;然后调用这一函数对象两次,将那个值传递给函数对象作为实参
def do_twice(f, s):
	f(s)
	f(s)
	
def print_s(s):
	print(s)
	
do_twice(print_s, 'bread')
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_2_2.py
bread
bread
  • 结果分析:被调用的函数有实参,那么调用时必须提供该实参,这里就是函数 f(s) 中的 s
  • 变形练习:
def do_twice(f, s, x):
	f(s, x)
	f(s, x)
	
def print_s(s, x):
	print(s + ' and ' + x)
	
do_twice(print_s, 'bread', 'spam')
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_2_2.py
bread and spam
bread and spam

【习题 3.2.4】 从本章前面一些的示例中,将 print_twice 函数的定义复制到脚本中;使用修改过的do_twice,调用print_twice两次,将’spam’传递给它作为实参

  • 练习记录:
def print_twice(s):
	print(s,end=' ')
	print(s)
	
def do_twice(f,s):
	f(s)
	f(s)

do_twice(print_twice, 'spam')
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_2_4.py
spam spam
spam spam

【习题 3.2.5】 定义一个名为do_four的新函数,其接受一个函数对象和一个值作为实参; 调用这个函数对象四次,将那个值作为形参传递给它; 函数体中应该只有两条语句,而不是四条

  • 练习记录:
#定义函数 print_spam 以供调用
def print_spam(x):
	print(x)

#定义函数 do_twice , 调用两次 print_spam 实现打印 x 两次
def do_twice(f,x):
	f(x)
	f(x)
		
#定义函数 do_four , 调用 do_twice 两次,实现打印 x 四次  
def do_four(f, x):
	do_twice(f, x)
	do_twice(f, x)

#执行 do_four(f, x)
do_four(print_spam, 'spam')
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_2_5.py
spam
spam
spam
spam
  • 结果分析:语句do_four(print_spam, 'spam') 把实参 print_spam 和 ‘spam’ 赋给函数 do_four , 函数 do_four 中 语句do_twice(f, x)把实参 print_spam 和 ‘spam’ 赋给函数 do_twice 两次 ,函数 do_twice 中语句 f(x)输入实参 print_spam 和 ‘spam’ 各打印 spam 两次

习题3-3:用函数画网格

【习题 3.3.1】 画2X2网格

  • 练习记录:
"""
print(str, end=""),下个打印语句不换行
"""
def print_xline_one():
	print("+---------",end="")
	
def print_xline_twice():
	print_xline_one()
	print_xline_one()
	
def print_xline():
	print_xline_twice()
	print("+")
	
def print_vline_one():
	print("|         |         |")
	
def print_vline_twice():
	print_vline_one()
	print_vline_one()

def print_vline():
	print_vline_twice()
	print_vline_twice()
	
def print_grid_one():
	print_xline()
	print_vline()

def print_grid_twice():
	print_grid_one()
	print_grid_one()
	
def print_grid_2():
	print_grid_twice()
	print_xline()
	
print_grid_2()
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_3_1.py
+---------+---------+
|         |         |
|         |         |
|         |         |
|         |         |
+---------+---------+
|         |         |
|         |         |
|         |         |
|         |         |
+---------+---------+

【习题 3.3.2】 画4X4网格

  • 练习记录:
"""
print(str, end=""),下个打印语句不换行
"""
def print_xline_one():
	print("+---------",end="")
	
def print_xline_twice():
	print_xline_one()
	print_xline_one()
	
def print_xline_four():
	print_xline_twice()
	print_xline_twice()
	
def print_xline():
	print_xline_four()
	print("+")
	
def print_vline_one():
	print("|         |         |         |         |")
	
def print_vline_twice():
	print_vline_one()
	print_vline_one()
	
def print_vline():
	print_vline_twice()
	print_vline_twice()

def print_grid_one():
	print_xline()
	print_vline()

def print_grid_twice():
	print_grid_one()
	print_grid_one()
	
def print_grid_four():
	print_grid_twice()
	print_grid_twice()
	
def print_grid_4():
	print_grid_four()
	print_xline()
	
print_grid_4()
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_3_2.py
+---------+---------+---------+---------+
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
+---------+---------+---------+---------+
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
+---------+---------+---------+---------+
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
+---------+---------+---------+---------+
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
|         |         |         |         |
+---------+---------+---------+---------+
  • 变形练习:
"""print(str, end=""),下个打印语句不换行
"""
def print_xline_one():
	print("+---------",end="")
	
def print_xline(x):
	for i in range(x):
		print_xline_one()
	
	print('+')
	
def print_vline_one():
	print("|         ",end=(''))
	

def print_vline(x):
	for i in range(x):
		print_vline_one()
	
	print('|')

def print_vlines(x):
	for i in range(4):
		print_vline(x)
		
		
def print_grid(x):
	print_xline(x)
	print_vlines(x)
		
def print_grid_x(x):
	for i in range(x):
		print_grid(x)
		
	print_xline(x)
	
print_grid_x(6)
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\3_3_3.py
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
+---------+---------+---------+---------+---------+---------+
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
|         |         |         |         |         |         |
+---------+---------+---------+---------+---------+---------+
  • 结果分析:print 函数执行后默认会自动换行,但是可以阻止这个行为,只需要像下面这样,print函数的参数以end=''结尾,如下例,输出结果未发生换行:
print('+', end='')
print('-')
+-

猜你喜欢

转载自blog.csdn.net/weixin_41217917/article/details/111059903