checkily 发表于 2018-1-22 15:31:56

鸡兔问题

head=int(input("鸡兔数量共有:"))
foot=int(input("鸡和兔的脚共有:"))
chicken=0
rabbit=head-chicken
for chicken in range(head):
    if foot==chicken*2+rabbit*4:
      print("chicken have:%d" % chicken)
      print("rabbit have:%d" % rabbit)
    else:
      print("not match")
    break

为什么算不出的?哪里错了?

orino 发表于 2018-1-22 15:57:58

代码的逻辑错了,你这个只比较一次,比较不成功直接输出失败退出
head=int(input("鸡兔数量共有:"))
foot=int(input("鸡和兔的脚共有:"))

for chicken in range(head):
    rabbit=head-chicken
    if foot==chicken*2+rabbit*4:
      print("chicken have:%d" % chicken)
      print("rabbit have:%d" % rabbit)
      break
else:
    print("not match")

checkily 发表于 2018-1-22 16:45:15

orino 发表于 2018-1-22 15:57
代码的逻辑错了,你这个只比较一次,比较不成功直接输出失败退出

为什么第10行的else要写在外面?这个else不是应该跟上面的if同级吗?

walter.kendy 发表于 2018-1-22 17:32:30

请参考:
hen_rabbit_cnt=int(input("鸡兔数量共计:"))
foot=int(input("鸡兔的脚数有:"))
hen=0
for hen in range(hen_rabbit_cnt):
    rabbit=hen_rabbit_cnt - hen   #兔子的数量是循环开始后才开始的,而不是在循环前就定义好,如果那样兔子的数量就永远是定义鸡兔的总数
    if foot==hen*2 + rabbit*4:
      print("hen have:%d"%hen )
      print("rabbit have:%d"% rabbit)
      break
    else:
      print("not match")

orino 发表于 2018-1-22 17:57:20

本帖最后由 orino 于 2018-1-22 17:58 编辑

checkily 发表于 2018-1-22 16:45
为什么第10行的else要写在外面?这个else不是应该跟上面的if同级吗?

那个是for语句的else特殊用法,执行完for语句之后才会执行else语句,如果中途break就不会执行else。
你原来的逻辑是,每次如果计算对不对,都会输出一个不匹配,而且兔子数量还不会增加。改成这个之后,会增加兔子数量,并且只有全部计算完之后才会输出不匹配,如果中间有计算成功就会直接break不会执行else输出不匹配

像番茄加两个蛋 发表于 2018-1-22 21:37:45

print('''鸡兔同笼问题:鸡兔一共有35头,脚有94只,问鸡兔各有几只?''')
for chickens in range(1,36):
    for rabbits in range(1,36):
      if 2*chickens+4*rabbits==94 and chickens + rabbits == 35:
            print('鸡的数量是{},兔子的数量是{}'.format(chickens,rabbits))

checkily 发表于 2018-1-22 23:20:03

像番茄加两个蛋 发表于 2018-1-22 21:37


谢谢

checkily 发表于 2018-1-22 23:20:43

orino 发表于 2018-1-22 17:57
那个是for语句的else特殊用法,执行完for语句之后才会执行else语句,如果中途break就不会执行else。
...

明白了,用来else还可以跟for搭配使用。
页: [1]
查看完整版本: 鸡兔问题