您的位置:首页 > 编程语言

【高级编程技术】【作业】【第四周】【2】

2018-03-28 13:00 381 查看

教材第8章课后练习

8-1 消息

def display_message():
print('本章学的是函数')
display_message()


8-2 喜欢的图书

def favorite_book(title):
print('One of my favorite books is', title)
favorite_book('Alice in Wonderland')


8-3 T恤

def make_shirt(size, word):
print('T恤的尺码是:', size, '\nT恤的字样是:', word)
make_shirt(size='XXL', word='Life is short. I use Python.')


8-4 大号T恤

def make_shirt(size='L', word='I love Python'):
print('T恤的尺码是:', size, '\nT恤的字样是:', word)
make_shirt()
make_shirt(size='M')
make_shirt(word='I hate Python')


8-5 城市

def describe_city(name, country='China'):
print(name, 'is in', country)
describe_city('Tokyo', 'Japan')
describe_city('Beijing')
describe_city('Shenzhen')


8-6 城市名

def city_counrty(name, country):
return name+', '+country
print(city_counrty('Tokyo', 'Japan'))
print(city_counrty('NewYork', 'USA'))
print(city_counrty('Guangzhou', 'China'))


8-7 专辑

def make_album(singer_name, album_name, songs=0):
album = {}
album['singer name'] = singer_name
album['album name'] = album_name
if songs != 0:
album['songs'] = songs
return album
print(make_album('刘若英', '在一起', 5))
print(make_album('刘德华', '谢谢你的爱', 1))
print(make_album('刘若英', '我们没有在一起'))


8-8 用户的专辑

def make_album(singer_name, album_name, songs=0):
album = {}
album['singer name'] = singer_name
album['album name'] = album_name
if songs != 0:
album['songs'] = songs
return album
while True:
singer_name = input('请输入歌手的名字(输入q退出):')
if singer_name == 'q':
break
album_name = input('请输入专辑的名字(输入q退出):')
if album_name == 'q':
break
print(make_album(singer_name, album_name))


8-9 魔术师

def show_magicians(magicians):
for magician in magicians:
print(magician)
show_magicians(['克里斯·安吉尔', '大卫·科波菲尔', '胡迪尼'])


8-10 了不起的魔术师

def show_magicians(magicians):
for magician in magicians:
print(magician)
# ~ 不行的版本
# ~ def make_great(magicians):
# ~ magicians = ['the Great '+magician for magician in magicians]
# ~ def make_great(magicians):
# ~ magicians = list(map((lambda magician: 'the Great '+magician), magicians))
# ~ def make_great(magicians):
# ~ for magician in magicians:
# ~ magician = 'the Great '+magician
def make_great(magicians):
for i in range(len(magicians)):
magicians[i]='The Great '+magicians[i]
magicians = ['克里斯·安吉尔', '大卫·科波菲尔', '胡迪尼']
make_great(magicians)
show_magicians(magicians)


参考Python 如何利用函数修改函数外list?

8-11 不变的魔术师

def show_magicians(magicians):
for magician in magicians:
print(magician)
# ~ 不行的版本
# ~ def make_great(magicians, new_magicians):
# ~ new_magicians = ['the Great '+magician for magician in magicians]
# ~ def make_great(magicians, new_magicians):
# ~ new_magicians = list(map
4000
((lambda magician: 'the Great '+magician), magicians))
# ~ 可行的版本
# ~ def make_great(magicians, new_magicians):
# ~ new_magicians.clear() # 这句话是可行的
# ~ for magician in magicians:
# ~ new_magicians.append('the Great '+magician)
def make_great(magicians, new_magicians):
# new_magicians = [] # 在函数里赋值会错
for i in range(len(magicians)):
new_magicians.append('The Great '+magicians[i])
magicians = ['克里斯·安吉尔', '大卫·科波菲尔', '胡迪尼']
new_magicians= []
make_great(magicians[:], new_magicians)
show_magicians(magicians)
show_magicians(new_magicians)


8-12 三明治

def offer_sandwich(*ingredients):
print('Your sandwich includes:')
if not ingredients:
print('\tNothing')
for ingredient in ingredients:
print('\t', ingredient, sep='')
offer_sandwich('egg')
offer_sandwich('egg', 'ham', 'bacon')
offer_sandwich()


下面是对各种参数位置的一些研究。

def add(*bs, a): # 允许没有默认值的参数放在后面
res = a
for b in bs:
res += b
print(res)
add(1,2,a=5) # 必须加上a=,否则会出错
运行结果:
8


def add(*bs, a=1): # print函数的原型类似这样
res = a
for b in bs:
res += b
print(res)
add(1, 2, 3)
运行结果:
7


def add(**bs, a): # 这样是错的,traceback提示是SyntaxError,a如果想放在后面必须加默认值
res = a
for b in bs.values():
res += b
print(res)


def add(a, **bs):
res = a
for b in bs.values():
res += b
print(res)
add(1, b=2, c=3)
运行结果:
6


def add(*bs, **cs):
res = 0
for b in bs:
res += b
for c in cs.values():
res += c
print(res)
add(1, 2, 3) # 全部传给bs
add(1,2,3,c=4) # 1,2,3传给bs,c=4传给cs
运行结果:
6
10


def add(**bs, *cs): # 语法错误,说明任意数量的关键字参数必须放在最后
res = 0
for b in bs:
res += b
for c in cs.values():
res += c
print(res)


def add(*bs, a=0, **cs):
res = a
for b in bs:
res += b
for c in cs.values():
res += c
print(res)
add(1,2)
add(1,2,a=3)
add(1,2,a=3,b=4)
add(1,2,b=3)
运行结果:
3
6
10
6


结论:任意数量的参数和普通参数(有无默认值均可)可以互换位置,会导致函数对待参数的行为有一些区别,但是任意数量的关键字参数必须放在最后。

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

my_profile = build_profile('Zicong', 'Huang',
location='Guangzhou',
field='computer',
grade=2016)
print(my_profile)


8-14 汽车

def make_car(manufacturer, model, **informations):
car = {}
car['manufacturer'] = manufacturer
car['model'] = model
for key, value in informations.items():
car[key] = value
return car
car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(car)


8-15 打印模型

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_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)


8-16 导入

display_message.py

def display_message():
print('本章学的是函数')


main.py

# import display_message
# display_message.display_message()

# from display_message import display_message
# display_message()

# from display_message import display_message as dm
# dm()

# import display_message as dm
# dm.display_message()

from display_message import *
display_message()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: