当前位置: 首页 > article >正文

蓝桥杯python语言基础(3)——循环结构

一、for语句

理解range函数

range(start, stop, step) 

  • start: 序列开始的数字(默认为0)。
  • stop: 序列结束的数字(不包含stop)。
  • step: 步长(默认为1)。

练习

输出在 l 和 r 之间的所有偶数:

print(*(i for i in range(int(input()), int(input()) + 1) if i % 2 == 0))

练习

计算奇数和,偶数和 

n=int(input())
print(*(sum(range(i, n + 1, 2)) for i in (1, 2)))

习题P152-反倍数


题目描述

给定三个整数 a,b,c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c的整数倍,则这个数称为反倍数。

请问在 1 至 n 中有多少个反倍数。

输入描述

输入的第一行包含一个整数 n。

第二行包含三个整数 a,b,c 相邻两个数之间用一个空格分隔。

其中,1≤n≤1000000,1≤a≤n,1≤b≤n,1≤c≤n1≤n≤1000000,1≤a≤n,1≤b≤n,1≤c≤n。

输出描述

输出一行包含一个整数,表示答案。


n = int(input())   
a, b, c = map(int, input().split())   
print(sum(1 for i in range(1, n + 1) if i % a and i % b and i % c))

if i % a and i % b and i % c 是条件判断,只有当 i 既不能被 a 整除,也不能被 b 整除,还不能被 c 整除时,条件为真。

习题P153-洁净数


题目描述

小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2,小明将它称为洁净数。

请问在整数 1 至 n 中,洁净数有多少个?

输入描述

输入的第一行包含一个整数 n

输出描述

输出一行包含一个整数,表示答案


print(sum('2' not in str(i) for i in range(1, int(input()) + 1)))

sum(...):对生成的布尔值序列进行求和,True 会被当作 1False 会被当作 0,最终得到洁净数的数量并打印输出。

习题P191-特别数的和


题目描述

小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。

请问,在 1 到 nn 中,所有这样的数的和是多少?

输入描述

输入格式:

输入一行包含两个整数 n(1≤n≤104)n(1≤n≤104)。

输出描述

输出一行,包含一个整数,表示满足条件的数的和。


n = int(input())
SUM = 0

for i in range(n+1):
    str_n = str(i)
    contains = False

    for j in str_n:
      if j in "2019":
        contains = True
        break
    if contains:
        SUM += i
print(SUM)
n = int(input())   
print(sum(i for i in range(1, n + 1) if any(j in '2019' for j in str(i))))

习题P2411-星期几


给定一天是一周中的哪天,请问 n 天后是一周中的哪天?

输入格式

输入第一行包含一个整数 w,表示给定的天是一周中的哪天,w 为 1 到 6 分别表示周一到周六,w为 7 表示周日。

第二行包含一个整数 n。

输出格式

输出一行包含一个整数,表示 n 天后是一周中的哪天,1 到 6 分别表示周一到周六,7表示周日。


w = int(input())
n = int(input())

num = (w + n - 1) % 7 + 1
print(num)
  • w + n 是计算当前日期加上经过天数后的总天数。

  • -1 是为了将计数调整为从 0 开始,这样 (w + n - 1) % 7 的结果范围就是 0 到 6。

  • 最后 +1 是将结果调整回题目要求的 1 到 7 的表示方式,其中 1 到 6 代表周一到周六,7 代表周日 。

二、while语句

练习

求最大公约数

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

breakcontinue是用于控制循环流程的语句

三、循环嵌套

练习

求阶乘之和

def sum_of_factorials(n):
    result = 0
    for i in range(1, n + 1):
        factorial = 1
        for j in range(1, i + 1):
            factorial *= j
        result += factorial
    return result

   
num = 5   
print(f"1到{num}的阶乘之和为: {sum_of_factorials(num)}")

例题3-1 采购

找到满足以下条件的母鸡、公鸡和小鸡的数量:

  1. 母鸡、公鸡和小鸡的总数为90只。
  2. 母鸡每只15元,公鸡每只10元,小鸡每只5元,总花费为500元。
count = 0
for x in range(91):
    for y in range(91):
        for z in range(91):
            count += 1
            if x+y+z == 90 and 15*x+10*y+5*z == 500:
                print(x,y,z)

print("循环次数 ",count)

优化代码

  • 母鸡最多可能有 500 // 15 ≈ 33.33,取整为 33,循环范围到 34
  • 公鸡最多可能有 500 // 10 = 50,循环范围到 51
  • 将 z = 90 - x - y 代入第二个方程 15 * x + 10 * y + 5 * z == 500 中,得到一个只关于 x 和 y 的方程,减少计算量。
count = 0
for x in range(34):
    for y in range(51):
        z = 90-x-y
        count += 1
        if x+y+z == 90 and 15*x+10*y+5*z == 500:
            print(x,y,z)

print("循环次数 ",count)

通过数学计算进一步优化

for x in range(6):
    y = 10 - 2 * x
    z = 80 + x
    print(x,y,z)

例题3-2 水仙花数

水仙花数是指一个三位数,其各位数字的立方和等于该数本身。例如,153=13+53+33​,所以 153 是一个水仙花数。

for a in range(1, 10):
    for b in range(0, 10):
        for c in range(0, 10):
            num = a * 100 + b * 10 + c
            if num == a ** 3 + b ** 3 + c ** 3:
                print(num)
for num in range(100,1000):
    num100 = (num // 100)
    num10 = (num // 10) % 10
    num1 = num % 10
    if num == num100**3 + num10**3 + num1**3:
        print(num)

例题3-3 素数

如果 n 能被某个 i 整除,说明 n 不是素数,将 prime 设为 False 并跳出循环

L = int(input())
R = int(input())

for n in range(L,R+1):
    prime = True
    if n<= 1:
        prime = False
    for i in range(2,int(n**0.5) + 1):
        if n % i == 0:
            prime = False
            break
    if prime:
        print(n)

例题3-4 日期

输出2000年至2026年每一天的日期

for year in range(2000, 2026):
    for month in range(1, 13):
        if month in [4, 6, 9, 11]:
            days_in_month = 30
        elif month == 2:
            if (year % 4 == 0 and year % 100!= 0) or (year % 400 == 0):
                days_in_month = 29
            else:
                days_in_month = 28
        else:
            days_in_month = 31
        for day in range(1, days_in_month + 1):
            print(f"{year}-{month:02d}-{day:02d}")

例题3-5 完美数


一个数字如果等于它的因子之和(不包含它本身),那么这个数字称之为完美数。 例如6=1+2+3,28=1+2+4+7+14。 求出1-n中所有的完美数并输出。

输入:一个整数n(n≤10000)n(n≤10000)

输出:对于每个完美数输出1行

【分析】 枚举1-n中的每个数字,对于这个数字,求出它的所有因子,将其全部加起来判断是否等于本身。 


n = int(input())

for num in range(2, n + 1):
    factor_sum = 0
    for factor in range(1, num):
        if num % factor == 0:
            factor_sum += factor
    if factor_sum == num:
        print(num)


http://www.kler.cn/a/524027.html

相关文章:

  • NLP模型大对比:Transformer > RNN > n-gram
  • MotionLCM 部署笔记
  • 关于el-table翻页后序号列递增的组件封装
  • 【apt源】RK3588 平台ubuntu20.04更换apt源
  • 【蓝桥杯嵌入式入门与进阶】2.与开发板之间破冰:初始开发板和原理图2
  • 解读隐私保护工具 Fluidkey:如何畅游链上世界而不暴露地址?
  • Linux 非阻塞IO
  • 《Memory Barriers a Hardware View for Software Hackers》阅读笔记
  • 【Linux】Linux C比较两个 IPv6 网关地址是否相等,包括前缀
  • SpringBoot-Vue整合百度地图
  • Attention Free Transformer (AFT)-2020论文笔记
  • 适配器模式——C++实现
  • 人工智能在医疗领域的应用有哪些?
  • LeetCode - #196 删除重复的电子邮件并保留最小 ID 的唯一电子邮件
  • 漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)
  • C#@符号在string.Format方法中作用
  • HTML 标题
  • threejs实现烟花效果
  • 实现网站内容快速被搜索引擎收录的方法
  • Spring Boot 日志:项目的“行车记录仪”
  • 《Trustzone/TEE/安全从入门到精通-标准版》
  • 【MQ】如何保证消息队列的高可用?
  • Spring Boot多环境配置实践指南
  • Python面试宝典8 | 手写Python max 函数,从入门到精通
  • Kubernetes扩展
  • 提升企业内部协作的在线知识库架构与实施策略