鱼C论坛

 找回密码
 立即注册
查看: 1731|回复: 7

[已解决]第九课后作业三色球的问题

[复制链接]
发表于 2018-1-24 02:55:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我最怕起名字 于 2018-1-24 05:23 编辑

有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这
12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种
颜色搭配。

print('red\tyellow\tblue')
for red in range(0, 4):
    for yellow in range(0, 4):
        for green in range(2, 7):
            if red + yellow + green == 8:
                print(red, '   ', yellow, '   ', green)


就是这个,题目是说红球3个,蓝球3个,绿球6个,随机拿出8个,列出所有组合
首先就是,绿球明明是6个,为什么答案上是range[2,7] ,这不是五个球吗?

还有就是。。。这个程序看不懂怎么循环的。。。
最佳答案
2018-1-24 10:59:00
不用管几个for在一起,看清每个for循环了几次就行了,
  1. print('red\tyellow\tblue')
  2. for red in range(0, 4):#red在0,4之间循环了4次得出0,1,2,3四个参数
  3.     for yellow in range(0, 4):#yellow在0,4之间循环了4次得出0,1,2,3四个参数
  4.         for green in range(2, 7):#green在2,7直接循环5次得出2,3,4,5,6五个参数
  5.             if red + yellow + green == 8:#这就是随即组合了,把三个数加起来等于8的组合打印出来就好了,如果三个加起来等于8
  6.                 print(red, '   ', yellow, '   ', green)#打印出每个组合
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-24 03:45:38 | 显示全部楼层
不懂+1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 09:11:35 | 显示全部楼层
因为一共要取出8个球

绿球一共6个,所以最多6个绿球,
如果红球取出3个,黄球也取3个也只够6个,所以绿球至少需要取出2个
所以green的范围就是2~6,也就是 range(2,7)

而红黄两色球的范围都是0~3,也就是 range(4)

最后加上判断条件 if red + yellow + green == 8

即可得到最终的解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-24 10:25:38 | 显示全部楼层
range(2, 7)记住是左边能取到,右边取不到,相当于2到6
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 10:51:44 | 显示全部楼层
本帖最后由 大麦miracle 于 2018-1-24 10:54 编辑

不是按你数的个数来判断几个球的,按你那种数数,黄红分别就4个球了0,1,2。3吗,实际上是按照每次取球的球的个数,比如0个红2个黄6个绿球等等组合,因为最终要8个球,当红球最少0个的时候,绿球最多6个,黄球2个,因为绿球你最多取六个,所以是到7结束不包括7,因为你取不到7个绿球,而红球黄球,最少可以一个都不取,就是从0开始,最多取3个,所以到4结束不包括4即(0,4),当红黄分别取最多的时候,绿球只能取2个球,所以绿球的次数是2到7不包括7即(2,7)!不是说你数23456五个数然后五个球的,这里面的23456是每次取球取到分别绿球的次数!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-24 10:59:00 | 显示全部楼层    本楼为最佳答案   
不用管几个for在一起,看清每个for循环了几次就行了,
  1. print('red\tyellow\tblue')
  2. for red in range(0, 4):#red在0,4之间循环了4次得出0,1,2,3四个参数
  3.     for yellow in range(0, 4):#yellow在0,4之间循环了4次得出0,1,2,3四个参数
  4.         for green in range(2, 7):#green在2,7直接循环5次得出2,3,4,5,6五个参数
  5.             if red + yellow + green == 8:#这就是随即组合了,把三个数加起来等于8的组合打印出来就好了,如果三个加起来等于8
  6.                 print(red, '   ', yellow, '   ', green)#打印出每个组合
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 17:56:30 | 显示全部楼层
大麦miracle 发表于 2018-1-24 10:59
不用管几个for在一起,看清每个for循环了几次就行了,

感谢大神详细讲解!这种for循环,最近遇到好几个,都是几个for叠加在一起,搞的有点蒙哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-25 10:45:11 | 显示全部楼层
我最怕起名字 发表于 2018-1-24 17:56
感谢大神详细讲解!这种for循环,最近遇到好几个,都是几个for叠加在一起,搞的有点蒙哈哈哈

我也是新手,只是比你先接触了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-6 06:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表