第八章作业
8-1 消息 : 编写一个名为display_message() 的函数, 它打印一个句子, 指出你在本章学的是什么。 调用这个函数, 确认显示的消息正确无误。
8-2 喜欢的图书 : 编写一个名为favorite_book() 的函数, 其中包含一个名为title 的形参。 这个函数打印一条消息, 如One of my favorite books is
Alice in Wonderland 。 调用这个函数, 并将一本图书的名称作为实参传递给它。
8-1
def display_message(): \'\'\'定义函数\'\'\' print(\'类似于定义一个x输出y的函数类型\') display_message() 输出;类似于定义一个x输出y的函数类型
8-2
def favorite_book(title ): print(\'One of my favorite books is \' + title.title()) favorite_book(\'alice in wonderland\') 输出: One of my favorite books is Alice In Wonderland
8-3 T恤 : 编写一个名为make_shirt() 的函数, 它接受一个尺码以及要印到T恤上的字样。 这个函数应打印一个句子, 概要地说明T恤的尺码和字样。
使用位置实参调用这个函数来制作一件T恤; 再使用关键字实参来调用这个函数。
8-4 大号T恤 : 修改函数make_shirt() , 使其在默认情况下制作一件印有字样“I love Python”的大号T恤。 调用这个函数来制作如下T恤: 一件印有默认字样的大号T
恤、 一件印有默认字样的中号T恤和一件印有其他字样的T恤( 尺码无关紧要) 。
8-5 城市 : 编写一个名为describe_city() 的函数, 它接受一座城市的名字以及该城市所属的国家。 这个函数应打印一个简单的句子, 如Reykjavik is in
Iceland 。 给用于存储国家的形参指定默认值。 为三座不同的城市调用这个函数, 且其中至少有一座城市不属于默认国家。
8-3
def make_shirt(recive_size,shirt_words): \'\'\'接受一个尺码以及要印到T恤上的字样\'\'\' print(\'我接受一个\' + recive_size + \'码\') print(\'要印到T恤上的字样是\' + shirt_words) make_shirt(recive_size=\'XL\',shirt_words=\'曹富最帅\') 输出: 我接受一个XL码 要印到T恤上的字样是曹富最帅
8-4
def make_shirt(recive_size,shirt_words=\'I love Python\'): \'\'\'接受一个尺码以及要印到T恤上的字样\'\'\' print(\'\n我接受一个\' + recive_size + \'码\') print(\'要印到T恤上的字样是\' + shirt_words + \'!\') make_shirt(recive_size=\'大号\') make_shirt(recive_size=\'中号\') make_shirt(recive_size=\'小号\') 输出: 我接受一个大号码 要印到T恤上的字样是I love Python! 我接受一个中号码 要印到T恤上的字样是I love Python! 我接受一个小号码 要印到T恤上的字样是I love Python!
8-5
def describe_city(citv_name,city_country=\'Iceland\'):#默认值是等于号 \'\'\'接受一座城市的名字以及该城市所属的国家\'\'\' print(citv_name.title() + \' is in \' + city_country.title()) describe_city(citv_name=\'Reykjavik\') describe_city(citv_name=\'aierlan\') describe_city(citv_name=\'beijing\',city_country=\'china\') 输出: Reykjavik is in Iceland Aierlan is in Iceland Beijing is in China
8-6 城市名 : 编写一个名为city_country() 的函数, 它接受城市的名称及其所属的国家。 这个函数应返回一个格式类似于下面这样的字符串:
"Santiago, Chile"
答:
def city_country(city,country): message = city.title() + \',\' + country.title() return message print(city_country(\'beijing\',\'china\')) 输出: Beijing,China
8-7 专辑 : 编写一个名为make_album() 的函数, 它创建一个描述音乐专辑的字典。 这个函数应接受歌手的名字和专辑名, 并返回一个包含这两项信息的字典。 使
用这个函数创建三个表示不同专辑的字典, 并打印每个返回的值, 以核实字典正确地存储了专辑的信息。
给函数make_album() 添加一个可选形参, 以便能够存储专辑包含的歌曲数。 如果调用这个函数时指定了歌曲数, 就将这个值添加到表示专辑的字典中。 调用这个
函数, 并至少在一次调用中指定专辑包含的歌曲数。
8-8 用户的专辑 : 在为完成练习8-7编写的程序中, 编写一个while 循环, 让用户输入一个专辑的歌手和名称。 获取这些信息后, 使用它们来调用函
数make_album() , 并将创建的字典打印出来。 在这个while 循环中, 务必要提供退出途径。
8-7 要求一
def make_album(songer_name,album_name,total_songs=\'\'): \'\'\'创建一个描述音乐专辑的字典\'\'\' music = {\'songer\':songer_name,\'album\':album_name} return music mussican = make_album(\'zhoujielun\',\'qilixiang\') print(mussican) mussican = make_album(\'chenyixun\',\'meigui\') print(mussican) mussican = make_album(\'naying\',\'heiye\') print(mussican) 输出: {\'songer\': \'zhoujielun\', \'album\': \'qilixiang\'} {\'songer\': \'chenyixun\', \'album\': \'meigui\'} {\'songer\': \'naying\', \'album\': \'heiye\'}
要求二
def make_album(songer_name,album_name,total_songs=\'\'): \'\'\'创建一个描述音乐专辑的字典\'\'\' if total_songs: full_word = songer_name + \' \' + album_name + \' \' + total_songs else: full_word = songer_name + \' \' + album_name return full_word.title()#函数返回 mussican = make_album(\'zhoujielun\',\'qilixiang\') print(mussican) mussican = make_album(\'chenyixun\',\'meigui\') print(mussican) mussican = make_album(\'naying\',\'heiye\',\'6shou\') print(mussican) 输出: Zhoujielun Qilixiang Chenyixun Meigui Naying Heiye 6Shou
8-8
def make_album(songer_name,album_name): \'\'\'创建一个描述音乐专辑的字典\'\'\' full_ablum = {\'songer_name\':songer_name,\'album_name\':album_name}#是这个函数的定义 return full_ablum #函数的信息返回 while True: print(\'音乐专辑\') print("(enter \'q\' at any time to quit)") songer_name = input(\'请输入歌手名:\')#注意是每个判断,不是到下面之后再判断 if songer_name == \'q\': break album_name = input(\'请输入专辑名:\') if album_name == \'q\': break print(make_album(songer_name,album_name))#自己对整个语句的理解不透彻,导致此处错误一直没弄对,最后这里的打印也是在while循环里面 输出; 音乐专辑 (enter \'q\' at any time to quit) 请输入歌手名:zhoujielun 请输入专辑名:qilixiang {\'songer_name\': \'zhoujielun\', \'album_name\': \'qilixiang\'} 音乐专辑 (enter \'q\' at any time to quit) 请输入歌手名:q
8-9 魔术师 : 创建一个包含魔术师名字的列表, 并将其传递给一个名为show_magicians( ) 的函数, 这个函数打印列表中每个魔术师的名字。
8-10 了不起的魔术师 : 在你为完成练习 8-9而编写的程序中, 编写一个名为make_great( ) 的函数, 对魔术师列表进行修改, 在每个魔术师的名字中都加入字样“the
Great”。 调用函数show_magicians( ) , 确认魔术师列表确实变了。
8-11 不变的魔术师 : 修改你为完成练习 8-10而编写的程序, 在调用函数make_great( ) 时, 向它传递魔术师列表的副本。 由于不想修改原始列表, 请返回修改后的
列表, 并将其存储到另一个列表中。 分别使用这两个列表来调用show_magicians( ) , 确认一个列表包含的是原来的魔术师名字, 而另一个列表包含的是添加了字
样“the Great”的魔术师名字。
8-9
def show_magicians(names): \'\'\'打印列表中每个魔术师的名字。\'\'\' for name in names: msg = (\'Hello, \' + name + \'!\') print(msg) #print(\'Hello\' + name),这样打印不出来,必须定义一个函数,其实也行的 names=[\'caofu\',\'wangshi\',\'xijinp\'] show_magicians(names) 输出: Hello, caofu! Hello, wangshi! Hello, xijinp!
8-10
magicians = [\'caofu\',\'wangshi\',\'xijinp\'] great_magicians = [] def make_great(magicians,great_magicians): while magicians: magician = magicians.pop() great_magician = \'the Great \' + magician great_magicians.append(great_magician) def show_magicianslis(great_magicians): for name in great_magicians: print(name) make_great(magicians,great_magicians) show_magicianslis(great_magicians)#自己确实没有做好 输出:the Great xijinp the Great wangshi the Great caofu
8-11
magicians = [\'caofu\',\'wangshi\',\'xijinp\'] great_magicians = [] def make_great(magicians,great_magicians): while magicians: magician = magicians.pop() great_magician = \'the Great \' + magician great_magicians.append(great_magician) def show_magicianslis(great_magicians): for name in great_magicians: print(name) make_great(magicians[:],great_magicians)#在magicians后添加[:]啊,因为之前是这个列表有数字啊 show_magicianslis(great_magicians)# show_magicianslis(magicians)#意思在函数1里调用的只是magicians的副本 输出; the Great xijinp the Great wangshi the Great caofu caofu wangshi xijinp
8-12 三明治 : 编写一个函数, 它接受顾客要在三明治中添加的一系列食材。 这个函数只有一个形参(它收集函数调用中提供的所有食材) , 并打印一条消息, 对顾客
点的三明治进行概述。 调用这个函数三次, 每次都提供不同数量的实参。
8-13 用户简介 : 复制前面的程序user_profile.py, 在其中调用build_profile( ) 来创建有关你的简介; 调用这个函数时, 指定你的名和姓, 以及三个描述你的键-值
对。
8-14 汽车 : 编写一个函数, 将一辆汽车的信息存储在一个字典中。 这个函数总是接受制造商和型号, 还接受任意数量的关键字实参。 这样调用这个函数: 提供必不可
少的信息, 以及两个名称—值对, 如颜色和选装配件。 这个函数必须能够像下面这样进行调用:
car = make_car(\' subaru\' , \' outback\' , color=\' blue\' , tow_package=True)
答:8-12
def sandwichs(*toppings): \'\'\'接受顾客要在三明治中添加的一系列食材\'\'\' print (toppings) sandwichs(\'咖喱\') sandwichs(\'牛肉\',\'鸡腿\') sandwichs(\'咖喱\',\'牛肉\',\'鸡腿\') 输出: (\'咖喱\',) (\'牛肉\', \'鸡腿\') (\'咖喱\', \'牛肉\', \'鸡腿\')
8-13
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(\'cao\' , \'fu\' , location=\'hefei\',field=\'finance\', character=\'better\',ability=\'good\', appearance=\'shuai\',iq=\'gao\') print(user_profile) 输出: {\'first_name\': \'cao\', \'last_name\': \'fu\', \'location\': \'hefei\', \'field\': \'finance\', \'character\': \'better\', \'ability\': \'good\', \'appearance\': \'shuai\', \'iq\': \'gao\'}
8-14
def car(manufacturers,size,**user_inf): \'\'\'总是接受制造商和型号, 还接受任意数量的关键字实参\'\'\' profile={}#profile 的空字典, 用于存储用户简介。 profile[\'manu\'] = manufacturers profile[\'si\'] = size for key,value in user_inf.items():#我们遍历字典user_info 中的键—值对, 并将每个键—值对都加入到字典profile 中 profile[key]=value return profile user=car(\'baoma\',\'yueye\', nenghao=\'good\',youhao=\'yiban\', 舒适度=\'好\',宽敞度=\'大\') print (user) 输出: {\'manu\': \'baoma\', \'si\': \'yueye\', \'nenghao\': \'good\', \'youhao\': \'yiban\', \'舒适度\': \'好\', \'宽敞度\': \'大\'}
整个逻辑这样的先设置好 car(manufacturers,size,**user_inf):,定义的函数是下面的其实是profile{第一个为car中的manufactures,第二个为size,第三个就是在函数中的那个user_inf了)然后形参不是第一行就知道了么,最后再输入car中的数据,将其返还给profile,也就是定义的函数,那给了x值定义的函数就返还出来y值
8-15 打印模型 : 将示例print_models.py中的函数放在另一个名为printing_functions.py的文件中; 在print_models.py的开头编写一条import 语句, 并修改这个文件以使用导
入的函数。
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 *
答:8-15
#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 from printing_functions import * unprinted_designs = [\'iphone case\', \'robot pendant\', \'dodecahedron\'] completed_models = [] print_models(unprinted_designs, completed_models) show_completed_models(completed_models)
输出:
Printing model: dodecahedron
Printing model: robot pendant
Printing model: iphone case
The following models have been printed:
dodecahedron
robot pendant
iphone case
8-16
#displaying.py def display_message(): print(\'本章学习的函数\') ---------------------------------------------- import displaying displaying.display_message() from displaying import display_message display_message() from displaying import display_message as dm dm() import displaying as dm dm.display_message() from displaying import * display_message()