1. 程式人生 > >【《Python程式設計: 從入門到實踐》習題答案--第八章:】

【《Python程式設計: 從入門到實踐》習題答案--第八章:】

# 8-1 訊息 : 編寫一個名為display_message() 的函式, 它列印一個句子, 指出你在本章學的是什麼。 
# 呼叫這個函式, 確認顯示的訊息正確無誤。
def display_message():
	print('本章學習內容:def(函式)')
display_message()

# 8-2 喜歡的圖書 : 編寫一個名為favorite_book() 的函式, 其中包含一個名為title 的形參。 這個函式列印一條訊息, 
# 如One of my favorite books isAlice in Wonderland 。 呼叫這個函式, 並將一本圖書的名稱作為實參傳遞給它。
def favorite_book(title,price):
	print('One of my favorite books is: ' + title)
favorite_book('java程式設計','')

# 8-3 T恤 : 編寫一個名為make_shirt() 的函式, 它接受一個尺碼以及要印到T恤上的字樣。 
# 這個函式應列印一個句子, 概要地說明T恤的尺碼和字樣。
# 使用位置實參呼叫這個函式來製作一件T恤; 再使用關鍵字實參來呼叫這個函式。
def make_shirt(size,msg):
	if msg == '':
		print('這件t恤衫的尺寸是:' + size + '; 印花文字為:' + '空')
	else:
		print('這件t恤衫的尺寸是:' + size + ';印花文字為:' + msg)
make_shirt('XXXL','')
make_shirt('XXXL',msg = 'hello_world!')

# 8-4 大號T恤 : 修改函式make_shirt() , 使其在預設情況下製作一件印有字樣“I love Python”的大號T恤。 
# 呼叫這個函式來製作如下T恤: 一件印有預設字樣的大號T恤、 
# 一件印有預設字樣的中號T恤和一件印有其他字樣的T恤(尺碼無關緊要) 。
def make_shirt(size,msg = 'I love Python'):
	print('這件t恤衫的尺寸是:' + size + ';印花文字為:' + msg)
make_shirt('大號T恤')
make_shirt('中號T恤')
make_shirt('小號T恤','其他字樣')

# 8-5 城市 : 編寫一個名為describe_city() 的函式, 它接受一座城市的名字以及該城市所屬的國家。 
# 這個函式應列印一個簡單的句子, 如Reykjavik is in Iceland 。 給用於儲存國家的形參指定預設值。 
# 為三座不同的城市呼叫這個函式, 且其中至少有一座城市不屬於預設國家。
def describe_city(city_name,city_belong_country = 'china'):
	print(city_name + ' is in ' + city_belong_country)
describe_city('shanghai')
describe_city('beijing')
describe_city('DC','america')

# 8-6 城市名 : 編寫一個名為city_country() 的函式, 它接受城市的名稱及其所屬的國家。 
# 這個函式應返回一個格式類似於下面這樣的字串:"Santiago, Chile"
# 至少使用三個城市-國家對呼叫這個函式, 並列印它返回的值。
def city_country(city_name,city_belong_country):
	city_country1 = city_name + ',' +city_belong_country
	return city_country1
a = city_country('shanghai','china')
b = city_country('beijing','china')
c = city_country('DC','America')
print(a)
print(b)
print(c)

# 8-7 專輯 : 編寫一個名為make_album() 的函式, 它建立一個描述音樂專輯的字典。 
# 這個函式應接受歌手的名字和專輯名, 並返回一個包含這兩項資訊的字典。 使用這個函式建立三個表示不同專輯的字典, 
# 並列印每個返回的值, 以核實字典正確地儲存了專輯的資訊。給函式make_album() 新增一個可選形參, 
# 以便能夠儲存專輯包含的歌曲數。 如果呼叫這個函式時指定了歌曲數, 就將這個值新增到表示專輯的字典中。 呼叫這個
# 函式, 並至少在一次呼叫中指定專輯包含的歌曲數。
def make_album(singer_name,album_name,song_number = ''):
	if song_number:
		s_a =  {'singer_name':singer_name,'album_name':album_name,'song_number' : song_number}
	else:
		s_a = {'singer_name':singer_name,'album_name':album_name}
	return s_a
a = make_album('HanHong','QingZangGaoYuan','5')
b = make_album('AndiLiu','WangQingShui')
c = make_album('LiuHuan','YouAndMe','7')
print(a)
print(b)
print(c)

# 8-8 使用者的專輯 : 在為完成練習8-7編寫的程式中, 編寫一個while 迴圈, 讓使用者輸入一個專輯的歌手和名稱。 
# 獲取這些資訊後, 使用它們來呼叫函式make_album() , 並將建立的字典打印出來。 在這個while 迴圈中, 務必要提供退出途徑。
def make_album(singer_name,album_name,song_number = ''):
	if song_number:
		s_a =  {'singer_name':singer_name,'album_name':album_name,'song_number' : song_number}
	else:
		s_a = {'singer_name':singer_name,'album_name':album_name}
	return s_a

s_n_inp = '請輸入歌手名:(輸入’quit‘後退出)'
a_n_inp = '請輸入專輯名:(輸入’quit‘後退出)'
ac = True
while ac:
	a = input(s_n_inp)
	b = input(a_n_inp)
	if a == 'quit' or b == 'quit' :
		break
	else:
		c = make_album(a,b)
		print(c)

# 8-9 魔術師 : 建立一個包含魔術師名字的列表, 並將其傳遞給一個名為show_magicians() 的函式, 這個函式列印列表中每個魔術師的名字。
name_list = ['mag1','mag2','mag3']
def show_magicians():
	for name in name_list:
		print(name)
show_magicians()

# 8-10 了不起的魔術師 : 在你為完成練習8-9而編寫的程式中, 編寫一個名為make_great() 的函式, 
# 對魔術師列表進行修改, 在每個魔術師的名字中都加入字樣“theGreat”。 呼叫函式show_magicians() , 確認魔術師列表確實變了。
name_list = ['mag1','mag2','mag3']
name_change = []
def make_great(name_list,name_change):
	while name_list:
		cur = name_list.pop()
		cur = 'great' + cur
		name_change.append(cur)
	
def show_magicians(name_change):
	for name in name_change:
		print(name)
		
make_great(name_list,name_change)
show_magicians(name_change)


# 8-11 不變的魔術師 : 修改你為完成練習8-10而編寫的程式, 在呼叫函式make_great() 時, 向它傳遞魔術師列表的副本。 
# 由於不想修改原始列表, 請返回修改後的列表, 並將其儲存到另一個列表中。 分別使用這兩個列表來呼叫show_magicians() , 
# 確認一個列表包含的是原來的魔術師名字, 而另一個列表包含的是添加了字樣“the Great”的魔術師名字。
name_list = ['mag1','mag2','mag3']
name_change = []

def make_great(name_list,name_change):
	while name_list:
		cur = name_list.pop()
		cur = 'great' + cur
		name_change.append(cur)
def show_magicians(name_change)
	for name in name_change:
		print(name)

make_great(name_list[:],name_change)
show_magicians(name_list)
show_magicians(name_change)

	

# 8-12 三明治 : 編寫一個函式, 它接受顧客要在三明治中新增的一系列食材。 這個函式只有一個形參(它收集函式呼叫中提供的所有食材) , 
# 並列印一條訊息, 對顧客點的三明治進行概述。 呼叫這個函式三次, 每次都提供不同數量的實參。
def sand_make(*ingredients):
	print( '新增的食材有:')
	for i in ingredients:
		print('--' + i)
	
sand_make('1','2','3','4')
sand_make('0')
sand_make('1','2')


# 8-13 使用者簡介 : 複製前面的程式user_profile.py, 在其中呼叫build_profile() 來建立有關你的簡介; 
# 呼叫這個函式時, 指定你的名和姓, 以及三個描述你的鍵-值對。
def user_profile(first,last,**else_info):
	name_file = {}
	name_file['first_name'] = first
	name_file['last_name']  = last
	for k ,v in else_info.items():
		name_file[k] = v
	return name_file

user_a = user_profile('ma','yun',company = 'TaoBao',Sex = 'man')
print(user_a)
user_b = user_profile('1','2',Sex = 'man')
print(user_b)
	


# 8-14 汽車 : 編寫一個函式, 將一輛汽車的資訊儲存在一個字典中。 這個函式總是接受制造商和型號, 還接受任意數量的關鍵字實參。 
# 這樣呼叫這個函式: 提供必不可少的資訊, 以及兩個名稱—值對, 如顏色和選裝配件。 這個函式必須能夠像下面這樣進行呼叫:
# car = make_car('subaru', 'outback', color='blue', tow_package=True)
# 列印返回的字典, 確認正確地處理了所有的資訊。
def car_msg(manufacturer,model,**else_info):
	bas_msg = {}
	bas_msg['manufacturer'] = manufacturer
	bas_msg['model'] = model
	for k ,v in else_info.items():
		bas_msg[k] = v
	return bas_msg
	
car = car_msg('subaru', 'outback', color='blue', tow_package=True)
print(car)