【问题标题】:Triangular Numbers Pattern | FooBar三角数字模式 |富吧
【发布时间】:2020-05-06 16:56:35
【问题描述】:

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

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)

while循环下的break按预期工作

我可以生成第一行,但是 for 循环中的 range 并没有移动到它停留在 1 的下一个迭代值。

我尝试在 append 之后在末尾添加 continue ,但是循环仍然卡住。

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

任何线索都会有所帮助

【问题讨论】:

标签: python algorithm for-loop while-loop


【解决方案1】:

当使用默认参数调用函数并在调试器中查看它时,在第二次迭代中它会生成 [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]

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我能够解决它,我采用的方法非常幼稚,不得不对模式进行一些研究

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

      在整个过程中,所需模式中的数字倾向于跟随趋势,并且是三角数的直接导数

      代码片段 --

      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
      

      该模式是 Google Foobar Challenge 的一部分

      【讨论】:

        猜你喜欢
        • 2016-02-09
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 2020-09-07
        • 2013-05-20
        • 2021-12-16
        • 2020-01-28
        • 1970-01-01
        相关资源
        最近更新 更多