递归 Pascals 三角形布局
Recursive Pascals Triangle Layout
所以我已经设法让 Pascals Triangle 根据打印的数字成功打印,但是,我无法使用以下方法获得正确的格式:
n = int(input("Enter value of n: "))
def printPascal(n):
if n <= 0: #must be positive int
return "N must be greater than 0"
elif n == 1: #first row is 1, so if only 1 line is wanted, output always 1
return [[1]]
else:
next_row = [1] #each line begins with 1
outcome = printPascal(n-1)
prev_row = outcome[-1]
for i in range(len(prev_row)-1): #-1 from length as using index
next_row.append(prev_row[i] + prev_row[i+1])
next_row += [1]
outcome.append(next_row) #add result of next row to outcome to print
return outcome
print(printPascal(n))
这打印为:
Enter value of n: 6
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]
这是正确的,但我希望将其格式化为直角三角形,例如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
我的问题是,我是这种语言的新手,无法确定在我的代码中将拆分等放置在何处才能使其打印成这样。
任何朝着正确方向的帮助或推动将不胜感激。
谢谢
您想使用 str.join()
函数,它打印出列表中的所有元素,并用字符串分隔:
>>> L = printPascal(6)
>>> for row in L:
... print ' '.join(map(str, row))
...
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
' '.join(list)
表示您要打印列表中的每个元素,并用 space (' '
) 分隔。
但是,列表中的每个元素都必须是字符串才能使 join
函数起作用。你的是整数。为了解决这个问题,我通过执行 map(str, row)
将所有整数更改为字符串。这相当于:
new_list = []
for item in row:
new_list.append(str(item))
或作为列表理解:
[str(item) for item in row]
所以我已经设法让 Pascals Triangle 根据打印的数字成功打印,但是,我无法使用以下方法获得正确的格式:
n = int(input("Enter value of n: "))
def printPascal(n):
if n <= 0: #must be positive int
return "N must be greater than 0"
elif n == 1: #first row is 1, so if only 1 line is wanted, output always 1
return [[1]]
else:
next_row = [1] #each line begins with 1
outcome = printPascal(n-1)
prev_row = outcome[-1]
for i in range(len(prev_row)-1): #-1 from length as using index
next_row.append(prev_row[i] + prev_row[i+1])
next_row += [1]
outcome.append(next_row) #add result of next row to outcome to print
return outcome
print(printPascal(n))
这打印为:
Enter value of n: 6
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]
这是正确的,但我希望将其格式化为直角三角形,例如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
我的问题是,我是这种语言的新手,无法确定在我的代码中将拆分等放置在何处才能使其打印成这样。 任何朝着正确方向的帮助或推动将不胜感激。 谢谢
您想使用 str.join()
函数,它打印出列表中的所有元素,并用字符串分隔:
>>> L = printPascal(6)
>>> for row in L:
... print ' '.join(map(str, row))
...
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
' '.join(list)
表示您要打印列表中的每个元素,并用 space (' '
) 分隔。
但是,列表中的每个元素都必须是字符串才能使 join
函数起作用。你的是整数。为了解决这个问题,我通过执行 map(str, row)
将所有整数更改为字符串。这相当于:
new_list = []
for item in row:
new_list.append(str(item))
或作为列表理解:
[str(item) for item in row]