今天我为大家找来了两道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()
运行结果展示
见图。