【Python】蓝桥杯真题讲解2

第二题(难度系数 2,满分 50 分)

编程实现:打印出 1~1000 之间包含 3 的数字;如果 3 是连在一起的(如 233)则在数字前加上&;如果这个数字是质数则在数字后加上*,例:(3,13*,23*,&33,43*…&233*…)。

输入:

输出:按照题意输出的数字,每行一个数字

样例输出:3

                 13*

                 23*

                 &33

                 ……

将程序命名为“lq002”。

评判标准:

10 分:完成打印 1~1000 之间包含 3 的数字

30 分:在 10 分标准的基础上,找出其中的连 3,前面加&

50 分:在 30 分标准的基础上,找出其中的质数,后面加*


        这道题的任务有:①完成打印 1~1000 之间包含 3 的数字;②找出其中的连 3,前面加&;③找出其中的质数,后面加*。


        如何输出1~1000之间包含3的数字呢?这里我们需要用到for循环,并在for循环(取头不取尾)中判断是否含有文字“3”(接下来使用in成员运算符,必须转换)。代码如下:

for i in range(1,1000 + 1):   #循环遍历1~1000中的数字
    if "3" in str(i):   #判断文字“3”是否在该数字中出现
        print(str(i))   #输出该数字

        


        接下来就要找连3了。以下为连3的数字例子:

两位数三位数四位数
331331333
3332033
5333333

        在1~1000中,只会有最多三位的连3,但是三位的连3内含有两位的连3,所以我们只需要判断数字中是否含有两位的连3即可。

for i in range(1,1000 + 1):   #循环遍历1~1000中的数字
    if "3" in str(i):   #判断文字“3”是否在该数字中
        if "33" in str(i):   #判断该数字中是否有连3
            print("&" + str(i))   #输出&+数字
    else:   #否则
        print(str(i))   #输出该数字

        最后一步,判断遍历到的数字是否是质数。我们可以定义一个函数来判断质数(需提前导入math模块,我们需要用到开方函数sqrt)。

        质数的特点是:①大于1;②除了除以本身和1以外不能除以其他数字。代码如下:

import math   #导入math数学模块
def isPrime(n):   #定义函数
    if n <= 1:   #判断数字是否小于等于1
        return False   #不成立
    for i in range(2,int(math.sqrt(n)) + 1):   #遍历2~该数字
        if n % i == 0:   #判断质数
            return False   #不成立
    return True   #成立

        调用函数体:

for i in range(1,1000 + 1):   #循环遍历1~1000中的数字
    if "3" in str(i):   #判断文字“3”是否在该数字中
        if "33" in str(i):   #判断该数字中是否有连3
            print("&" + str(i))   #输出&+数字
        elif isPrime(i):   #判断质数
            print(str(i) + "*")   #输出数字+*
        else:   #否则
            print(str(i))   #输出该数字
    else:
        continue   #如果这个数字不含3,则进入下次循环

        题目已讲解完毕,以下为所有代码:

import math   #导入math数学模块
def isPrime(n):   #定义函数
    if n <= 1:   #判断数字是否小于等于1
        return False   #不成立
    for i in range(2,int(math.sqrt(n)) + 1):   #遍历2~该数字
        if n % i == 0:   #判断质数
            return False   #不成立
    return True   #成立
for i in range(1,1000 + 1):   #循环遍历1~1000中的数字
    if "3" in str(i):   #判断文字“3”是否在该数字中
        if "33" in str(i):   #判断该数字中是否有连3
            print("&" + str(i))   #输出&+数字
        elif isPrime(i):   #判断质数
            print(str(i) + "*")   #输出数字+*
        else:   #否则
            print(str(i))   #输出该数字
    else:
        continue   #如果这个数字不含3,则进入下次循环

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

账号已停更

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

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

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

打赏作者

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

抵扣说明:

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

余额充值