"""练习8-1 消息
编写一个名为display_message()的函数,它打印一个句子,
指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误 """
# 1.定义函数
def display_message(): # 定义函数
msg = "本章学的是函数" # 函数的动作
print(msg)
# 2.调用函数
display_message()
"""练习8-2 喜欢的图书
编写一个名为favorite_book()的函数,其中包含一个名为title的形参。
这个函数打印一条消息,如One of my favorite books is Alice in Wonderland。
调用这个函数,并将一本图书的名称作为实参传递给它 """
# 1.定义函数
def favorite_book(title): # 定义函数(写入形参)
print(title + " 是我最喜欢的书") # 函数的动作
# 2.调用函数(传入实参)
favorite_book('python编程从入门到实践')
"""练习8-3 T恤
编写一个名为make_shirt()的函数,它接受一个尺码以及要印到T恤上的字样。
这个函数应打印一个句子,概要地说明T恤衫的尺码和字样。
使用位置实参调用这个函数来制作一件T恤;再使用关键字实参来调用这个函数。"""
# 1.定义函数
def make_shirt(size, message): # 传入两给实个形参 函数(形参1,形参2)
print(f"\nI'm going to make a {size} t-shirt.") # 我要这一件()的 T 恤
print(f'It will say, "{message}"') # 要印上()
# 2.调用函数
make_shirt('large', 'I love Python!') # 按顺序传入两给实参(大号的,我爱蟒蛇)
# 3.使用位置实参调用这个函数
make_shirt(message="hello python.", size='medium') # 按关键字传入两给实参(你好python,中号)
"""练习8-4 大号T恤
1.修改函数make_shirt(),使其在默认情况下制作一件印有字样I love Python的大号T恤。
2.调用这个函数来制作如下T恤:一件印有默认字样的大号T恤、
3.一件印有默认字样的中号T恤、一件印有其他字样的T恤(尺码无关紧要)。"""
# 1.定义函数默认形参
def make_shirt(size='large', message='I love Python!'): # 传入两个默认的形参
"""指出要制作的T恤什么样。"""
print("\nI'm going to make a " + size + " t-shirt.")
print('It will say, "' + message + '"')
# 调用函数
make_shirt()
# 2.调用函数传入默认的实参
make_shirt(size='medium')
# 3.传入两个默认的实参(以传入的为准)
make_shirt('small', 'hello python.')
"""练习8-5 城市
编写一个名为describe_city()的函数,它接受一座城市的名字以及该城市所属的国家。
这个函数应打印一个简单的句子,如Reykjavik is in Iceland。
给用于存储国家的形参指定默认值。
为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家"""
# 1.定义函数
def describe_city(chen_shi, guo_jia='china'): # 定义函数并设置(城市,国家)两个形参,并把形参国家的默认值设为 china
"""描述城市。"""
msg = f"{chen_shi.title()} is in {guo_jia.title()}." # 城市在国家
print(msg) # 打印
# 2.调用函数
describe_city('shang hai') # 虽然只输入一个实参,但第二个参数有默认值
describe_city('liu yue', 'usa') # 虽然设定了默认参数,但还是以实参为准
describe_city('bei jing') # 虽然只输入一个实参,但第二个参数有默认值
"""练习8-6 城市名
1.编写一个名为city_country()的函数,它接受城市的名称及其所属的国家。
这个函数应返回一个格式类似于下面的字符串:
“Santiago, Chile”
2.至少使用三个城市-国家对调用这个函数,并打印它返回的值。"""
# 1.定义函数
def city_country(city, country): # 定义函数并设置(城市,国家)两个形参
"""返回一个类似于'Bei jin, China'的字符串。"""
return f"{city.title()}, {country.title()}" # 返回两个参数并首字母大写
# 2.调用函数接收返回结果
city = city_country('Bei jin', 'China') # 调用函数写入实参并用变量接收函数的结果
print(city)
city = city_country('Liu Yue', 'USA') # 调用函数写入实参并用变量接收函数的结果
print(city)
city = city_country('Lun Dun', 'English') # 调用函数写入实参并用变量接收函数的结果
print(city)
"""练习8-7 专辑
1.编写一个名为make_album()的函数,它创建一个描述音乐专辑的字典。
这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典。
2.使用这个函数创建三个表示不同专辑的字典,并打印每个返回的值,以核实字典正确地存储了专辑的信息。
3.给函数make_album()添加一个可选形参,以便能够存储专辑包含的歌曲数
。如果调用这个函数时指定了歌曲数,就将这个值添加到表示专辑的字典中
。调用这个函数,并至少在一次调用中指定专辑包含的歌曲数。"""
# 1.定义函数
def make_album(name, title, num=0): # 定义函数设置形参和默认参数(歌手,专辑名,可选形参数量)
"""创建一个包含专辑信息的字典。"""
album_dict = {
'name': name.title(),
'title': title.title()}
if num: # 如果传入了数量
album_dict['num'] = num # 在字典中增加数量的元素
return album_dict # 返回字典
# 2.调用返回一个包含这两项信息的字典
album = make_album('hui lin', 'python')
print(album)
album = make_album('chen si yuan', 'c++')
print(album)
# 3.调用指定专辑包含的歌曲数
album = make_album('chen si yu', 'c', num=8)
print(album)
"""练习8-8 用户的专辑
在为完成练习8-7编写的程序中,编写一个while循环,
4.让用户输入一个专辑的歌手和名称。获取这些信息后,
5.使用它们来调用函数make_album()并将创建的字典打印出来。
6.在这个while循环中,务必要提供退出途径。"""
# 1.定义函数
def make_album(name, title, num=0): # 定义函数设置形参和默认参数(歌手,专辑名,可选形参数量)
"""创建一个包含专辑信息的字典。"""
album_dict = {
'name': name.title(),
'title': title.title()}
if num: # 如果传入了数量
album_dict['num'] = num # 在字典中增加数量的元素
return album_dict # 返回字典
# 2.调用返回一个包含这两项信息的字典
album = make_album('hui lin', 'python')
print(album)
album = make_album('chen si yuan', 'c++')
print(album)
# 3.调用指定专辑包含的歌曲数
album = make_album('chen si yu', 'c', num=8)
print(album)
# 6.让用户知道如何退出。
print("\n随时输入 quit 时退出") # 随时输入 quit 时退出
# 生成提示语。
title_prompt = "\n你想要什么专辑: "
artist_prompt = "歌手是谁: "
while True: # 循环
# 4.让用户输入一个专辑的歌手和名称
title = input(title_prompt) # 请用户输入专辑名并赋值给变量
if title == 'quit': # 如果输入 quit
break # 就停止程序
name = input(artist_prompt) # 请用户输入歌手名并赋值给变量
if name == 'quit': # 如果输入 quit
break # 就停止程序
# 5.调用函数并将创建的字典打印出来
album = make_album(name, title) # 调用函数
print(album) # 打印
print("\nThanks for responding!") # 打印谢谢你的回复
"""练习8-9 魔术师
创建一个包含魔术师名字的列表,
将其传递给一个名为show_magicians()的函数
,这个函数打印列表中每个魔术师的名字。"""
# 1.定义函数
def show_magicians(magicians): # 写入形参
"""打印列表中每个魔术师的名字。"""
for magician in magicians: # 遍历列表
print(magician.title()) # 打印每个魔术师的名字
# 要在调用之前定义
magicians = ['chen si yuan', 'chen si yu', 'hui lin'] # 魔术师名字的列表
# 2.调用函数
show_magicians(magicians) # 列表作为实参传入
"""练习8-10 了不起的魔术师
在你为完成练习8-9而编写的程序中,
3.编写一个名为make_great()的函数,
4.对魔术师列表进行修改,在每个魔术师的名字中都加入字样the Great。
5.调用函数show_magicians(),确认魔术师列表确实变了。"""
# 1.定义函数
def show_magicians(magicians): # 写入形参
"""打印列表中每个魔术师的名字。"""
for magician in magicians: # 遍历列表
print(magician.title()) # 打印每个魔术师的名字
# 3.编写一个名为make_great()的函数
def make_great(magicians):
# 新建一个列表,用于存储修改后的魔术师名字。
great_magicians = []
# 在每个魔术师的名字中都加入字样the Great,并将其添加到great_magicians中。
while magicians: # 无限循环
magician = magicians.pop() # 删除列表最后魔术师的名字
great_magician = magician + ' the Great' # 魔术师的名字中都加入字样the Great
great_magicians.append(great_magician) # 列表最后添加魔术师的新名字
# 将修改后的名字放回到列表magicians中。
for name in great_magicians:
magicians.append(name)
# 要在调用之前定义
magicians = ['chen si yuan', 'chen si yu', 'hui lin'] # 魔术师名字的列表
# 2.调用函数
print("原来的魔术师名字的列表")
show_magicians(magicians) # 列表作为实参传入
print("*"*50)
# 4。调用函数对魔术师列表进行修改
make_great(magicians)
# 5.调用函数show_magicians(),确认魔术师列表确实变了。"""
print("改变后魔术师名字的列表")
show_magicians(magicians)
"""练习8-11 不变的魔术师
修改你为完成练习8-10而编写的程序,在调用函数make_great()时,
5.向它传递魔术师列表的拷贝。
6.由于不想修改原始列表,请返回修改后的列表,并将其存储到另一个列表中。
7.分别使用这两个列表来调用show_magicians(),
确认一个列表包含的是原来的魔术师名字,而另一个列表包含的是添加了the Great字样的魔术师名字。"""
# 1.定义函数
def show_magicians(magicians): # 写入形参
"""打印列表中每个魔术师的名字。"""
for magician in magicians: # 遍历列表
print(magician.title()) # 打印每个魔术师的名字
# 3.编写一个名为make_great()的函数
def make_great(magicians):
# 新建一个列表,用于存储修改后的魔术师名字。
great_magicians = []
# 在每个魔术师的名字中都加入字样the Great,并将其添加到great_magicians中。
while magicians: # 无限循环
magician = magicians.pop() # 删除列表最后魔术师的名字
great_magician = magician + ' the Great' # 魔术师的名字中都加入字样the Great
great_magicians.append(great_magician) # 列表最后添加魔术师的新名字
# 将修改后的名字放回到列表magicians中。
for name in great_magicians:
magicians.append(name)
# 6
return magicians # 返回更改后的列表
# 要在调用之前定义
magicians = ['chen si yuan', 'chen si yu', 'hui lin'] # 魔术师名字的列表
# 2.调用函数
print("原始的魔术师名字的列表")
show_magicians(magicians) # 列表作为实参传入
print("*"*50)
# 调用函数对魔术师列表进行修改(传入的是副本)
print("调用函数改变魔术师名字的列表")
# 5.向它传递魔术师列表的拷贝。
great_magicians = make_great(magicians[:]) # 变量接收更改后的列表
show_magicians(great_magicians) # 虽然更改了但只是副本
print("*"*50)
# 7
print("看看魔术师名字的列表变了没")
show_magicians(magicians) # 原始的魔术师列表没变
"""练习8-12 三明治
编写一个函数,它接受顾客要在三明治中添加的一系列食材。
这个函数只有一个形参(它收集函数调用中提供的所有食材)
,并打印一条消息,对顾客点的三明治进行概述。调用这个函数三次,每次都提供不同数量的实参。"""
def make_sandwich(*items): # 定义函数写入不定长形参:制作三明治(‘不定长形参’产品)
"""使用指定的食材制作三明治。"""
print("\n我给你做个很棒的三明治:")
for item in items: # 遍历列表
print(f" ...正在制作你的 {item} 三明治")
print("你的三明治做好了!")
make_sandwich('牛肉', '奶酪', '生菜','蜂蜜')
make_sandwich('鸡肉', '菠菜', '番茄')
make_sandwich('羊肉', '鸭肉')
"""练习8-14 汽车
编写一个函数,将一辆汽车的信息存储在一个字典中。
这个函数总是接受制造商和型号,还接受任意数量的关键字实参。
这样调用这个函数:提供必不可少的信息,还有两个名称-值对,如颜色和选装配件。
这个函数必须能够像下面这样进行调用:
car = make_car('subaru', 'outback', color='blue', tow_package=True)"""
def make_car(manufacturer, model, **options): # 定义函数写入形参:制作汽车(品牌,产地,‘选择是不定长形参’)
"""创建一个表示汽车的字典。"""
car_dict = {'manufacturer': manufacturer.title(), # 设置品牌,产地两个键值对并首字母大写
'model': model.title(),}
for option, value in options.items(): # 临时键和值在不定长形参里面循环
car_dict[option] = value # 再把不定长形参的键和值添加到字典
return car_dict # 返回制作汽车
my_outback = make_car('subaru', 'outback', color='blue',
tow_package=True) # 因为不定长形参是个字典所以要传键值对
print(my_outback) # 打印结果
my_old_accord = make_car('honda', 'accord', year=1991,
color='white', weight='1.5T') # 因为是不定长形参所以不限键值对的数量
print(my_old_accord) # 打印结果
"""练习8-15 打印模型
把此文件命名为printing_models并保存"""
def print_models(unprinted_designs, completed_models):
"""
模拟打印每个设计,直到没有未打印的设计为止。
打印每个设计后,都将其移到列表completed_models中。
"""
while unprinted_designs:
current_design = unprinted_designs.pop()
# 模拟根据设计制作3D打印模型的过程。
print("Printing model: " + current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
"""显示打印好的所有模型。"""
print("\nThe following models have been printed:")
for completed_model in completed_models:
print(completed_model)
# unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
# completed_models = []
# print_models(unprinted_designs, completed_models)
# show_completed_models(completed_models)
"""练习8-15 打印模型
就是在这个文件里把上面一个printing_models文件导入进来直接用"""
import printing_models as pf # 导入printing_models模块起个pf的别名
unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron'] # 准备打印模型列表
completed_models = [] # 打印好后存放的列表
pf.print_models(unprinted_designs, completed_models) # 调用函数
pf.show_completed_models(completed_models) # 调用函数
"""练习8-16 导入
导入模块调用函数的几种方法"""
import module # 导入module模块
from module import aaa # 导入module模块中的aaa函数
from module import aaa as a # 导入module模块中的aaa函数起个别名
import module as a # 导入module模块并起个别名
from module import* # 导入模块里面全部函数