1.了不起的魔術師:編寫一個名為make_great()的函數,對魔術師列表進行修改,在每個魔術師的名字中都加入字樣「the Great」。調用函數show_magicians(),確認魔術師列表確實變了。
def make_great(a):
s="the Great"
for n in range(len(a)):
a[n]=a[n]+s
print(a)
magician=["lili","xiao","biggget"]
make_great(magician)
print(magician)
我們將make_great()定義成接受一個名字列表,並將其存儲在形參a中。首先,我們使用變量s,對它賦值「the Great」。然後,我們使用len()函數求出列表的長度,通過for循環遍歷列表。在循環中,我們使用列表索引a[n]=a[n]+s,訪問列表中的每一個元素,並對其進行修改。最後,我們定義了一個魔術師列表——magician,然後調用make_great(),並將這個列表傳遞給它。我們再次列印列表magician,確認魔術師列表確實變了。
2.不變的魔術師:修改以上編寫的程序,在調用函數make_great()時,向它傳遞魔術師列表的副本。由於不想修改原始列表,請返回修改後的列表,並將其存儲到另一個列表中。分別使用這兩個列表來調用show_magicians(),確認一個列表包含的是原來的魔術師的名字,而另一個列表包含的是添加了字樣"the Great"的魔術師的名字。
def make_great(a):
s="the Great"
for n in range(len(a)):
a[n]=a[n]+s
print(a)
magician=["lili","xiao","biggget"]
b=magician[:]
make_great(b)
print(magician)
為解決這個問題,可向函數傳遞列表的副本而不是原件;這樣函數所做的任何修改都只影響副本,而絲毫不影響原件。
要將列表的副本傳遞給函數,使用切片表示法[:]創建列表的副本。題中使用magician[:]賦值給變量b,於是列印列表magician時,發現並沒有發生改變。