几个编程练习题

在这里插入图片描述

def number_count(d,l,r):    
    if d<0 or d>9:
        return None
    if l>=r:
        return None
    splist=[]
    for i in range(l,r+1):#将每个数字都拆分为单个字符串
        splist+=list(str(i))#例如10会拆分为[‘1’,‘0’]
    return splist.count(str(d))#直接统计d的个数即可
if __name__ == '__main__':
    print(number_count(1,10,12))

在这里插入图片描述

def fun3(l1):
	import math
    def is_primer(n):#判断是否为质数
        if n<2:
            return False
        for i in range(2,int(math.sqrt(n))+1):
            if n%i==0:
                return False
        return True
	#接下来按要求拆分
	l2=[]
	for digit in l1:
		digit = str(digit)
		l2+=digit[0]+digit[-1]
	#将拆分完的列表中的数字转化为整型
	l3=list(map(lambda x:int(x),l2))
	#开始切分

	#这是暴力解法,得两层for循环
	# res = []  # 存放最终结果
	# length = len(l3)
	# flag = [0] * length  # 标记已经扫描过的元素
	# for i in range(length):
	#     notps = []  # 暂时存放非质数
	# 
	#     if is_prinmer(l3[i]) and falg == 0:  # 质数
	#         res.append(l3[i])  # 直接将质数加入到最终列表即可
	#         flag[i] = 1
	#     elif not is_primer(l3[i]) and falsg == 0:  # 非质数情况
	#         for j in range(i, length):  # 去搜索后面还有没有非质数
	#             if flag[j] == 0 and not is_primer(l3[j]):
	#                 notps.append(l3[j])
	#                 flag[j] = 1
	#             else:
	#                 break  # 如果没有连续的质数就结束搜索
	#         if notps:
	#             notps = list(map(lambda x: str(x), notps))  # 转化成字符串
	#             notps1 = ''.join(notps)
	#             res.append(int(notps1))
	#     return res
	
	#猴哥的一次遍历法
	res=[]
	str1=''
	for i in l3:
		if is_primer(i):#如果是质数
			if str1!='':#如果str1不为空,说明str1保存着前面的非质数
				res.append(int(str1))
			res.append(i)
			str=''
		else:
			str1+=str(i)#把非质数连接起来
	if str1!='':#考虑到列表末尾全是非质数时还要再添加一次
		res.append(int(str1))


	if __name__ == '__main__':
    l1=[1,234,5,6,7,890]
    fun3(l1)

#至于为啥要用flag来记录,[2,4,4,5]中,for循环是会挨个遍历的。
#当遍历到第一个4,整个过程会将两个4合并,如果不标记,接下来for循环会接着遍历第二个4。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值