1. 程式人生 > >《Python程式設計:從入門到實踐》第8章 函式

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