songsinuo 发表于 2020-8-15 20:19:34

关于第009讲:了不起的分支和循环3 课后习题答案问题

第009讲:了不起的分支和循环3中小甲鱼的答案是不是给错了?
动动手:2. 三色球问题
有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。

小甲鱼的答案:
print('red\tyellow\tgreen')
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, '\t', yellow, '\t', green)


我认为:
print('red\tyellow\tgreen')
for red in range(0, 3):
    for yellow in range(0, 3):
      for green in range(2, 7):
            if red + yellow + green == 8:
                # 注意,下边不是字符串拼接,因此不用“+”哦~
                print(red, '\t', yellow, '\t', green)

请问哪一个答案是正确的?

小甲鱼的铁粉 发表于 2020-8-15 20:49:33

甲鱼哥这个是对的,红球有三个嘛,所以是for i in range(0, 4):
因为在这里面i是取不到4的,只能取到3,如果是for i in range(0, 3):
,那么就变成了2个红球了

鱼cpython学习者 发表于 2020-8-15 20:49:45

range()函数用于生成一个从start开始,stop结束的数字序列(可迭代对象)。注意,不包括stop。所以range(0, 3)会生成一个从0到2的数字序列,不符合程序的本意。

一抹心尘 发表于 2020-10-29 16:42:04


range(start, stop)函数将生成一个从 start 开始,到 stop 结束的整数数列,常常与for搭配,注意,这个其中是不包括stop的,也就是说按照你这个来,它是不包括3的,我想问一下,那它是不是就只会取出这样一种数列,也就是0,1,2,可是,难道不能拿3个红球吗?不能拿3个黄球吗?可以啊,怎么不行,红球黄球都取3个,然后2个绿球,加起来一共8个球,这难道不符合题意,而且,range(2, 7) 是产生 这 5 个数,这里也表示了有取到2个绿球这种情况,当然,小甲鱼的是对的。
页: [1]
查看完整版本: 关于第009讲:了不起的分支和循环3 课后习题答案问题