Python:打印 1 行帕斯卡三角形
Python: printing 1 row of Pascal Triangle
刚开始学习 python 并且在理解所提供的解决方案时遇到了一些困难?
它与帕斯卡三角形有关,并在要求用户“输入行号”时打印行
提供了一些解决方案,其余部分我适合(第一个 for 循环)..
n=int(input("Enter a row number: "))
a=[]
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1,i):
a[i].append(a[i-1][j-1]+a[i-1][j])
if(n!=0):
a[i].append(1)
for i in range(n):
print(" "*(n-i),end=" ",sep=" ")
for j in range(0,i+1):
print('{:4}'.format(a[i][j]),end=" ")
print()
我的问题是代码的哪一部分正在打印三角形结构?我假设最后一个for循环?
另外,如果我只想打印 1 行,我会改变什么?
例如:输入:5,输出为 [1 4 6 4 1 ]
谢谢,任何 help/advice 将不胜感激
你是对的,最后一个循环是打印三角形的每一行。要打印任何特定的行,jut 运行 具有特定值 i
的第二个循环。
在此之前,有一个更简单的方法可以更进一步。让我们考虑以下代码的输出:
n = 7
a = []
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1, i):
a[i].append(a[i - 1][j - 1] + a[i - 1][j])
if (n != 0):
a[i].append(1)
print(a)
输出为:
[[1, 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]]
从这个二维数组中,您可以决定要打印的单个元素。例如,在索引 4 处,您有 [1, 4, 6, 4, 1]
。从数组 a
中的这些值,您可以找出要打印的行。
现在 5
如果你想要 [1, 4, 6, 4, 1]
,你可以简单地执行以下操作:
n = 7
a = []
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1, i):
a[i].append(a[i - 1][j - 1] + a[i - 1][j])
if (n != 0):
a[i].append(1)
to_print = 5
for i in range(0, len(a[to_print-1])):
print(a[to_print-1][i], end=" ")
输出将是:
1 4 6 4 1
@riam_98,你想试试这个版本吗:它简化了 logic/flow 以利用 Pascal
关键特性。
可以在此处找到更多阅读材料 - https://en.wikipedia.org/wiki/Pascal's_triangle
from typing import List
def getRow(index: int) -> List[int]:
row = [1] # firsts row
if index == 1: return row
for i in range(index-1):
for j in range(i, 0, -1):
row[j] = row[j] + row[j-1]
row.append(1)
return row
print(getRow(2))
print(getRow(3))
print(getRow(4))
print(getRow(5))
输出:
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1] # 5th
if I wanted to just print 1 row, what would I be changing?
我相信到目前为止给出(和接受)的答案做太多工作来获取单个行的值。如果我们查看@DanielHao 推荐的维基百科页面中的Calculating a row or diagonal by itself,我们可以生成一个更简单的解决方案:
n = int(input("Enter a row number: "))
numbers = [1]
for k in range(1, n):
numbers.append(numbers[-1] * (n - k) // k)
print(numbers)
我们不需要生成 整个三角形 直到我们想要的行,也不需要使用 嵌套循环 来计算它。
输出
> python3 test.py
Enter a row number: 5
[1, 4, 6, 4, 1]
> python3 test.py
Enter a row number: 10
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
>
which part of the code is printing the triangle structure? I assume
the last for loop?
是的,但请注意,由于数字宽度的硬编码,这是一个脆弱的、有限的解决方案:
print('{:4}'.format(a[i][j]),end=" ")
对于较小的值,三角形是不平衡的,对于大于 16 的值,它会失去所有对称性。这是 将其输出与您询问的解决方案进行比较的示例。
刚开始学习 python 并且在理解所提供的解决方案时遇到了一些困难? 它与帕斯卡三角形有关,并在要求用户“输入行号”时打印行
提供了一些解决方案,其余部分我适合(第一个 for 循环)..
n=int(input("Enter a row number: "))
a=[]
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1,i):
a[i].append(a[i-1][j-1]+a[i-1][j])
if(n!=0):
a[i].append(1)
for i in range(n):
print(" "*(n-i),end=" ",sep=" ")
for j in range(0,i+1):
print('{:4}'.format(a[i][j]),end=" ")
print()
我的问题是代码的哪一部分正在打印三角形结构?我假设最后一个for循环? 另外,如果我只想打印 1 行,我会改变什么? 例如:输入:5,输出为 [1 4 6 4 1 ]
谢谢,任何 help/advice 将不胜感激
你是对的,最后一个循环是打印三角形的每一行。要打印任何特定的行,jut 运行 具有特定值 i
的第二个循环。
在此之前,有一个更简单的方法可以更进一步。让我们考虑以下代码的输出:
n = 7
a = []
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1, i):
a[i].append(a[i - 1][j - 1] + a[i - 1][j])
if (n != 0):
a[i].append(1)
print(a)
输出为:
[[1, 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]]
从这个二维数组中,您可以决定要打印的单个元素。例如,在索引 4 处,您有 [1, 4, 6, 4, 1]
。从数组 a
中的这些值,您可以找出要打印的行。
现在 5
如果你想要 [1, 4, 6, 4, 1]
,你可以简单地执行以下操作:
n = 7
a = []
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1, i):
a[i].append(a[i - 1][j - 1] + a[i - 1][j])
if (n != 0):
a[i].append(1)
to_print = 5
for i in range(0, len(a[to_print-1])):
print(a[to_print-1][i], end=" ")
输出将是:
1 4 6 4 1
@riam_98,你想试试这个版本吗:它简化了 logic/flow 以利用 Pascal
关键特性。
可以在此处找到更多阅读材料 - https://en.wikipedia.org/wiki/Pascal's_triangle
from typing import List
def getRow(index: int) -> List[int]:
row = [1] # firsts row
if index == 1: return row
for i in range(index-1):
for j in range(i, 0, -1):
row[j] = row[j] + row[j-1]
row.append(1)
return row
print(getRow(2))
print(getRow(3))
print(getRow(4))
print(getRow(5))
输出:
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1] # 5th
if I wanted to just print 1 row, what would I be changing?
我相信到目前为止给出(和接受)的答案做太多工作来获取单个行的值。如果我们查看@DanielHao 推荐的维基百科页面中的Calculating a row or diagonal by itself,我们可以生成一个更简单的解决方案:
n = int(input("Enter a row number: "))
numbers = [1]
for k in range(1, n):
numbers.append(numbers[-1] * (n - k) // k)
print(numbers)
我们不需要生成 整个三角形 直到我们想要的行,也不需要使用 嵌套循环 来计算它。
输出
> python3 test.py
Enter a row number: 5
[1, 4, 6, 4, 1]
> python3 test.py
Enter a row number: 10
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
>
which part of the code is printing the triangle structure? I assume the last for loop?
是的,但请注意,由于数字宽度的硬编码,这是一个脆弱的、有限的解决方案:
print('{:4}'.format(a[i][j]),end=" ")
对于较小的值,三角形是不平衡的,对于大于 16 的值,它会失去所有对称性。这是