1. 程式人生 > >【零基礎】Python3學習課後練習題(二十一)

【零基礎】Python3學習課後練習題(二十一)

本文是跟著魚C論壇小甲魚零基礎學習Python3的視訊學習的,課後題也是跟隨每一課所附屬的題目來做的,根據自己的理解和標準答案記錄的筆記。

第二十三課與二十四課

測試題:

0.使用遞迴編寫一個十進位制轉換為二進位制的函式(要求採用“除2取餘”的方式,結果與呼叫bin()一樣返回字串形式)

答:通過地板除2的方法層層處理資料到底層,然後以除二取餘的方式得到二進位制的每一位數。

def dtbin(num):
    def  tbin(num):
        result = ''
        if num:
            result = tbin( num // 2 )
            return result += str(num % 2)
        else:
            return result
    if num == 0:
        return '0b' + '0'
    else:
        return '0b' + tbin(num)

原題解是上述函式中的內建函式 tbin() 的書寫方式,但是執行之後出現一個問題,就是在二進位制轉換的實現過程中 tbin() 有缺陷,即不能轉化出 0 的正確返回值,並且每次返回的只有二進位制程式碼的本身數值,而不同於原始 BIF 的 bin() 返回的是 '0b' 字首加上二進位制數值。所以為了改善補充原題解的不足,將其變為內建函式執行,在外部增加 0 的返回值並且新增 '0b' 的字首。從而使得此新函式結果與功能與原內建 BIF 的 bin() 函式一樣。

1.寫一個函式get_digits(n),將引數n分解出每個位的數字並按順序存放到列表中。舉例:get_digits(12345)==>[1,2,3,4,5]

答:通過地板除10的方法將目標引數一層層分離出來,然後以除10取餘的方式得到每個位置的數字。

def get_digits(n):
    result = ''  
    if n:  
        result = get_digits(n//10)  
        result += str(n%10)  
    return list(result)  

最終以列表的方式輸出。

2.還記得求迴文字串那道題嗎?現在讓你使用遞迴的方式來求解,親還能傲嬌的說我可以嗎?

答:通過首尾每一位進行比較的方法,先將目標引數分離出每一對首尾對應位的元素進行比較,形成內建判斷函式 hwlpd(),然後外函式整理目標引數的資料,去掉目標引數前後半段全等的情況以及全不等的情況。

def hwl(words):
    start = 0
    end = len(words) - 1
    def hwlpd(words, start, end):
        if start > end :
            return 1
        else:
            if words[start] == words[end]:
                return hwlpd(words, start + 1, end - 1)
            else:
                return 0
    if hwlpd(words, start, end):
        if words[0:len(words)//2] == words[len(words)//2:len(words)]:
            print('%s 不是一個迴文聯字串'%words)
        else:
            print('%s 是一個迴文聯字串!'%words)
    else:
        print('%s 不是一個迴文聯字串'%words)

需要注意的是,原答案是寫出內建函式之後在全域性進行補充條件來跟進的,並且沒有新增全雜元素的目標引數物件的返回結果,所以我補充改善了這一點,並且將其整理成現在的一個內嵌型的複合函式。

3.使用遞迴程式設計求解以下問題:

有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數, 他說比第三個人大兩歲,問第三個人,又說比第二個人大兩歲,問第二個人,又說比第1個人大兩歲。 最後問第一個人,他說是10歲。請問第5個人多大?

答:利用遞迴的方法,遞迴分為回推和遞推兩個階段,要想知道第五個人的歲數,必須要知道第四個人的歲數,依次類推,推到第一個人10歲,再往回推。

def age(n):
    if n == 0:
        print('輸入有誤!')
    elif n == 1:
        return 10
    else:
        return age(n-1) + 2