【发布时间】:2016-05-30 22:16:26
【问题描述】:
我希望有一个数字可以分成 2 个其他数字并检查结束条件,断开每个数字直到满足条件。
我想出了下面的例子来试图弄清楚。取一个数字,然后将其分成 2 个数字:一个是原始数字乘以 2,另一个数字是原始数字除以 3,没有余数 (//)。这一直持续到一个数字大于 100、等于 6 或一个平方。
我想记录每一个被退回并在最后打印出来的链。我目前只能通过检查链中的第二个数字来做到这一点,而且我还不够聪明,无法弄清楚如何检查这两个数字。我希望每次将号码分成 2 个新号码时创建一个新链。
目前,这是我所拥有的:
import numpy as np
def check_conditions(number):
if number > 100:
return False
if number == 6:
return False
if np.sqrt(number) % 1 == 0:
return False
return True
def find_decay(number):
'''
Rule: Number is broken into two chains. First chain is
mulitplied by 2. Seconds chain is // 3. Same thing happens
to both chains unless end condition is met:
1. number is greater than 100
2. number is equal to 6
3. number is a perfect square
'''
master_chain = []
while check_conditions(number):
new_chain1 = [number * 2]
master_chain.append(new_chain1)
new_chain2 = [number // 3]
master_chain.append(new_chain2)
number = new_chain2[-1]
return master_chain
if __name__ == '__main__':
print find_decay(int(raw_input('Number: ')))
有没有人知道如何在 while 循环中检查 2 个单独的数字的条件?
【问题讨论】:
-
所以你要不断地应用
find_decay函数,直到两个数字都满足你的条件? -
这些不会是这样的“链”;您将生成一棵树,因为您在每一步都分成两部分。
-
您正在生成一棵由数字组成的树;每个数字分支到两个方向。当然,您仍然可以将所有数字添加到列表中。您需要决定是要一直沿着一个分支向下(深度优先)还是逐级扫描树(呼吸优先)。
-
深度优先,你最终会得到一个非常无聊的序列:要么你总是以
1或6结束(沿着//3分支)要么总是> 100(往下走)。 -
我认为最好先进入深度。是的,生成树比链更好。
标签: python recursion while-loop