前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之枚举法详解

Python之枚举法详解

作者头像
楚客追梦
发布2022-12-02 15:41:08
1.8K0
发布2022-12-02 15:41:08
举报
文章被收录于专栏:网页杂谈网页杂谈

初识枚举法

枚举法

【枚举法】 将所有情况列举出来,按照筛选条件逐一进行筛选,最后得到答案的方法。

【步骤】 确定枚举的范围 根据条件进行筛选

【例】 使用枚举法找到1-100之间3的倍数。

确定枚举的范围 枚举范围: 1 -100的数字

根据条件进行筛选 筛选条件: 3的倍数

py

代码语言:javascript
复制
for i in range(1, 101):
    if i % 3 == 0:
        print(i)

range()参数

要想遍历一串连续的数字,可以使用 for 变量 in range(): 的方式,在range()的括号中设置遍历的起始值和结束值。 【注意】 结束值是取不到的哦!

  • 只填写1个参数: range(结束值) 默认从0开始,到结束值之前结束

例如: for i in range(5): i的取值是0,1,2,3,4

  • 填写2个参数: range(起始值,结束值) 从起始值开始,到结束值之前结束

例如: for i in range(1,5): i的取值是 1,2,3,4

  • 填写3个参数: range(起始值,结束值,步长) 从起始值开始,到 结束值之前 结束,每次间隔的值是步长

例如: for i in range(1,10,2): i的取值是 1,3,5,7,9

求余和整除

求余:计算一个数除以另一个数的余数,使用 % 整除:计算一个数除以另一个数的商,使用 //

【应用】

  • 判断倍数关系:余数为0

例如:如果一个数字除以3的余数是0,那么它是3的倍数

  • 求个位数字:除以10的余数

例如:35 % 10 得到5,5就是它的个位数字

  • 求2位数字中的十位数字:除以10的商

例如:29 // 10 的结果是2,就是它的十位数字

逻辑运算符

当需要对多个条件进行判断时,可以使用逻辑运算符 and 所有条件都成立时,整个判断才成立 or 只要有一个条件成立,整个判断就成立

既是3的倍数,也是5的倍数

py

代码语言:javascript
复制
if i % 3 == 0 and i % 5 == 0:

2的倍数,或者5的倍数

py

代码语言:javascript
复制
if i % 2 == 0 or i % 5 == 0:

枚举法进阶

枚举法

将枚举的范围逐一列举出来,按照筛选条件逐一进行筛选,最后得到答案的方法。

如何列举枚举范围

如果枚举的范围是有规律的数字,可以直接使用for i in range()逐一列举。 如果枚举的范围不能直接得到,需要先理清得到枚举范围的思路,再把思路转为代码。

【例】 兔子4元一只,鸭子3元一只,刚好花完10元钱,可以买几只兔子和几只鸭子? 【思路】 因为只有10元,所以兔子最多只能买两只,鸭子最多只能买3只。 【列表】列出所有可能的情况,并判断是否满足条件:

兔子

鸭子

总金额

是否满足条件

1

1

7

1

2

10

1

3

13

2

1

11

2

2

14

2

3

17

【代码】

py

代码语言:javascript
复制
for i in range(1, 3):
    for j in range(1, 4):
    if i * 4 + j * 3 == 10:
        print('兔子:',i, '鸭子:', j)

遍历列表

要想逐一得到列表中的元素,可以使用for语句遍历列表。 【格式】for 变量 in 列表: 每次循环,循环变量的值就依次为列表中的元素。

py

代码语言:javascript
复制
blue = ['scratch', 'python', 'C++']
for b in blue:
    print(b)

运行结果

scratch python C++

要在列表的所有元素前,都拼接上字符串’hi,’ 可以先遍历列表,然后每得到一个元素,就在它前面拼接上字符串。

py

代码语言:javascript
复制
blue = ['scratch', 'python', 'C++']
for b in blue:
    s = 'hi,' + b
    print(s)

运行结果

hi, scratch hi, python hi, C++

字符串索引

字符串中的每一个字符都有一个索引值。 其中,索引是从0开始,依次变大1. 使用字符串[索引]的形式,可以得到字符串中的字符。

字符串和列表的相似之处: 索引都是从0开始,依次变大1。 使用字符串[索引] 可以得到字符串中的字符: 使用 列表[索引] 可以得到列表中的元素。

字符串和列表的不同: 列表可以通过 列表[索引]=值的方式修改列表元素。 字符串中的字符不能被修改,使用字符串[索引]=值时程序会报错。

组合问题

要把两个列表中的元素两两进行组合,可以使用for循环嵌套。

py

代码语言:javascript
复制
blue = ['嘻嘻', '痴痴']
red = ['哈嘿', '痴想', '嘻笑']
for b in blue:
    for r in red:
        p= b + r
        print(p)
枚举法详解
枚举法详解

枚举法应用

枚举

枚举:就是将结果一一列举出来。在使用枚举之前,需要先确定好枚举的范围。

调料组合

【思考】假设烤鸡的美味程度是所有配料的克数之和,那么要做出指定美味度的烤鸡,该如何组合调料呢? 【例1】使用奥尔良酱和胡椒各1-5g制作出美味度为8的烤鸡

py

代码语言:javascript
复制
for i in range(1,6):
    for j in range(1,6):
        if i + j == 8:
            print(i, j)

【例2】使用黄油1-4g,蜂蜜1-6g和苹果汁1-8g制作出美味度 为15的烤鸡

py

代码语言:javascript
复制
for i in range(1,5):
    for j in range(1,7):
        for k in range(1, 9):
            if i + j == 8:
                print(i, j)

【总结】 枚举两种调料的组合,使用2层for循环 枚举三种调料的组合,使用3层for循环

采购方案

【思考】 用12枚金币采购蜂蜜和奥尔良酱,其中每瓶蜂蜜需要2枚金币,每瓶奥尔良酱4枚金币。那么,蜂蜜和奥尔良酱各买几瓶,可以把金币正好花完?(注意两种都要买哦)

蜂蜜的单价是2枚金币,如果12枚金币都用来买蜂蜜, 那么最多可以买6瓶;蜂蜜的采购范围是1-6; 奥尔良酱的单价是4枚金币,如果12枚金币都用来买蜂 蜜,那么最多可以买3瓶;奥尔良酱的采购范围是1-3;

py

代码语言:javascript
复制
for i in range(1,7):
    for j in range(1,4):
        if i * 2 + j * 4 == 12:
            print(i, j)

【总结】 有时,枚举的范围没有直接给出,我们需要根据题目中的信息来计算

金币分配方案

【思考】 禾木和乌拉乎共收入了12枚金币,每个人都要分至少3枚金币,使用枚举法打印出所有的分配方案吧 【解法一】 根据最少3枚,最多12枚来枚举

py

代码语言:javascript
复制
for i in range(3,13):
    for j in range(3,13):
        if i + j == 12:
            print(i, j)

这种方法中,循环变量 i 和 j 都有10个值,条件判断会执行10*10=100次

【解法二】缩小枚举范围 假如乌拉乎得到了最少的3枚金币,那禾木最多能得到9枚金币,反过来也一样。因此每个人的金币数量是3到9枚。

py

代码语言:javascript
复制
for i in range(3,10):
    for j in range(3,10):
        if i + j == 12:
            print(i, j)

这种方法中,循环 变量 i 和 j 都有7个值,条件判断会执行7*7=49次 【总结】 有时,可以利用题目的信息来缩小枚举范围,这样可以提高筛选速度~

鸡兔同笼

大约一千五百年前,我国古代数学名著《孙子算经》中记载了一道“鸡兔同笼”的问题: “今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”

数千年过去了,我们已经学会使用计算机来帮忙完成一些数学计算,那么如何用Python来解决鸡兔同笼问题呢?

【题目翻译】笼子里有若干只鸡和兔,从上面数有35个头,从下面数有94只脚,问鸡和兔各有几只?

【分析】首先确定循环的边界:全部为兔,最多23只,全部为鸡47只。兔的边界小比鸡的边界小的多,我们从兔开始枚举。

py

代码语言:javascript
复制
for t in range(24):
    if 4*t + 2*(35-t) == 94:
        print('兔:',t, '只 /', '鸡:', 35-t, '只')

运行结果

兔: 12只 / 鸡: 23只

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初识枚举法
    • 枚举法
      • range()参数
        • 求余和整除
          • 逻辑运算符
          • 枚举法进阶
            • 枚举法
              • 如何列举枚举范围
                • 遍历列表
                  • 字符串索引
                    • 组合问题
                    • 枚举法应用
                      • 枚举
                        • 调料组合
                          • 采购方案
                            • 金币分配方案
                              • 鸡兔同笼
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档