8-1 消息 : 编写一个名为display_message() 的函数, 它打印一个句子, 指出你在本章学的是什么。 调用这个函数, 确认显示的消息正确无误。
def display_message():
print("In this chapter, we will learn function of Python.")
display_message()
结果:
In this chapter, we will learn function of Python.
8-2 喜欢的图书 : 编写一个名为favorite_book() 的函数, 其中包含一个名为title 的形参。 这个函数打印一条消息, 如One of my favorite books is Alice in Wonderland 。 调用这个函数, 并将一本图书的名称作为实参传递给它。
def favorite_book(title):
print("One of my favourite books is " + title + '.')
favorite_book("Alice in Wonderland")
结果:
One of my favourite books is Alice in Wonderland.
8-3 T
恤 : 编写一个名为
make_shirt()
的函数, 它接受一个尺码以及要印到
T
恤上的字样。 这个函数应打印一个句子, 概要地说明
T
恤的尺码和字样。使用位置实参调用这个函数来制作一件 T 恤; 再使用关键字实参来调用这个函数。
def make_shirt(size, letter):
print("\nHere is the information of your T-shirt.")
print("Size: " + size)
print("Letter: " + letter)
make_shirt('M', "I'm Chinese")
make_shirt(letter = "I'm Chinese", size = 'M')
结果:
Here is the information of your T-shirt.
Size: M
Letter: I'm Chinese
Here is the information of your T-shirt.
Size: M
Letter: I'm Chinese
8-4 大号T恤 : 修改函数make_shirt() , 使其在默认情况下制作一件印有字样“I love Python”的大号T恤。 调用这个函数来制作如下T恤:
一件印有默认字样的大号T恤、一件印有默认字样的中号T恤和一件印有其他字样的T恤(尺码无关紧要) 。
def make_shirt(size='L', letter='I love Python'):
print("\nHere is the information of your T-shirt.")
print("Size: " + size)
print("Letter: " + letter)
make_shirt()
make_shirt('M')
make_shirt(letter="I'm Chinese")
结果:
Here is the information of your T-shirt.
Size: L
Letter: I love Python
Here is the information of your T-shirt.
Size: M
Letter: I love Python
Here is the information of your T-shirt.
Size: L
Letter: I'm Chinese
8-5
城市 : 编写一个名为
describe_city()
的函数, 它接受一座城市的名字以及该城市所属的国家。 这个函数应打印一个简单的句子, 如
Reykjavik is in Iceland
。 给用于存储国家的形参指定默认值。 为三座不同的城市调用这个函数, 且其中至少有一座城市不属于默认国家。
def describe_city(city, country='China'):
print(city + " is in " + country + '.')
describe_city('Guangzhou')
describe_city('Shanghai')
describe_city('London', 'UK')
结果:
Guangzhou is in China.
Shanghai is in China.
London is in UK.
8-6
城市名 : 编写一个名为
city_country()
的函数, 它接受城市的名称及其所属的国家。 这个函数应返回一个格式类似于下面这样的字符串:
"Santiago, Chile"至少使用三个城市-国家对调用这个函数, 并打印它返回的值。
def city_country(city, country):
return city + ", " + country
print(city_country("Shanghai", "China"))
print(city_country("Tokyo", "Japan"))
print(city_country("London", "UK"))
结果
Shanghai, China
Tokyo, Japan
London, UK
8-7 专辑 : 编写一个名为make_album() 的函数, 它创建一个描述音乐专辑的字典。 这个函数应接受歌手的名字和专辑名, 并返回一个包含这两项信息的字典。 使用这个函数创建三个表示不同专辑的字典, 并打印每个返回的值, 以核实字典正确地存储了专辑的信息。给函数make_album() 添加一个可选形参, 以便能够存储专辑包含的歌曲数。 如果调用这个函数时指定了歌曲数, 就将这个值添加到表示专辑的字典中。 调用这个函数, 并至少在一次调用中指定专辑包含的歌曲数。
def make_album(singer, title, songs=0):
if songs == 0:
return {"Singer": singer, "Title": title}
else:
return {"Singer": singer, "Title": title, "Songs": songs}
print(make_album("Ariana Grande/Zedd", "Break Free"))
print(make_album("Jay Chou", "等你下课", 1))
print(make_album("Jessie J", "Domino", 1))
结果:
{'Singer': 'Ariana Grande/Zedd', 'Title': 'Break Free'}
{'Singer': 'Jay Chou', 'Title': '等你下课', 'Songs': 1}
{'Singer': 'Jessie J', 'Title': 'Domino', 'Songs': 1}
8-8 用户的专辑 : 在为完成练习 8-7 编写的程序中, 编写一个 while 循环, 让用户输入一个专辑的歌手和名称。 获取这些信息后, 使用它们来调用函数 make_album() , 并将创建的字典打印出来。 在这个 while 循环中, 务必要提供退出途径。
def make_album(singer, title, songs=0):
if songs == 0:
return {"Singer": singer, "Title": title}
else:
return {"Singer": singer, "Title": title, "Songs": songs}
print(make_album("Ariana Grande/Zedd", "Break Free"))
print(make_album("Jay Chou", "等你下课", 1))
print(make_album("Jessie J", "Domino", 1))
while True:
singer = input("Please enter singer's name: ")
album = input("Please enter the album's name: ")
print(make_album(singer, album))
ask = input("Do you still want to continue? (yes/no) ")
if ask == "no":
break
结果:
{'Singer': 'Ariana Grande/Zedd', 'Title': 'Break Free'}
{'Singer': 'Jay Chou', 'Title': '等你下课', 'Songs': 1}
{'Singer': 'Jessie J', 'Title': 'Domino', 'Songs': 1}
Please enter singer's name: Jessie J
Please enter the album's name: Alive
{'Singer': 'Jessie J', 'Title': 'Alive'}
Do you still want to continue? (yes/no) no
8-9 魔术师 : 创建一个包含魔术师名字的列表, 并将其传递给一个名为show_magicians() 的函数, 这个函数打印列表中每个魔术师的名字。
def show_magicians(magicians):
for magician in magicians:
print(magician)
magicians = ['Alice', 'Bob', 'David']
show_magicians(magicians)
结果:
Alice
Bob
David
8-10 了不起的魔术师 : 在你为完成练习8-9而编写的程序中, 编写一个名为make_great() 的函数, 对魔术师列表进行修改, 在每个魔术师的名字中都加入字样“the Great”。 调用函数show_magicians() , 确认魔术师列表确实变了。
def show_magicians(magicians):
for magician in magicians:
print(magician)
def make_great(magicians):
#直接使用for循环不能修改里面的值
i = 0
while magicians[i] != magicians[-1]:
magicians[i] = 'the Great ' + magicians[i]
i += 1
magicians[-1] = 'the Great ' + magicians[-1]
magicians = ['Alice', 'Bob', 'David']
make_great(magicians)
show_magicians(magicians)
结果:
the Great Alice
the Great Bob
the Great David
8-11 不变的魔术师 : 修改你为完成练习 8-10 而编写的程序, 在调用函数 make_great() 时, 向它传递魔术师列表的副本。 由于不想修改原始列表, 请返回修改后的列表, 并将其存储到另一个列表中。 分别使用这两个列表来调用 show_magicians() , 确认一个列表包含的是原来的魔术师名字, 而另一个列表包含的是添加了字样 “the Great” 的魔术师名字。
def show_magicians(magicians):
for magician in magicians:
print(magician)
def make_great(magicians):
#直接使用for循环不能修改里面的值
i = 0
while magicians[i] != magicians[-1]:
magicians[i] = 'the Great ' + magicians[i]
i += 1
magicians[-1] = 'the Great ' + magicians[-1]
return magicians
magicians = ['Alice', 'Bob', 'David']
changed_magicians = make_great(magicians[:])
show_magicians(changed_magicians)
show_magicians(magicians)
结果:
the Great Alice
the Great Bob
the Great David
Alice
Bob
David
8-12 三明治 : 编写一个函数, 它接受顾客要在三明治中添加的一系列食材。 这个函数只有一个形参(它收集函数调用中提供的所有食材) , 并打印一条消息, 对顾客点的三明治进行概述。 调用这个函数三次, 每次都提供不同数量的实参。
def make_sandwich(*foods):
print("\nMake a sandwich with the following foods")
for food in foods:
print("- " + food)
make_sandwich('tuna')
make_sandwich('tomatoes', 'lecture', 'roast chicken')
make_sandwich('egg', 'butter')
结果:
Make a sandwich with the following foods
- tuna
Make a sandwich with the following foods
- tomatoes
- lecture
- roast chicken
Make a sandwich with the following foods
- egg
- butter
8-13 用户简介 : 复制前面的程序user_profile.py, 在其中调用build_profile() 来创建有关你的简介; 调用这个函数时, 指定你的名和姓, 以及三个描述你的键-值对。
def build_profile(first, last, **user_info):
"""创建一个字典, 其中包含我们知道的有关用户的一切"""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
my_profile = build_profile('Toffc', 'Chan', age = 60, weight = '60kg', height = '170 cm')
print(my_profile)
结果:
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
{'first_name': 'Toffc', 'last_name': 'Chan', 'age': 60, 'weight': '60kg', 'height': '170 cm'}
8-14 汽车 : 编写一个函数, 将一辆汽车的信息存储在一个字典中。 这个函数总是接受制造商和型号, 还接受任意数量的关键字实参。 这样调用这个函数: 提供必不可少的信息, 以及两个名称 — 值对, 如颜色和选装配件。 这个函数必须能够像下面这样进行调用:
car = make_car('subaru', 'outback', color='blue', tow_package=True)
打印返回的字典, 确认正确地处理了所有的信息。
def make_car(manufacture, type, **others):
car = {}
car['manufacture'] = manufacture
car['type'] = type
for key, value in others.items():
car[key] = value
return car
my_car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(my_car)
结果:
{'manufacture': 'subaru', 'type': 'outback', 'color': 'blue', 'tow_package': True}
8-15 打印模型 : 将示例print_models.py中的函数放在另一个名为printing_functions.py的文件中; 在print_models.py的开头编写一条import 语句, 并修改这个文件以使用导入的函数。
printing_functions.py
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)
print_models.py
import printing_functions
unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
completed_models = []
printing_functions.print_models(unprinted_designs, completed_models)
printing_functions.show_completed_models(completed_models)
结果:
Printing model: iphone case
The following models have been printed:
iphone case
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 *
hello.py
def hello_world():
print("Hello world!")
5ways.py
import hello
hello.hello_world()
from hello import hello_world
hello_world()
from hello import hello_world as say_hello_world
say_hello_world()
import hello as greeting
greeting.hello_world()
from hello import *
hello_world()
结果:
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!