本部落格列出的答案不是來自官方資源,是我自己做的練習,如果有疑問或者錯誤,歡迎討論。
11-1.
參數。比較下面3個函數:
def countToFour1():
for eachNum in range(5):
print eachNum
def countToFour2(n):
for eachNum in range(n, 5):
print eachNum
def countToFour3(n=1):
for eachNum in range(n, 5):
print eachNum
給定如下的輸入直到程式輸出,你認為會發生什嗎?向下表11.2填入輸出。如果你認為給定的輸入會發生錯誤的話填入“Error”或者如果沒有輸出的話填入“NONE”。
【注】題目裡面提到的表11.2,就是本頁題11-2下面的那個表。也就是要看分別輸入值2,4,5和nothing到這三個函數,會有什麼結果。
【答案】
代碼如下:
>>> def countToFour1():... for eachNum in range(5):... print eachNum...>>> def countToFour2(n):... for eachNum in range(n, 5):... print eachNum...>>> def countToFour3(n = 1):... for eachNum in range(n, 5):... print eachNum...>>> countToFour1(2)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: countToFour1() takes no arguments (1 given)>>> countToFour2(2)234>>> countToFour3(2)234>>> countToFour1(4)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: countToFour1() takes no arguments (1 given)>>> countToFour2(4)4>>> countToFour3(4)4>>> countToFour1(5)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: countToFour1() takes no arguments (1 given)>>> countToFour2(5)>>> countToFour3(5)>>> countToFour1()01234>>> countToFour2()Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: countToFour2() takes exactly 1 argument (0 given)>>> countToFour3()1234
11-2.
函數。建立一個函數,返回兩個數位和以及乘積。
【注】根據英文版修改了題目。
【答案】
代碼如下:
def func(a, b): c = a * b d = a + b return c, da = raw_input("Please input the first number: ... ")# From www.cnblogs.com/balian/b = raw_input("Please input the second number: ... ")print Multi_P(float(a), float(b))
11-3.
函數。在這個練習中,我們將實現max()和min()內建函數。
(a)寫分別帶兩個元素返回一個較大和較小元素,簡單的max2()和min2()函數。他們應該可以用任意的Python對象運作。舉例來說,max2(4,8)和min2(4,8)會各自每次返回8和4。
(b)建立使用了在a部分中的解來重構max()和min()的新函數my_max()和my_min()。這些函數分別返回非空隊列中一個最大和最小值。他們也能帶一個參數集合作為輸入。用數字和字串來測試你的解。
【答案】
(a)代碼如下:
def max2(a, b):if a >= b:return aelse:return bdef min2(a, b):if a >= b:return belse:return a
(b)代碼如下:
def max2(a, b): if a >= b: return a else: return bdef min2(a, b): if a >= b: return b else: return a def my_max(*List): Max = List[0] for eachItem in List: Max = max2(eachItem, Max) return Maxdef my_min(*List): Min = List[0] for eachItem in List: Min = min2(eachItem, Min) return Minprint my_max(3,6,9,2,8)print my_min(3,6,9,2,8)
【未完】函數max()和min()能處理參數為一個列表的情況,比如,max([1,2,3])的結果是1。而這裡的函數my_max([1,2,3])的結果是[1,2,3]。程式還需要改進。
11-4.
傳回值。給你在5-13的解建立一個補充函數。建立一個以分為單位的總時間,以及返回一個以小時和分為單位的等價的總時間。
【答案】
代碼如下:
def conversion(a, b): return a * 60 + btime = raw_input('Please input the time in HH:MM format: ... ')print time, 'equals to't = time.split(':')print conversion(int(t[0]), int(t[1])), 'minutes'# From www.cnblogs.com/balian/
11-5.
預設參數。更新你在練習5-7中建立的銷售稅指令碼以便讓銷售稅率不再是函數的必要參數。使用你的地方稅率作為預設參數。
【答案】
代碼如下:
def tax(pureprice, rate = 0.13): return pureprice * ratepurePrice = float(raw_input('Please input the price: ... '))print 'You should pay:'print 'Subtotal: %10.2f ' % purePriceprint 'Sales Tax: %10.2f ' % tax(purePrice)# From www.cnblogs.com/balian/
11-6.
變長參數。寫一個稱為printf()的函數。有一個值參數,格式字串。剩下的就是根據格式化字串的值,要顯示在標準輸出上的可變參數,格式化字串中的值允許特別的字串格式操作指示符,如%d,%f,etc。提示:解是很瑣碎的--無需實現字串操作符功能性,但你需要顯示用字串格式化操作(%)。
【注】附英文版題目的原文:
Variable-Length Arguments. Write a function called printf(). There is one positional argument, a format string. The rest are variable arguments that need to be displayed to standard output based on the values in the format string, which allows the special string format operator directives such as %d, %f, etc. Hint: The solution is trivial—there is no need to implement the string operator functionality, but you do need to use the string format operator (%) explicitly.
【答案】
代碼如下:
>>> def printf(fmt, *args):... print fmt % args...
【執行結果】
>>> printf('%s', 'tom')
tom
>>> printf('%d', 12)
12
>>> printf('%f', 12)
12.000000
>>>
【參考】
做這題我參考了下面連結:
http://www.velocityreviews.com/forums/t676359-emulate-a-printf-c-statement-in-python.html