三角形数字模式|FooBar



我正在尝试使用以下代码创建以下模式

7
4 8
2 5 9
1 3 6 10
def createpattern(n=4,max_val=10):
pattern = []
for x in range(1,n+1):
temp = []
step = 2
val = x
bool_flag = 1
while bool_flag == 1:
temp += [val]
if val == max_val:
print('----->')
bool_flag = 0
print('before break')
break
else:
val = val + step
step += 1
print('after break')
print(temp)
max_val = max_val - 1
pattern.append(temp)

当循环按预期工作时出现中断

然而,我能够生成第一行,for循环中的范围没有移动到下一个迭代值,它停留在1。

我试着在追加后的末尾添加一个continue,但是循环仍然被卡住了。

我无法找到一种方法来纠正上面的嵌套循环,理想情况下,它应该移动到下一个迭代值,我无法找到的原因

任何线索都有助于

当使用默认参数调用函数并在调试器中查看它时,在第二次迭代中,它会产生[2, 4, 7, 11, 16 ...并永远继续。因为这些值都不等于max_val,所以val == max_val永远不会为真。将其更改为if val >= max_val:后,我得到以下输出:

----->
before break
after break
[1, 3, 6, 10]
----->
before break
after break
[2, 4, 7, 11]
----->
before break
after break
[3, 5, 8]
----->
before break
after break
[4, 6, 9]

由于if val == max_val条件和不正确的步长计算,循环被卡住。创建第二行时,step的初始值应该是3,而不是2。当前产生的结果是[2, 4, 7, 11, ...],循环永远不会终止,因为数组中从来没有9。这也适用于其他行。

我能够解决它,我所采取的方法非常天真,必须研究一些模式

任何图案序列公式的有用链接都可以在这里找到-这里是

在整个过程中,所需模式中的数字往往遵循趋势,并且是三角数的直接导数

代码段--

def createpattern(x, y):
pattern = []
traingular_nums = [n*(n+1)/2 for n in range(1,y+x+1)]
pattern.append(traingular_nums)
for i in range(2,x+y+1):
k = (i*(i-1)/2) + 1  <----- Formulae for Triangular Numbers
temp = []
temp.append(k)
for z in range(1,len(pattern[i-2])-1):
v = temp[z-1] + pattern[i-2][z+1] - pattern[i-2][z]
temp.append(v)
pattern.append(temp)
return pattern

该模式是谷歌Foobar挑战的一部分

最新更新