第八章主要是继续介绍Python中的函数,内容相对之前的章节复杂一点点
8-1 消息
编写一个名为
display_message()
的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。
def display_message():
print("Let's learn function in Python!")
display_message()
#输出 Let's learn function in Python!
8-2 喜欢的图书
编写一个名为
favorite_book()
的函数,其中包含一个名为title
的形参。这个函数打印一条消息,如One of my favorite books is Alice in Wonderland
。调用这个函数,并将一本图书的名称作为实参传递给它。
def favorite_book(title):
print("The book I borrowed is " + title + ".")
favorite_book("Alice in Wonderland")
#输出 The book I borrowed is Alice in Wonderland.
8-3 T恤
编写一个名为
make_shirt()
的函数,它接受一个尺码以及要印到T恤上的字样。这个函数应打印一个句子,概要地说明T恤的尺码和字样。 使用位置实参调用这个函数来制作一件T恤;再使用关键字实参来调用这个函数。
def make_shirt(size, type):
print("The shirt I made is " + type + " and the size is " + size + ".")
make_shirt("M", "Rag")
make_shirt(type = "School-style", size = "L")
#输出
#The shirt I made is Rag and the size is M.
#The shirt I made is School-style and the size is L.
8-4 大号T恤
修改函数
make_shirt()
,使其在默认情况下制作一件印有字样“I love Python”的大号T恤。调用这个函数来制作如下T恤:一件印有默认字样的大号T 恤、一件印有默认字样的中号T恤和一件印有其他字样的T恤(尺码无关紧要)。
def make_shirt(size = "M", slogan = "I love C++"):
print("The slogan shirt I made is " + slogan + " and the size is " + size + ".")
make_shirt("L", "I love Python")
make_shirt("L")
make_shirt()
#输出
#The slogan shirt I made is I love Python and the size is L.
#The slogan shirt I made is I love C++ and the size is L.
#The slogan shirt I made is I love C++ and the size is M.
8-5 城市
编写一个名为
describe_city()
的函数,它接受一座城市的名字以及该城市所属的国家。这个函数应打印一个简单的句子,如Reykjavik is in Iceland
。给用于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家。
def describe_city(city = "Guangzhou"):
if city == "Guangzhou":
print(city + " is in China")
elif city == "New York":
print(city + " is in America")
else:
print(city + " is in Japan")
describe_city()
describe_city("New York")
describe_city("Tokyo")
#输出
#Guangzhou is in China
#New York is in America
#Tokyo is in Japan
8-6 城市名
编写一个名为
city_country()
的函数,它接受城市的名称及其所属的国家。这个函数应返回一个格式类似于下面这样的字符串:"Santiago, Chile"
def city_country(city = "Guangzhou"):
if city == "Guangzhou":
print(city + ", China")
elif city == "New York":
print(city + ", America")
else:
print(city + ", Japan")
city_country("Guangzhou")
#输出 Guangzhou, China
8-7 专辑
编写一个名为
make_album()
的函数,它创建一个描述音乐专辑的字典。这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典。使用这个函数创建三个表示不同专辑的字典,并打印每个返回的值,以核实字典正确地存储了专辑的信息。 给函数make_album()
添加一个可选形参,以便能够存储专辑包含的歌曲数。如果调用这个函数时指定了歌曲数,就将这个值添加到表示专辑的字典中。调用这个函数,并至少在一次调用中指定专辑包含的歌曲数。
def make_album(singer, aname, num = -1):
album = {}
album["singer"] = singer
album["album_name"] = aname
if num != -1:
album["song_num"] = num
return album
print(make_album("Taylor Swift", "Red"))
print(make_album("Taylor Swift", "Red", 14))
#输出
#{'singer': 'Taylor Swift', 'album_name': 'Red'}
#{'singer': 'Taylor Swift', 'album_name': 'Red', 'song_num': 14}
8-8 用户的专辑
在为完成练习
8-7
编写的程序中,编写一个while
循环,让用户输入一个专辑的歌手和名称。获取这些信息后,使用它们来调用函 数make_album()
,并将创建的字典打印出来。在这个while
循环中,务必要提供退出途径。
def make_album(singer, aname, num = -1):
album = {}
album["singer"] = singer
album["album_name"] = aname
if num != -1:
album["song_num"] = num
return album
while True:
string1 = input("Enter the artist, or press 'Q' to quit: ")
if string1 == 'Q':
break;
string2 = input("Enter the album name: ")
num = int(input("Enter the song number, or 0 to skip: "))
if num == 0:
print(make_album(string1, string2))
else:
print(make_album(string1, string2, num))
#Enter the artist, or press 'Q' to quit: Taylor Swift
#Enter the album name: Red
#Enter the song number, or 0 to skip: 0
#{'singer': 'Taylor Swift', 'album_name': 'Red'}
#Enter the artist, or press 'Q' to quit: Taylor Swift
#Enter the album name: Red
#Enter the song number, or 0 to skip: 14
#{'singer': 'Taylor Swift', 'album_name': 'Red', 'song_num': 14}
#Enter the artist, or press 'Q' to quit: Q
#Press any key to continue . . .
8-9 魔术师
创建一个包含魔术师名字的列表,并将其传递给一个名为
show_magicians()
的函数,这个函数打印列表中每个魔术师的名字。
def show_magicians(magicians):
for magician in magicians:
print(magician, end = " ")
magician = ['JP', 'JJ', 'PP']
show_magicians(magician)
#输出
#JP JJ PP
8-10 了不起的魔术师
在你为完成练习
8-9
而编写的程序中,编写一个名为make_great()
的函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样“the Great”
。调用函数show_magicians()
,确认魔术师列表确实变了。
def make_great(magicians):
for magician in magicians:
magician = "the great " + magician
magicians = ['JP', 'JJ', 'PP']
make_great(magicians)
show_magicians(magicians)
它的输出是 JP JJ PP,居然没有任何变化,我惊了
def show_magicians(magicians):
for magician in magicians:
print(magician.title())
def make_great(magicians):
for i in range(0,len(magicians)):
magicians[i] = "the great " + magicians[i]
magicians = ['JP', 'JJ', 'PP']
make_great(magicians)
show_magicians(magicians)
#输出
#The Great Jp
#The Great Jj
#The Great Pp
注意:
- 如果要改变列表内容,需要用下标访问的方式
title()
方法是对句子的每一个单词都首字母大写的
8-11 不变的魔术师
修改你为完成练习
8-10
而编写的程序,在调用函数make_great()
时,向它传递魔术师列表的副本。由于不想修改原始列表,请返回修改后的 列表,并将其存储到另一个列表中。分别使用这两个列表来调用show_magicians()
,确认一个列表包含的是原来的魔术师名字,而另一个列表包含的是添加了字 样“the Great”
的魔术师名字。
def show_magicians(magicians):
print("After change: ", end = "")
print(magicians)
def make_great(magicians):
for i in range(0,len(magicians)):
magicians[i] = "the great " + magicians[i]
print("Change in function 'make_great()':", end = " ")
print(magicians)
magicians = ['JP', 'JJ', 'PP']
make_great(magicians[:])
show_magicians(magicians)
#输出
#Change in function 'make_great()': ['the great JP', 'the great JJ', 'the great PP']
#After change: ['JP', 'JJ', 'PP']
8-12 三明治
编写一个函数,它接受顾客要在三明治中添加的一系列食材。这个函数只有一个形参(它收集函数调用中提供的所有食材),并打印一条消息,对顾客 点的三明治进行概述。调用这个函数三次,每次都提供不同数量的实参。
def foods(*fs):
print("I will add ",end = "")
for f in fs:
print(f, end = ' ')
print(".")
foods("egg")
foods("egg", "bread")
foods("egg", "bread", "vegetables")
#输出
#I will add egg .
#I will add egg bread .
#I will add egg bread vegetables .
8-13 用户简介
复制前面的程序
user_profile.py
,在其中调用build_profile()
来创建有关你的简介;调用这个函数时,指定你的名和姓,以及三个描述你的键-值对。
def user_profile(**user):
for key, value in user.items():
print(key, end = ' = ')
print(value, end = ' ')
print("")
user_profile(first_name="JP")
user_profile(first_name="JP", last_name="Wang")
user_profile(first_name="JP", last_name="Wang", age=19)
#输出
#first_name = JP
#first_name = JP last_name = Wang
#first_name = JP last_name = Wang age = 19
8-14 汽车
编写一个函数,将一辆汽车的信息存储在一个字典中。这个函数总是接受制造商和型号,还接受任意数量的关键字实参。这样调用这个函数:提供必不可 少的信息,以及两个名称—值对,如颜色和选装配件。这个函数必须能够像下面这样进行调用:
car = make_car('subaru', 'outback', color='blue', tow_package=True)
。
def make_car(inc, type, **features):
li = [inc, type, features]
return li
print(make_car('subaru', 'outback', color='blue', tow_package=True))
#输出
#['subaru', 'outback', {'color': 'blue', 'tow_package': True}]
8-15 打印模型
将示例
print_models.py
中的函数放在另一个名为printing_functions.py
的文件中;在print_models.py
的开头编写一条import
语句,并修改这个文件以使用导入的函数。
#print_models.py
from printing_functions import prtfn
prtfn()
#printing_functions.py
def prtfn():
print("Hello Python World!")
输出:
Hello Python World!
注意:调用文件和被调文件需要在相同目录下