鱼C论坛

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

[已解决]鸡兔问题

[复制链接]
发表于 2018-1-22 15:31:56 | 显示全部楼层 |阅读模式

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

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

x
  1. head=int(input("鸡兔数量共有:"))
  2. foot=int(input("鸡和兔的脚共有:"))
  3. chicken=0
  4. rabbit=head-chicken
  5. for chicken in range(head):
  6.     if foot==chicken*2+rabbit*4:
  7.         print("chicken have:%d" % chicken)
  8.         print("rabbit have:%d" % rabbit)
  9.     else:
  10.         print("not match")
  11.     break
复制代码


为什么算不出的?哪里错了?
最佳答案
2018-1-22 15:57:58
代码的逻辑错了,你这个只比较一次,比较不成功直接输出失败退出
  1. head=int(input("鸡兔数量共有:"))
  2. foot=int(input("鸡和兔的脚共有:"))

  3. for chicken in range(head):
  4.     rabbit=head-chicken
  5.     if foot==chicken*2+rabbit*4:
  6.         print("chicken have:%d" % chicken)
  7.         print("rabbit have:%d" % rabbit)
  8.         break
  9. else:
  10.     print("not match")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-22 15:57:58 | 显示全部楼层    本楼为最佳答案   
代码的逻辑错了,你这个只比较一次,比较不成功直接输出失败退出
  1. head=int(input("鸡兔数量共有:"))
  2. foot=int(input("鸡和兔的脚共有:"))

  3. for chicken in range(head):
  4.     rabbit=head-chicken
  5.     if foot==chicken*2+rabbit*4:
  6.         print("chicken have:%d" % chicken)
  7.         print("rabbit have:%d" % rabbit)
  8.         break
  9. else:
  10.     print("not match")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-22 16:45:15 | 显示全部楼层
orino 发表于 2018-1-22 15:57
代码的逻辑错了,你这个只比较一次,比较不成功直接输出失败退出

为什么第10行的else要写在外面?这个else不是应该跟上面的if同级吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-22 17:32:30 | 显示全部楼层
请参考:
  1. hen_rabbit_cnt=int(input("鸡兔数量共计:"))
  2. foot=int(input("鸡兔的脚数有:"))
  3. hen=0
  4. for hen in range(hen_rabbit_cnt):
  5.     rabbit=hen_rabbit_cnt - hen   #兔子的数量是循环开始后才开始的,而不是在循环前就定义好,如果那样兔子的数量就永远是定义鸡兔的总数
  6.     if foot==hen*2 + rabbit*4:
  7.         print("hen have:%d"%hen )
  8.         print("rabbit have:%d"% rabbit)
  9.         break
  10.     else:
  11.         print("not match")
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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输出不匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-22 21:37:45 | 显示全部楼层
  1. print('''鸡兔同笼问题:鸡兔一共有35头,脚有94只,问鸡兔各有几只?''')
  2. for chickens in range(1,36):
  3.     for rabbits in range(1,36):
  4.         if 2*chickens+4*rabbits==94 and chickens + rabbits == 35:
  5.             print('鸡的数量是{},兔子的数量是{}'.format(chickens,rabbits))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-22 23:20:03 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-22 23:20:43 | 显示全部楼层
orino 发表于 2018-1-22 17:57
那个是for语句的else特殊用法,执行完for语句之后才会执行else语句,如果中途break就不会执行else。
...

明白了,用来else还可以跟for搭配使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 11:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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