求解鸡兔同笼问题
经典问题,不需要我做太多描述了把,如何用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语句,我还是有些不理解,故请大咖们给予解答? break只能跳出离它最近的循环 break 语句用来跳出循环,那么什么是循环语句呢?就是 for 或 while,所以 break 是跳出 for 语句,而 if 是判断语句。
if answer 用来跳出另外一个 for 语句(因为有两个 for。
一个 break 只能跳出一个 for,所以外面再多一个判断语句 if answer 用来跳出最外层的 for 语句。 if answer就相当于 if answer不等于0 本帖最后由 傻眼貓咪 于 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}只") 傻眼貓咪 发表于 2022-6-13 10:10
我的优雅代码:
a >> 1 < 0什么意思呢
.5*a<0??那就直接a<0呗 wp231957 发表于 2022-6-13 10:23
a >> 1 < 0什么意思呢
.5*a
a >> 1 是位元运算右移,如同 a // (2^1) wp231957 发表于 2022-6-13 10:23
a >> 1 < 0什么意思呢
.5*a
也可以直接 a < 0 吧,因为我没有想这么多,直接就写了,哈哈哈 傻眼貓咪 发表于 2022-6-13 10:26
a >> 1 是位元运算右移,如同 a // (2^1)
地板除,我还以为是.5呢 感谢@傻眼貓咪 解答了我对于break的疑问,同时感谢你提供的优雅的代码,复制了可以运行,但功力有限,看不懂{:5_96:} wangxiaolvshi 发表于 2022-6-13 11:09
感谢@傻眼貓咪 解答了我对于break的疑问,同时感谢你提供的优雅的代码,复制了可以运行,但功力有限,看不 ...
有啥看不懂的,不就是初中的解方程吗 他用到的a>>1,位元运算右移,我就不懂了,还没学到这里 wangxiaolvshi 发表于 2022-6-13 18:25
他用到的a>>1,位元运算右移,我就不懂了,还没学到这里
右移是指二进制的右移
比如10进制的10转二进制是1010
那么右移一位变成0101转10进制就是5
0101再右移一位是0010转10进制就是2
所以右移一位就相当于地板除 //2
页:
[1]