【问题标题】:Pascal's triangle in pythonpython中的帕斯卡三角形
【发布时间】:2019-02-23 13:59:00
【问题描述】:

所以我正在制作一个帕斯卡三角形,但我无法弄清楚为什么这段代码不起作用。它打印出这样的东西

[]
[1]
[1, 2]
[1, 3, 3]
[1, 4, 6, 4]
[1, 5, 10, 10, 5]
[1, 6, 15, 20, 15, 6]
[1, 7, 21, 35, 35, 21, 7]
[1, 8, 28, 56, 70, 56, 28, 8]
[1, 9, 36, 84, 126, 126, 84, 36, 9]

这几乎是正确的,但是似乎这些值似乎是行号太高,所以 1,2 ,如果将 2 计为第一行,将 1 计为第 0 行,则 2 是 1 值太高,因为它在第一行,应该是 1,1。下一行应该是 1,2,1,第一个值是正确的,但是下一行是 1 的值太高,后面是 2 的值太高。

我尝试执行 append(a-i) 之类的操作,但它似乎不起作用,您如何才能正确打印?

def triangle(rows):

    for rownum in range (rows):
        newValue=1
        PrintingList = list()
        for iteration in range (rownum):
            newValue = newValue * ( rownum-iteration ) * 1 / ( iteration + 1 )
            PrintingList.append(int(newValue))
        print(PrintingList)
    print()

提前致谢。

【问题讨论】:

  • a 是什么?你的意思是newValue
  • 我会看看:en.wikipedia.org/wiki/…,它描述了如何逐一计算三角形的行。

标签: python


【解决方案1】:

我会将PrintingList = list() 更改为PrintingList = [newValue]

triangle(10) 然后为您提供以下信息:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

这是一个有效的帕斯卡三角形。

【讨论】:

  • 谢谢,这似乎已经解决了这个问题。还不太熟悉列表的概念,更熟悉数组。
  • @Don:如果你有 Java 背景,那么 Python 列表会更像 Java 的 ArrayList 数据结构,而不是简单的数组。事实上,随着您开始对 Python 越来越熟悉,您可能想看看generators 的概念。
  • 我愿意,谢谢你的建议,我真的没有这么想。
【解决方案2】:

我下面的代码有一些打印语句,有助于显示它是如何工作的。我在 IPython 笔记本中运行它。我的输出如下所示:

                   [1]                        
                  [1, 1]                      
                [1, 2, 1]                     
               [1, 3, 3, 1]                   
             [1, 4, 6, 4, 1]        

除了输出看起来应该的事实之外,计算方法实际上遵循帕斯卡三角形的原始定义,其中每一行都是从上面的一个构建的。 (有些方法使用组合数/阶乘,这可能会给出正确的答案,但不遵循帕斯卡三角的原始精神,afaik。)

代码如下:

def MakeTriangle(numberOfRows):
    """the print statements are not required. They are just to help see how it works."""
    triangle=[[1]] #base case (i.e., 0th row)
    print 'triangle[-1] is ', triangle[-1]
    for _x in range(numberOfRows - 1): #_x isn't used
        zipperd = zip([0] + triangle[-1], triangle[-1] + [0]) 
        print "zipperd: ", zipperd
        newRow = map(sum, zipperd) 
        triangle.append(list(newRow))
        print 'triangle[-1] is ', triangle[-1] #to help see how tri is built
    print "\n\n"
    return triangle

for row in MakeTriangle(5):
    print('{0:^50}'.format(row))

要开始了解它的工作原理,请注意上述函数zipmap 的以下简单案例:

x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
print zipped #output is [(1, 4), (2, 5), (3, 6)]
print map(sum, zipped) #output is [5, 7, 9]

使用 MakeTriangle 函数中的打印语句,您将获得此输出以帮助您进一步了解代码的工作原理:

triangle[-1] is  [1]
zipperd:  [(0, 1), (1, 0)]
triangle[-1] is  [1, 1]
zipperd:  [(0, 1), (1, 1), (1, 0)]
triangle[-1] is  [1, 2, 1]
zipperd:  [(0, 1), (1, 2), (2, 1), (1, 0)]
triangle[-1] is  [1, 3, 3, 1]
zipperd:  [(0, 1), (1, 3), (3, 3), (3, 1), (1, 0)]
triangle[-1] is  [1, 4, 6, 4, 1]

在查看此输出的同时阅读下面的文档,它将开始有意义:

如果仍然没有意义,请将这些打印语句粘贴到 MakeTriangle 的 for 循环中:

    print "[0] + triangle[-1] is ", [0] + triangle[-1]
    print "triangle[-1] + [0] is ", triangle[-1] + [0]

请注意,对齐(居中)打印是使用http://docs.python.org/2/library/string.html#format-examples 中的示例完成的。

另见https://stackoverflow.com/a/19895685/463994

【讨论】:

    【解决方案3】:

    我收到一个错误,但您应该尝试以下方法:

    row1 = whatever
    
    pascal = [[row/(colum*(row-colum) for row in range(0, colum)] for row in range(1, row1)]]
    

    【讨论】:

      【解决方案4】:
      import math
      
      coef = 1
      
      rows = int(input("Enter the number of rows :"))
      
      stringVal = ""
      
      for i in range(rows):
      
          for space in range(1,rows - i + 1):
      
              stringVal = stringVal + "  "
          for j in range(0,i + 1):
              if(i == 0 or j == 0):
                  coef = 1
              else:
                  coef = coef * (i - j + 1) / j
      
              temp = coef
              TotalSpace=0
              while(temp != 0):
                  TotalSpace = TotalSpace + 1
                  temp = int(math.floor(temp / 10))
              p=0
              while((p+TotalSpace)!=4):
                  stringVal = stringVal + " "
                  p=p+1
              stringVal = stringVal + str(int(math.floor(coef)))
          stringVal = stringVal + "\n"
      print(stringVal)
      

      【讨论】:

        猜你喜欢
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 2015-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多