【零基础】Python3学习课后练习题(二十一)

版权声明:未经授权请勿转载,否则需承担相应法律责任。 https://blog.csdn.net/RonyLance/article/details/82950981

本文是跟着鱼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

猜你喜欢

转载自blog.csdn.net/RonyLance/article/details/82950981