《Python程式設計:從入門到實踐》第8章 函式
第8章 函式
8-1 訊息
編寫一個名為display_message() 的函式,它列印一個句子,指出你在本章學的是什麼。呼叫這個函式,確認顯示的訊息正確無誤。
def display_message():
print("Learning function.")
display_message()
8-2 喜歡的圖書
編寫一個名為favorite_book() 的函式,其中包含一個名為title 的形參。這個函式列印一條訊息,如One of my favorite books is Alice in Wonderland 。呼叫這個函式,並將一本圖書的名稱作為實參傳遞給它。
def favorite_book(title):
print("One of my favorite books is " + title)
favorite_book('Alice in Wonderland')
8-3 T恤
編寫一個名為make_shirt() 的函式,它接受一個尺碼以及要印到T恤上的字樣。這個函式應列印一個句子,概要地說明T恤的尺碼和字樣。 使用位置實參呼叫這個函式來製作一件T恤;再使用關鍵字實參來呼叫這個函式。
def make_shirt(length, sleeve_length, shoulder_width, clothing, typeface) :
print("T恤介紹:")
print("\t衣長: " + length)
print("\t袖長: " + sleeve_length)
print("\t肩寬: " + shoulder_width)
print("\t衣寬: " + clothing)
print("\t字樣: " + typeface)
make_shirt(
length = '40',
sleeve_length = '20',
shoulder_width = '42',
clothing = '44',
typeface = 'python'
)
8-4 大號T恤
修改函式make_shirt() ,使其在預設情況下製作一件印有字樣“I love Python”的大號T恤。呼叫這個函式來製作如下T恤:一件印有預設字樣的大號T恤、一件印有預設字樣的中號T恤和一件印有其他字樣的T恤(尺碼無關緊要)。
def make_shirt(length, sleeve_length, shoulder_width, clothing, typeface = "I love Python."):
print("\nT恤介紹:")
print("\t衣長: " + length)
print("\t袖長: " + sleeve_length)
print("\t肩寬: " + shoulder_width)
print("\t衣寬: " + clothing)
print("\t字樣: " + typeface)
make_shirt(
length = '40',
sleeve_length = '20',
shoulder_width = '42',
clothing = '44',
)
make_shirt(
length = '40',
sleeve_length = '20',
shoulder_width = '42',
clothing = '44',
typeface = 'I love Java.'
)
8-5 城市
編寫一個名為describe_city() 的函式,它接受一座城市的名字以及該城市所屬的國家。這個函式應列印一個簡單的句子,如Reykjavik is in Iceland 。給用於儲存國家的形參指定預設值。為三座不同的城市呼叫這個函式,且其中至少有一座城市不屬於預設國家。
def describe_city(city_name = 'beijing', country = 'china'):
print(city_name.title() + " is in " + country.title() + ".")
describe_city()
describe_city(city_name = 'shanghai')
describe_city(city_name = 'reykjavik', country = 'iceland')
describe_city(city_name = 'tokyo', country = 'japan')
8-6 城市名
編寫一個名為city_country() 的函式,它接受城市的名稱及其所屬的國家。至少使用三個城市-國家對呼叫這個函式,並列印它返回的值。
def city_country(city_name, country_name):
print(city_name.title() + ", " + country_name.title())
city_country('santiago', 'chile')
city_country('shanghai', 'china')
city_country('toyko', 'japan')
8-7 專輯
編寫一個名為make_album() 的函式,它建立一個描述音樂專輯的字典。這個函式應接受歌手的名字和專輯名,並返回一個包含這兩項資訊的字典。使用這個函式建立三個表示不同專輯的字典,並列印每個返回的值,以核實字典正確地儲存了專輯的資訊。 給函式make_album() 新增一個可選形參,以便能夠儲存專輯包含的歌曲數。如果呼叫這個函式時指定了歌曲數,就將這個值新增到表示專輯的字典中。呼叫這個函式,並至少在一次呼叫中指定專輯包含的歌曲數。
def make_album(singer_name, album_name, number=''):
name = {}
if number:
name['singer'] = singer_name
name['album'] = album_name
name['num'] = number
else:
name['singer'] = singer_name
name['album'] = album_name
return name
print(make_album('周杰倫', '以父之名'))
print(make_album('周華健', '刀劍如夢'))
print(make_album('林子祥', '海市蜃樓'))
print(make_album('李朝輝', '木木夕', '2'))
8-8 使用者的專輯
在為完成練習8-7編寫的程式中,編寫一個while 迴圈,讓使用者輸入一個專輯的歌手和名稱。獲取這些資訊後,使用它們來呼叫函式make_album() ,並將建立的字典打印出來。在這個while 迴圈中,務必要提供退出途徑。
def make_album(singer_name, album_name, number=''):
name = {}
if number:
name['singer'] = singer_name
name['album'] = album_name
name['num'] = number
else:
name['singer'] = singer_name
name['album'] = album_name
return name
abort = True
while abort:
singers = input("Singer: ")
albums = input("Album: ")
numbers = input("Number: ")
print(make_album(singers, albums, numbers))
quit = input("You can enter 'q' to end the program: ")
if quit == 'q':
abort = False
8-9 魔術師
建立一個包含魔術師名字的列表,並將其傳遞給一個名為show_magicians() 的函式,這個函式列印列表中每個魔術師的名字。
def show_magicians(names):
for name in names:
print(name.title())
names = ['helen', 'lisa', 'tom', 'tony']
show_magicians(names)
8-10 了不起的魔術師
在你為完成練習8-9而編寫的程式中,編寫一個名為make_great() 的函式,對魔術師列表進行修改,在每個魔術師的名字中都加入字樣“the Great”。呼叫函式show_magicians() ,確認魔術師列表確實變了。
def show_magicians(names):
for name in names:
print(name.title())
def make_great(names):
for i in range(4):
names[i] = names[i] + ' the Great!'
return names
names = ['helen', 'lisa', 'tom', 'tony']
show_magicians(names)
make_great(names)
8-11 不變的魔術師
修改你為完成練習8-10而編寫的程式,在呼叫函式make_great() 時,向它傳遞魔術師列表的副本。由於不想修改原始列表,請返回修改後的列表,並將其儲存到另一個列表中。分別使用這兩個列表來呼叫show_magicians() ,確認一個列表包含的是原來的魔術師名字,而另一個列表包含的是添加了字樣“the Great”的魔術師名字。
def show_magicians(names):
for name in names:
print(name.title())
def make_great(names):
for i in range(4):
names[i] = names[i] + ' the Great!'
return names
names = ['helen', 'lisa', 'tom', 'tony']
names2 = make_great(names[:])
show_magicians(names)
show_magicians(names2)
8-12 三明治
編寫一個函式,它接受顧客要在三明治中新增的一系列食材。這個函式只有一個形參(它收集函式呼叫中提供的所有食材),並列印一條訊息,對顧客點的三明治進行概述。呼叫這個函式三次,每次都提供不同數量的實參。
def ingredients(*num):
for nums in num:
print(nums)
ingredients('番茄')
ingredients('番茄', '生菜')
ingredients('番茄', '生菜', '雞肉')
8-13 使用者簡介
複製前面的程式user_profile.py,在其中呼叫build_profile() 來建立有關你的簡介;呼叫這個函式時,指定你的名和姓,以及三個描述你的鍵-值對。
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('Clark', 'Pan', location='Nanjing', field='China', age = '22')
print(user_profile)
8-14 汽車
編寫一個函式,將一輛汽車的資訊儲存在一個字典中。這個函式總是接受制造商和型號,還接受任意數量的關鍵字實參。這樣呼叫這個函式:提供必不可少的資訊,以及兩個名稱—值對,如顏色和選裝配件。這個函式必須能夠像下面這樣進行呼叫:
car = make_car('subaru', 'outback', color='blue', tow_package=True)
列印返回的字典,確認正確地處理了所有的資訊。
def car_information(manufacturer, model, **info):
information = {}
information['manufacturer'] = manufacturer
information['model'] = model
for i, j in info.items():
information[i] = j
return information
car = car_information('subaru', 'outback', color = 'blue', tow_package=True)
print(car)