SugarCane88 发表于 2021-6-26 14:48:51

循环和判段问题,请问这是什么原因造成的?


def howManyChick():

    """

    :return:
    """
    for i in range(0, 100):
      for j in range(0, 100):
            for k in range(0, 100):
                if i*5+j*3+k/3 == 100 and i+j+k == 100:
                  print('公鸡的数量是 {} ,母鸡的数量是 {} ,小鸡的数量是 {} 。'.format(i, j, k))


这段代码能得到正确答案,但是下面的确得不到,不解,请帮忙指点。

def howManyChick():

    """

    :return:
    """
    for i in range(0, 100):
      for j in range(0, 100):
            for k in range(0, 100):
                if i*5+j*3+k/3 == 100 and i+j+k == 100:
                  print('公鸡的数量是 {} ,母鸡的数量是 {} ,小鸡的数量是 {} 。'.format(i, j, k))
                  break
                else:
                  print('没有解!')
                  return0

这是为啥?

Daniel_Zhang 发表于 2021-6-26 15:08:49

第二种方法里面,注意这一句:

if i*5+j*3+k/3 == 100 and i+j+k == 100:

这底下跟着一个 else 语句,也就是说不满足 if 里面的条件时,就会执行 else 里面的语句

但是 else 里面有一个 return 0,直接就返回了,此时整个函数howManyChick就直接被终止了

这里可以自行研究一下 return 0 是什么意思

另外,建议不要 print('没有解!'),因为你的解的成立情况特别的少,很容易被忽视,'没有解!'这个字符串会打印很多次

直接就一个 if 语句做判断就可以了

Twilight6 发表于 2021-6-26 15:20:04


因为函数中第一次循环就执行到了 else 的 return

要知道:函数中只要遇到 return 这个函数就运行结束了,所以第一次循环就执行到了 else 的 return ,循环终止,导致只打印了一次没有解

另外这里就算删除 return 也会导致你 else 中的 print 函数 打印过多而把 if 中的 print 刷上去

所以不建议这样在循环中这样打印,因为 for 循环需要执行 10 的5次方左右的次数

SugarCane88 发表于 2021-6-26 23:07:43

Daniel_Zhang 发表于 2021-6-26 15:08
第二种方法里面,注意这一句:




谢谢您的答复,理解了。

SugarCane88 发表于 2021-6-26 23:08:15

Twilight6 发表于 2021-6-26 15:20
因为函数中第一次循环就执行到了 else 的 return

要知道:函数中只要遇到 return 这个函数就运行结束 ...

谢谢您的答复,感谢。
页: [1]
查看完整版本: 循环和判段问题,请问这是什么原因造成的?