《Think Python》练习 3-1、3-2

这篇博客介绍了Python中的函数应用,包括如何编写一个右对齐字符串的函数right_justify,使得字符串最后一个字符位于第70列。此外,还讨论了在函数中如何调用另一个函数,给出了do_twice函数的例子,该函数可以接受一个函数对象和一个值,然后调用该函数两次。最后,提出了do_four函数的概念,它通过调用do_twice两次来实现传入函数的四次执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第3章 函数

练习 3-1:输入长度<70的任意字符串,让其最后一个字母在第70列上

【习题 3.1.1】 编写一个函数 right_justify,接收一个字符串形参 s,并打印出足够的前导空白,以达到最后一个字符显示在第70列上。

>>> right_justify('monty')
                                                                 monty

提示:可以利用字符串的拼接和重复特性。另外,Python提供了一个内置名为 len 的函数,返回一个字符串的长度,所以 len(‘allen’) 的值是5。
【求解】
先计算s的长度l,前导空白=空格*(70-l):

>>> def right_justify(s):
...     l = len(s)
...     print(' '*(70-l)+s)
... 
>>> right_justify('monty')
                                                                 monty

将len(s)带入l,还能更剪短点:

>>> def right_justify(s):
...     print(' '*(70-len(s))+s)
... 
>>> right_justify('monty')
                                                                 monty

练习 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)

运行结果:

spam
spam

【习题 3.2.2】 修改 do_twice,让他接收两个实参,一个是函数对象,另一个是一个值,它会调用函数对象两次,并传入那个值作为实参。
【求解】 这让我想起了代数 y=g(f(x),x)
代码:

def do_twice(f,x):
    f(x)
    f(x)
	
def print_spam(x):
    print(x)
    
do_twice(print_spam,'spam')

运行结果:

spam
spam

【习题 3.2.3】 将本章前面介绍的函数 print_twice 的定义复制到你的脚本中。
【求解】

def print_twice(bruce):
	print(bruce)
	print(bruce)

【习题 3.2.4】 使用修改版的 do_twice 来调用 print_twice 两次,并传入实参 ‘spam’。
【求解】
代码:

def do_twice(f,x):
    f(x)
    f(x)
	
def print_twice(bruce):
	print(bruce)
	print(bruce)
    
do_twice(print_twice,'spam')

运行结果:

spam
spam
spam
spam

【习题 3.2.4】 定义一个新的函数 do_four,接收一个函数对象与一个值,使用这个值作为实参调用函数4次。这个函数的函数体应该只有2条语句,而不是4条。
【求解】 在 do_four 里调用 do_twice 两次,从而实现调用实参函数4次(2×2)
代码:

#执行函数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)
	
#定义最终被调用的函数	
def print_spam(x):
    print(x)

#执行将'spam'打印四次
do_four(print_spam,'spam')

执行结果:

spam
spam
spam
spam
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值