Python编程从入门到实践 第八章:函数 练习答案记录
练习题导航
8.1 定义函数
8.1.1 向函数传递信息
8.1.2 实参和形参
练习8-1 消息 : 编写一个名为display_message() 的函数, 它打印一个句子, 指出你在本章学的是什么。调用这个函数, 确认显示的消息正确无误
def display_message():
print("aa")
display_message()
练习8-2 喜欢的图书 : 编写一个名为favorite_book() 的函数, 其中包含一个名为title 的形参。 这个函数打印一条消息,如One of my favorite books isAlice in Wonderland 。 调用这个函数, 并将一本图书的名称作为实参传递给它。
def favorite_book(title):
print(f"One of my favorite books {title} in Wonderland")
favorite_book('a')
8.2 传递实参
8.2.1 位置实参
8.2.2 关键字实参
8.2.3 默认值
8.2.4 等效的函数调用
8.2.5 避免实参错误
练习8-3 T恤 : 编写一个名为make_shirt() 的函数, 它接受一个尺码以及要印到T恤上的字样。
这个函数应打印一个句子, 概要地说明T恤的尺码和字样。
使用位置实参调用这个函数来制作一件T恤; 再使用关键字实参来调用这个函数。
def make_shirt(chima,T_str):
print(f"T恤的尺码:{chima} 字样:{T_str}")
make_shirt(11,'a')
make_shirt(chima=11,T_str='b')
make_shirt(T_str='c',chima=111)
练习8-4 大号T恤 : 修改函数make_shirt() , 使其在默认情况下制作一件印有字样“I love Python”的大号T恤。
调用这个函数来制作如下T恤: 一件印有默认字样的大号T恤、 一件印有默认字样的中号T恤和一件印有其他字样的T恤(尺码无关紧要) 。
def make_shirt(chima,T_str='I love Python'):
print(f"T恤的尺码:{chima} 字样:{T_str}")
make_shirt(11)
make_shirt(chima=11,T_str='b')
make_shirt(T_str='c',chima=111)
练习8-5 城市 : 编写一个名为describe_city() 的函数, 它接受一座城市的名字以及该城市所属的国家。
这个函数应打印一个简单的句子, 如Reykjavik is in Iceland 。 给用于存储国家的形参指定默认值。
为三座不同的城市调用这个函数, 且其中至少有一座城市不属于默认国家。
def describe_city(city='Reykjavik is in Iceland'):
print(city)
describe_city()
describe_city('aaa')
8.3 返回值
8.3.1 返回简单值
8.3.2 让实参变成可选的
8.3.3 返回字典
8.3.4 结合使用函数和while循环
练习8-6 城市名 : 编写一个名为city_country() 的函数, 它接受城市的名称及其所属的国家。
这个函数应返回一个格式类似于下面这样的字符串:“Santiago, Chile”
至少使用三个城市-国家对调用这个函数, 并打印它返回的值
def city_country(name,country):
return f"{name},{country}"
hold='yes'
city_countrys=[]
while hold=='yes':
name=input("城市的名称:")
country=input("所属国家:")
city_countrys.append(city_country(name,country))
hold=input("是否继续输入:\'yes or no\'")
for cc in city_countrys:
print(cc)
练习8-7 专辑 : 编写一个名为make_album() 的函数, 它创建一个描述音乐专辑的字典。
这个函数应接受歌手的名字和专辑名, 并返回一个包含这两项信息的字典。 使用这个函数创建三个表示不同专辑的字典, 并打印每个返回的值,
以核实字典正确地存储了专辑的信息。给函数make_album() 添加一个可选形参,以便能够存储专辑包含的歌曲数。
如果调用这个函数时指定了歌曲数, 就将这个值添加到表示专辑的字典中。 调用这个函数, 并至少在一次调用中指定专辑包含的歌曲数。
def make_album(people_name,music_name,music_digit=0):
information = {}
information[people_name]=music_name
if music_digit!=0:
information['digit']=music_digit
return information
print(make_album('a','b'))
print(make_album('c','d'))
print(make_album('m','n',10))
练习8-8 用户的专辑 : 在为完成练习8-7编写的程序中, 编写一个while 循环, 让用户输入一个专辑的歌手和名称。
获取这些信息后, 使用它们来调用函数make_album() , 并将创建的字典打印出来。 在这个while 循环中, 务必要提供退出途径。
def make_album(people_name,music_name,music_digit=0):
information = {}
information[people_name]=music_name
if music_digit!=0:
information['digit']=music_digit
return information
ct='y'
while ct=='y':
people_name=input("输入歌手名字:")
music_name=input("输入歌曲名字:")
print(make_album(people_name,music_name))
ct=input("是否继续:\'y or n\'")
8.4 传递列表
8.4.1 在函数中修改列表
8.4.2 禁止函数修改列表
练习8-9 魔术师 : 创建一个包含魔术师名字的列表, 并将其传递给一个名为show_magicians() 的函数, 这个函数打印列表中每个魔术师的名字。
def show_magicians(name):
for a in name:
print(a)
name=['a','b']
show_magicians(name)
练习8-10 了不起的魔术师 : 在你为完成练习8-9而编写的程序中, 编写一个名为make_great() 的函数,对魔术师列表进行修改, 在每个魔术师的名字中都加入字样“theGreat”。 调用函数show_magicians() , 确认魔术师列表确实变了。
8-11 不变的魔术师 : 修改你为完成练习8-10而编写的程序, 在调用函数make_great() 时, 向它传递魔术师列表的副本。
由于不想修改原始列表, 请返回修改后的列表, 并将其存储到另一个列表中。 分别使用这两个列表来调用show_magicians() ,
确认一个列表包含的是原来的魔术师名字, 而另一个列表包含的是添加了字样“the Great”的魔术师名字。
"""
def show_magicians(name):
for a in name:
print(a)
def make_great(lt):
while lt:
name_change.append(lt.pop()+" the Great")
name=['a','b']
name_change=[]
make_great(name)
show_magicians(name)
show_magicians(name_change)
练习8-11 不变的魔术师 : 修改你为完成练习8-10而编写的程序, 在调用函数make_great() 时, 向它传递魔术师列表的副本。
由于不想修改原始列表, 请返回修改后的列表, 并将其存储到另一个列表中。 分别使用这两个列表来调用show_magicians() , 确认一个列表包含的是原来的魔术师名字, 而另一个列表包含的是添加了字样“the Great”的魔术师名字。
def show_magicians(name):
for a in name:
print(a)
def make_great(lt):
while lt:
name_change.append(lt.pop()+" the Great")
name=['a','b']
name_change=[]
make_great(name[:])
show_magicians(name)
show_magicians(name_change)
8.5 传递任意数量实参
8.5.1 结合使用位置实参和任意数量实参
8.5.2 使用任意数量的关键字实参
练习8-12 三明治 : 编写一个函数, 它接受顾客要在三明治中添加的一系列食材。 这个函数只有一个形参(它收集函数调用中提供的所有食材) ,并打印一条消息, 对顾客点的三明治进行概述。 调用这个函数三次, 每次都提供不同数量的实参。
def sandswith_food(food):
for n,m in food.items():
print(f"{n}:{m}")
food={
'aaa':'Az'
}
sandswith_food(food)
练习8-13 用户简介 : 复制前面的程序user_profile.py, 在其中调用build_profile() 来创建有关你的简介;调用这个函数时, 指定你的名和姓, 以及三个描述你的键-值对。
def build_profile(first,last,**user_info):
user_info['first_name']=first
user_info['last_name']=last
return user_info
user_profile=build_profile('liu','yi zheng',location='princeton',field='physics')
print(user_profile)
练习8-14:汽车 编写一个函数,将一辆汽车的信息存储在字典中。
这个函数总是接受制造商和型号,还接受任意数量的关键字实参。 这样调用该函数:提供必不可少的信息,以及两个名称值对,如颜色和选装配件。
这个函数必须能够像下面这样进行调用:
car=make_car(‘subaru’,‘outback’,color=‘blue’,tow_package=True)
打印返回的字典,确认正确地处理了所有的信息
def make_car(creat,byts,**car):
car['a']=creat
car['b']=byts
return car
car=make_car('subaru','outback',color='blue',tow_package=True)
print(car)
8.6 将函数存储在模块中
8.6.1 导入整个模块
8.6.2 导入特定的函数
8.6.3 使用as给函数指定别名
8.6.4 使用as给模块指定别名
8.6.5 导入模块中的所有函数
8.7 函数编写指南
练习8-15:打印模型 将示例printing_models.py中的函数放在一个名为printing_functions.py的文件中。在printing_models.py的开头编写一条import语句,并修改该文件以使用导入的函数
主函数
import printing_functions
模块中
unprited_designs=['phone case','robot pendant','dodecahedron']
completed_models=[]
while unprited_designs:
current_design=unprited_designs.pop()
print(f"Printing model:{current_design}")
completed_models.append(current_design)
print("\nThe following models have been printed:")
for completed_model in completed_models:
print(completed_model)
输出
练习8-16:导入 选择一个你编写的且只包含一个函数的程序,将该函数放在另一个文件中。在主程序文件中,使用下述各种方法导入这个函数,再调用它
import module_name
from module_name import function_name
from module_name import function_name as fn
import module_name as mn from
module_name import *
子函数
def function_name(first_name,last_name,**digit):
digit['first_name']=first_name
digit['last_name']=last_name
return digit
主函数
1、import module_name
import module_name
print(module_name.function_name('yuan','lin',city='Bei jin'))
2、from module_name import function_name
from module_name import function_name
print(function_name('yuan','lin',city='Bei jin'))
3、from module_name import function_name as fn
from module_name import function_name as fn
print(fn('yuan','lin',city='Bei jin'))
4、import module_name as mn from
import module_name as mn
print(mn.function_name('yuan','lin',city='Bei jin'))
5、module_name import *
from module_name import *
print(function_name('yuan','lin',city='Bei jin'))
练习8-17:函数编写指南 选择你在本章中编写的三个程序,确保它们遵循了本节介绍的函数编写指南。
略