基于两道Python练习题的学习笔记和程序分析

今天我为大家找来了两道Python的练习题,适合初级和中级程序员练习。
我自己也进行了解题,将自己的解题思路、程序编写过程、回顾反思写在了下面。
同时,我也将解题源代码附在了下面,供解题者参考。
最后,还是希望大家能自己动手练一练!

题目一

题干

给定数字N和0~9的数字k,返回0~N中k数码出现的次数。

解题思路

1. 接受用户的输入,共两个数字N和k;
2. 生成0~N的数字列表,并遍历整个列表,对其中的每一个数进行检查(k是否在其 中),同时进行计数;
3. 输出结果。

程序编写

我们根据自己的解题思路,将程序的部分一个一个编写出来,最后组装即可。
1. 接受用户的输入,共两个数字N和k:
编写方法:定义一个函数 get_user :

def get_user():
	# 接受用户输入数字N,并转换为integer
    N = input('输入数字N,代表0-N的数字\n')
    N = int(N)
    # 检查用户输入的数字k 是否为0~9的数字
    action = True
     while action:
        k = input('输入一个0~9的数字\n')
        try:
            k = int(k) # 检查是否为数字
            if int(k) in list(range(10)): # 是否为0~9
                action = False # 跳出
        except:
            pass
    return [N,k] #返回两个用户输入

2. 生成0~N的数字列表,并遍历整个列表,对其中的每一个数进行检查(k是否在其中),同时进行计数:
解决这个问题也可以用一个简单的函数 count_num 实现。

def count_num(n,k):
    k = str(k)
    result = 0
    for num in range(n+1): # 遍历数字列表
        num = str(num)
        '''这步很重要!将含有数字k的数筛选出,并同时返回k在此书中的出现个数'''
        result += num.count(k)
    return result

3. 输出结果
此步较为简单,不多加赘述。

	# 调用函数
	n,k = get_user()
    total = count_num(n,k)
    # 输出
    print(f'共出现{total}次。')

回顾反思

这道题主要考查的是解题者对一下知识点的掌握:
1. range()函数的使用:
遍历0-N的数字时,要注意range()函数提供的的上限是不包括的,所以要写为N+1。

	for num in range(n+1): # 注意range()函数的参数!!
--snip--

2. count() 方法的使用:
count() 方法可以返回指定字符串出现的次数。用这个方法可以快速地返回你需要的数据。

		result += num.count(k)
--snip--

源码

以下是解这道题编写的程序代码:

# 给定数字N和0~9的数字k,返回0~N中k数码出现的次数。

def count_num(n,k):
    k = str(k)
    result = 0
    for num in range(n+1): # 遍历数字列表
        num = str(num)
        '''这步很重要!将含有数字k的数筛选出,并同时返回k在此书中的出现个数'''
        result += num.count(k)
    return result

def get_user():
	# 接受用户输入数字N,并转换为integer
    N = input('输入数字N,代表0-N的数字\n')
    N = int(N)
    # 检查用户输入的数字k 是否为0~9的数字
    action = True
     while action:
        k = input('输入一个0~9的数字\n')
        try:
            k = int(k) # 检查是否为数字
            if int(k) in list(range(10)): # 是否为0~9
                action = False # 跳出
        except:
            pass
    return [N,k] #返回两个用户输入

def main():
    # 调用函数
	n,k = get_user()
    total = count_num(n,k)
    # 输出
    print(f'共出现{total}次。')
    
if __name__ == '__main__':
    main()

运行效果展示

这里给大家测试了三个例子:
1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述

题目二

题干

寻找10000以内的回文数,并按照数字位数分类输出,计算总数。

解题思路

1. 编写出判断回文数的函数;
2. 生成0~10000的数字列表并筛选回文数;
3. 对一、二、三、四位回文数进行分类,并计算总数;
4. 输出结果。

程序编写

1. 编写出判断回文数的函数:
check()函数可以出色地完成这个任务。

def check(num):
    '''判断num是否为回文数'''
    # 将num调转
    num = list(str(num))
    num_list = num[:]
    num_list.reverse()
    
    # 判断
    if num == num_list:
        return True
    else:
        return False

2. 生成0~10001的数字列表并筛选回文数:
编写一个make_list()函数可以完成。

def make_list(num):
    '''生成数字列表并筛选回文数'''
    result = []
    # 生成列表
    for i in range(num+1):
        if check(i) == True: # 判断回文数
            result.append(str(i))
    return result

3. 对一、二、三、四位回文数进行分类,并计算总数:
这一步较难,sort_list()函数代码较长。

def sort_list(list_0):
    '''对不同的数字位数分类'''
    list_1,list_2,list_3,list_4 = [],[],[],[]

    # 遍历回文数列表
    for num in list_0:
        str_num = str(num)
        length = len(str_num)
        
        if length == 1: # 一位数
            list_1.append(num)
        elif length == 2: # 两位数
            list_2.append(num)
        elif length == 3: # 三位数
            list_3.append(num)
        elif length == 4: # 四位数
            list_4.append(num)
    return [list_1,list_2,list_3,list_4]

4. 输出结果:
print_count()函数对结果进行输出。

def print_and_count(total):
    '''计数并输出'''
    result = 0
    for nums in total:
        print()
        print(nums)
        result += len(nums)
    print(f'\n共出现{result}个回文数。')

回顾反思

1. 判断回文数
在check()函数中,使用了列表的切片和reverse方法,需要熟练掌握。感兴趣的读者可以阅读我的另一篇博文:
Python列表操作常用函数、方法大全

    # 将num调转
    num = list(str(num))
    num_list = num[:]
    num_list.reverse()
	--snip--

2. 对数字位数相同的数进行分类。
此处没有过多的技巧,逻辑正确即可。

    # 遍历回文数列表
    for num in list_0:
        str_num = str(num)
        length = len(str_num)
        
        if length == 1: # 一位数
            list_1.append(num)
        elif length == 2: # 两位数
            list_2.append(num)
        elif length == 3: # 三位数
            list_3.append(num)
        elif length == 4: # 四位数
            list_4.append(num)
    return [list_1,list_2,list_3,list_4]
	--snip--

源码

解题的程序源码见下:

# 寻找10000以内的回文数,并按照数字位数分类输出,计算总数

def check(num):
    '''判断num是否为回文数'''
    # 将num调转
    num = list(str(num))
    num_list = num[:]
    num_list.reverse()
    
    # 判断
    if num == num_list:
        return True
    else:
        return False

def make_list(num):
    '''生成数字列表并筛选回文数'''
    result = []
    # 生成列表
    for i in range(num+1):
        if check(i) == True: # 判断回文数
            result.append(str(i))
    return result

def sort_list(list_0):
    '''对不同的数字位数分类'''
    list_1,list_2,list_3,list_4 = [],[],[],[]

    # 遍历回文数列表
    for num in list_0:
        str_num = str(num)
        length = len(str_num)
        
        if length == 1: # 一位数
            list_1.append(num)
        elif length == 2: # 两位数
            list_2.append(num)
        elif length == 3: # 三位数
            list_3.append(num)
        elif length == 4: # 四位数
            list_4.append(num)
    return [list_1,list_2,list_3,list_4]

def print_and_count(total):
    '''计数并输出'''
    result = 0
    for nums in total:
        print()
        print(nums)
        result += len(nums)
    print(f'\n共出现{result}个回文数。')

def main():
    # 调用函数
    num_list = make_list(10000)
    
    total = sort_list(num_list)
    
    print_and_count(total)

if __name__ == '__main__':
    main()

运行结果展示

见图。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖泥鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值