1. 程式人生 > >Python編程快速上手-讓繁瑣工作自動化 第三章 函數習題及其答案

Python編程快速上手-讓繁瑣工作自動化 第三章 函數習題及其答案

IE 編寫一個程序 引用 turn area glob pam on() 為什麽

第三章 函數習題及其答案

1、為什麽在程序中加入函數會有好處?

答:函數減少了重復的代碼。這讓程序更短,更容易閱讀,更容易修改。

2、函數中的代碼何時執行: 在函數被定義時,還是在函數被調用時?

答:函數中的代碼在函數被調用時執行,而不是在函數定義時。

3、什麽語句創建一個函數?

答:def語句定義了(創建了)一個函數。

4、一個函數和一次函數調用有什麽區別?

答:函數包含def語句和在def子句中的代碼。函數調用讓程序執行轉到函數內,函數調用求值為該函數的返回值。

5、Python程序中有多少全局作用域?有多少局部作用域?

答:在調用一個函數時,創建了一個全局函數和一個局部作用域。

6、當函數調用返回時,局部作用域中的變量發生了什麽?

答:函數返回時,局部作用域被銷毀,其中所有的變量都被遺忘了。

7、什麽是返回值?返回值可以作為表達式的一部分嗎?

答:返回值時函數調用求值的結果。像所有值一樣,返回值可以作為表達式的一部分。

8、如果函數沒有返回語句,對它調用的返回值是什麽?

答:如果函數沒有return語句,它的返回值就是None。

9、如何強制函數中的一個變量指的是全局變量?

答:global語句強制函數中的一個變量引用該全局變量。

10、None的數據類型是什麽?

答: None的數據類型是None Type。

11、import areallyourpetsnamederic語句做了什麽?

答:import語句導入了areallyourpetsnamederic模塊(順便說一句,這不是一個真正的Python模塊)。

12、如果在名為spam的模塊中,有一個名為bacon()的函數,在引入span後,如何調用它?

答:該函數可以通過spam.bacon()調用。

13、如何防止程序在遇到錯誤時崩潰?

答:將可能導致錯誤的代碼行放在一個try子句中。

14、try子句中發生了什麽?except子句中發生了什麽?

答:可能導致錯誤的代碼放在try子句中。發生錯誤時,要執行的代碼放在except子句中。

3.11 實踐項目 作為實踐,請編寫程序完成下列任務

3.11.1 Collatz序列

編寫一個名為collatz()的函數,它有一個名為number的參數。如果參數是偶數,那麽collatz()就打印number//2,
並返回該值。如果number是奇數,collatz()就打印並返回 3*number + 1
然後編寫一個程序,讓用戶輸入一個整數,並不斷對這個數調用collatz(),直到函數返回值1(令人驚奇的是,這個序列
對於任何整數都有效,利用這個序列,你遲早會得到1!即使數學家也不能確定為什。你的程序在研究所謂的"Collatz序列",
它有時後被稱為"最簡單的、不可能的數學問題")。
記得將input()的返回值用int函數轉成一個整數,否則它會是一個字符串。
提示:如果number % 2 == 0, 整數number就是偶數。如果number % 2 == 1, 它就是奇數。
答:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
"""
    編寫一個名為collatz()的函數,它有一個名為number的參數。如果參數是偶數,那麽collatz()就打印number//2,
並返回該值。如果number是奇數,collatz()就打印並返回 3*number + 1
    然後編寫一個程序,讓用戶輸入一個整數,並不斷對這個數調用collatz(),直到函數返回值1(令人驚奇的是,這個序列
對於任何整數都有效,利用這個序列,你遲早會得到1!即使數學家也不能確定為什。你的程序在研究所謂的"Collatz序列",
它有時後被稱為"最簡單的、不可能的數學問題")。
    記得將input()的返回值用int函數轉成一個整數,否則它會是一個字符串。
提示:如果number % 2 == 0, 整數number就是偶數。如果number % 2 == 1, 它就是奇數。
"""
def collatz(number):
    if number == 1:
        return 1
    elif number % 2 == 0:
        return number // 2
    elif number % 2 == 1:
        return 3*number + 1
print(collatz(18))
print(collatz(17))

3.11.2 輸入驗證

在前面的項目中添加try和except語句,檢測用戶是否輸入了一個非整數的字符串。正常情況下,int()函數在傳入一個非整數字符串時,會產生ValueError錯誤,比如int(‘puppy‘)。在execpt子句中,向用戶輸出一條信息,告訴他們必須輸入一個整數。

答:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
"""
    編寫一個名為collatz()的函數,它有一個名為number的參數。如果參數是偶數,那麽collatz()就打印number//2,
並返回該值。如果number是奇數,collatz()就打印並返回 3*number + 1
    然後編寫一個程序,讓用戶輸入一個整數,並不斷對這個數調用collatz(),直到函數返回值1(令人驚奇的是,這個序列
對於任何整數都有效,利用這個序列,你遲早會得到1!即使數學家也不能確定為什。你的程序在研究所謂的"Collatz序列",
它有時後被稱為"最簡單的、不可能的數學問題")。
    記得將input()的返回值用int函數轉成一個整數,否則它會是一個字符串。
提示:如果number % 2 == 0, 整數number就是偶數。如果number % 2 == 1, 它就是奇數。
"""
def collatz(number):
    if number == 1:
        return 1
    elif number % 2 == 0:
        numbers = number // 2
        print(numbers)
        collatz(numbers)
    elif number % 2 == 1:
        numbers = 3*number + 1
        print(numbers)
        collatz(numbers)
try:
    number = int(input("請輸入一個整數->:"))
    collatz(number)
except ValueError:
    print("please input a integer number")

Python編程快速上手-讓繁瑣工作自動化 第三章 函數習題及其答案