Python编程-从入门到实践(第2版)第八章练习代码
练习8-1:消息
编写一个名为display_message() 的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。
# 创建函数 def display_message(): print("I learned functions in this section.") # 调用函数 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 book is {title.title()}") # 调用函数 favorite_book('godfather')
练习8-3:T恤
编写一个名为make_shirt() 的函数,它接受一个尺码以及要印到T恤上的字样。这个函数应打印一个句子,概要地说明T恤的尺码和字样。
使用位置实参调用这个函数来制作一件T恤;再使用关键字实参来调用这个函数。
使用位置实参调用这个函数来制作一件T恤;再使用关键字实参来调用这个函数。
# 定义一个函数 def make_shirt(size, style): print(f"The T-shirt should be {size.title()} size and got {style.title()} characters on it.") # 位置实参调用函数 make_shirt('xL', '*** you tomboy') # 关键字实参调用函数 make_shirt(style = 'just like tT', size = "l")
练习8-4:大号T恤
修改函数make_shirt() ,使其在默认情况下制作一件印有字样“I love Python”的大号T恤。调用这个函数来制作如下T恤:一件印有默认字样的大号T恤、一件印有默认字样的中号T恤和一件印有其他字样的T恤(尺码无关紧要)。
# 定义函数 def make_shirt(size, style = 'i love Python'): print(f"The T-shirt should be {size.title()} size and got {style.title()} characters on it.") # 调用函数,style默认情况下的大号T恤 make_shirt(size = 'large') # 调用函数,style默认情况下的中号T恤 make_shirt(size = 'middle') # 调用函数,style不在默认情况下 make_shirt(style = '*** you python', size = 'small')
练习8-5:城市
编写一个名为describe_city() 的函数,它接受一座城市的名字以及该城市所属的国家。这个函数应打印一个简单的句子,如Reykjavik is in Iceland 。给用于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家。# 定义函数 def describe_city(city, country = 'china'): print(f"{city.title()} is in {country.title()}.") # 调用函数 describe_city('beijing') describe_city('shanghai') describe_city('london', 'united kingdom')
练习8-6:城市名
编写一个名为city_country() 的函数,它接受城市的名称及其所属的国家。这个函数应返回一个格式类似于下面这样的字符串:“Santiago, Chile”。至少使用三个城市-国家对调用这个函数,并打印它返回的值。# 定义函数 def city_country(city, country): print(f"{city.title()}, {country.title()}.") # 调用函数 city_country("santiago", "chile") city_country("london", "united kingdom") city_country("beijing", "china")
练习8-7:专辑
编写一个名为make_album() 的函数,它创建一个描述音乐专辑的字典。这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典。使用这个函数创建三个表示不同专辑的字典,并打印每个返回的值,以核实字典正确地存储了专辑的信息。给函数make_album() 添加一个可选形参,以便能够存储专辑包含的歌曲数。如果调用这个函数时指定了歌曲数,就将这个值添加到表示专辑的字典中。调用这个函数,并至少在一次调用中指定专辑包含的歌曲数。
# 定义函数 def make_album(singer_name, album_name, song_num = None): # 专辑信息 if song_num == None: album_info = { 'singer' : singer_name, 'album' : album_name, } else: album_info = { 'singer' : singer_name, 'album' : album_name, 'song number' : song_num, } # 打印专辑信息 print(album_info) # 创建字典对象 album_1 = make_album(singer_name = 'Jay Chou', album_name= '依然范特西') album_2 = make_album(singer_name = 'JJ Lin', album_name= '和自己对话') album_3 = make_album(singer_name = 'Kun', album_name= 'YOUNG', song_num = 99)
练习8-8:用户的专辑
在为完成练习 8-7 编写的程序中,编写一个 while 循环,让用户输入一个专辑的歌手和名称。获取这些信息后,使用它们来调用函数 make_album(),并将创建的字典打印出来。在这个 while 循环中,务必要提供退出途径。
# 定义函数 def make_album(singer_name, album_name, song_num = None): # 专辑信息 if song_num == None: album_info = { 'singer' : singer_name, 'album' : album_name, } else: album_info = { 'singer' : singer_name, 'album' : album_name, 'song number' : song_num, } # 打印专辑信息 print(album_info) # 设置信标 activate = True # 设置循环 while activate: # 判断是否要输入专辑信息 flag = input("Would you like to tell me what's your favorite singer and album? (y/n).") # 如果是n,跳出循环 if flag == 'n': break singer_name = input('Please type in your favorite singer name.') album_name = input('Please tell me his/her famous album name.') song_num = input("How many songs in this album? If you don't know, just type in 'None'.") make_album(singer_name = singer_name, album_name = album_name, song_num = song_num)
练习8-9:消息
创建一个列表,其中包含一系列简短的文本消息。将该列表传递诶一个个名为show_messages()的函数,这个函数会打印列表中的每条文本消息。
# 创建函数 def show_messages(messages): # 利用while循环 while messages: print(messages.pop()) # 创建文本列表 messages = ['Python是这个世界上最好的语言', '没有之一', '如果你想反驳我', '除非你会C++',] # 创建示例 # 颠倒列表 messages.reverse() show_messages(messages)
练习8-10:发送消息
在你为完成练习8-9而编写的程序中,编写一个名为send_messages()的函数,将每条信息都打印出来并移到一个名为sent_messages的列表中。调用函数send_messages(),再将两个列表都打印出胡来,确认正确地移动了消息# 创建函数send_messages def send_messages(message, sent_message): sent_message.append(message) # 创建函数show_messages def show_messages(messages, sent_message): # 利用while循环 while messages: message = messages.pop() send_messages(message, sent_message) # 创建文本列表 messages = ['Python是这个世界上最好的语言', '没有之一', '如果你想反驳我', '除非你会C++',] # 创建空列表 sent_messages = [] show_messages(messages, sent_messages) # 打印两个列表 print(messages) print(sent_messages)
练习8-11:消息归档
修改你为完成练习8-10而编写的程序,在调用函数send_messages()时,向它传递消息列表的副本。调用函数send_messages()后,将两个列表都打印出来,确认保留了原始列表中的消息
# 创建函数send_messages def send_messages(message, sent_message): sent_message.append(message) # 创建函数show_messages def show_messages(messages, sent_message): # 利用while循环 while messages: message = messages.pop() send_messages(message, sent_message) # 创建文本列表 messages = ['Python是这个世界上最好的语言', '没有之一', '如果你想反驳我', '除非你会C++',] # 创建空列表 sent_messages = [] # 创建messages的副本 messages_copy = messages[:] # 传递副本 show_messages(messages_copy, sent_messages) # 打印两个列表 print(messages) print(sent_messages)
练习8-12:三明治
编写一个函数,它接受顾客要在三明治中添加的一系列食材。这个函数只有一个形参(它收集函数调用中提供的所有食材),并打印一条消息,对顾客点的三明治进行概述。调用这个函数三次,每次都提供不同数量的实参。
# 编写函数 def foods(*toppings): # 打印消息 print("Your order is under below:") print(toppings) # 调用函数 foods('apple', 'banana', 'pineapple') foods('sausage', 'watermelon') foods('Nothing')
练习8-13:用户简介
复制前面的程序user_profile.py,在其中调用build_profile() 来创建有关你的简介;调用这个函数时,指定你的名和姓,以及三个描述你的键值对。
#Python## 定义函数 def build_profile(first, last, **user_info): user_info['fist_name'] = first user_info['last_name'] = last return user_info # 调用函数 # 输入键值对的时候只能使用等号 user_profile = build_profile('Chen', 'Lesion', Location = 'BeiJing', Age = 99, Gender = 'Male') # 打印列表 print(user_profile)
练习8-14:汽车
编写一个函数,将一辆汽车的信息存储在一个字典中。这个函数总是接受制造商和型号,还接受任意数量的关键字实参。这样调用这个函数:提供必不可少的信息,以及两个名称值对,如颜色和选装配件。这个函数必须能够像下面这样进行调用:car = make_car(‘subaru’, ‘outback’, color=‘blue’, tow_package=True)打印返回的字典,确认正确地处理了所有的信息。
# 定义函数 def build_car_profile(factory, type_number, **car_info): car_info['factory'] = factory car_info['type'] = type_number return car_info # 调用函数 # 输入键值对的时候只能使用等号 car_profile = build_car_profile('BMW', 'M8', Color = 'Blue', tow_package = False) # 打印列表 print(car_profile)