wangxiaolvshi 发表于 2022-6-13 09:22:42

求解鸡兔同笼问题

经典问题,不需要我做太多描述了把,如何用python优雅的完成,老师给了head = int(input("请输入头数:"))
foot = int(input("请输入脚数:"))
ji = 0
tu = 0
answer = False

for ji in range(head + 1):
    for tu in range(head + 1):
      if ji + tu == head and 2 * ji + 4 * tu == foot:
            answer = True
            break   # break是跳出本层if循环,还是可以跳出for循环?
    if answer:# 这里的if answer是起什么作用啊?
      break
if answer:
    print(f"鸡有{ji}只,兔子有{tu}只")
else:
    print("此题无解,请重新输入")
一个方案,但其中的break语句,我还是有些不理解,故请大咖们给予解答?

wp231957 发表于 2022-6-13 09:47:10

break只能跳出离它最近的循环

傻眼貓咪 发表于 2022-6-13 09:51:53

break 语句用来跳出循环,那么什么是循环语句呢?就是 for 或 while,所以 break 是跳出 for 语句,而 if 是判断语句。

if answer 用来跳出另外一个 for 语句(因为有两个 for。
一个 break 只能跳出一个 for,所以外面再多一个判断语句 if answer 用来跳出最外层的 for 语句。

wp231957 发表于 2022-6-13 09:52:47

if answer就相当于   if answer不等于0

傻眼貓咪 发表于 2022-6-13 10:10:51

本帖最后由 傻眼貓咪 于 2022-6-13 10:14 编辑

我的优雅代码:head = int(input("请输入头数:"))
foot = int(input("请输入脚数:"))
a = foot - 2 * head
if a&1 or a >> 1 < 0 or head - (a >> 1) < 0:
        print("此题无解,请重新输入")
else:
        print(f"鸡有{head - (a >> 1)}只,兔子有{a >> 1}只")

wp231957 发表于 2022-6-13 10:23:51

傻眼貓咪 发表于 2022-6-13 10:10
我的优雅代码:

a >> 1 < 0什么意思呢
.5*a<0??那就直接a<0呗

傻眼貓咪 发表于 2022-6-13 10:26:57

wp231957 发表于 2022-6-13 10:23
a >> 1 < 0什么意思呢
.5*a

a >> 1 是位元运算右移,如同 a // (2^1)

傻眼貓咪 发表于 2022-6-13 10:28:22

wp231957 发表于 2022-6-13 10:23
a >> 1 < 0什么意思呢
.5*a

也可以直接 a < 0 吧,因为我没有想这么多,直接就写了,哈哈哈

wp231957 发表于 2022-6-13 10:29:10

傻眼貓咪 发表于 2022-6-13 10:26
a >> 1 是位元运算右移,如同 a // (2^1)

地板除,我还以为是.5呢

wangxiaolvshi 发表于 2022-6-13 11:09:44

感谢@傻眼貓咪 解答了我对于break的疑问,同时感谢你提供的优雅的代码,复制了可以运行,但功力有限,看不懂{:5_96:}

wp231957 发表于 2022-6-13 11:11:33

wangxiaolvshi 发表于 2022-6-13 11:09
感谢@傻眼貓咪 解答了我对于break的疑问,同时感谢你提供的优雅的代码,复制了可以运行,但功力有限,看不 ...

有啥看不懂的,不就是初中的解方程吗

wangxiaolvshi 发表于 2022-6-13 18:25:03

他用到的a>>1,位元运算右移,我就不懂了,还没学到这里

wp231957 发表于 2022-6-13 18:30:06

wangxiaolvshi 发表于 2022-6-13 18:25
他用到的a>>1,位元运算右移,我就不懂了,还没学到这里

右移是指二进制的右移
比如10进制的10转二进制是1010
那么右移一位变成0101转10进制就是5
0101再右移一位是0010转10进制就是2
所以右移一位就相当于地板除 //2
页: [1]
查看完整版本: 求解鸡兔同笼问题