不同版本的 Pascal 三角形,列表,python
different version of pascal triangle, list, python
我是 python 的初学者,我必须做一个特殊版本的帕斯卡三角形...特殊的方式是元素不相加而是相乘。
这里是例子: 所以函数定义为multiplicative_pascal(start: int , 高度: 整数) -> 列表[列表[整数]]
对于 start = 2
和 height = 5
函数应该 return
[[2 ], [2, 2], [2, 4, 2], [2, 8, 8, 2], [2, 16, 64, 16, 2]]
我的思路和代码
首先,我尝试制作普通的帕斯卡三角形,然后我想我只需将 + 替换为 * 并将 1(帕斯卡三角形的正常起点)替换为变量开始
def multiplicative_pascal(start: int, height: int) -> List[List[int]]:
Pascal_list =[[start]] #FIrst entry Defined to start
for i in range(start, height+1):
temp_list =[]
for j in range(i+1): #+1 As we are considering last element
if(j==0):#First Element = start
temp_list.append(start)
continue
elif(j == i):#Last Element = start
temp_list.append(start)
continue
else:
temp_list.append(Pascal_list[i-1][j]+Pascal_list[i-1][j-1]) # Addition of Upper Two Elements
Pascal_list.append(temp_list)
return Pascal_list
print(multiplicative_pascal(1, 5))
对于这个函数,它打印了它应该打印的结果,这里是结果
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5 , 10, 10, 5, 1]]
但是当我尝试从 print(multiplicative_pascal(1, 5)) 更改为 print(multiplicative_pascal(2 , 5)) 它给了我这个错误,我不确定为什么 error
如果你不想去外部 link :
*Traceback (most recent call last): File "C:\Users\ASUS\Documents\Dalšie štúdium!!\MUNI\Informatika\ucenie na
semestralny test.py", line 108, in
print(multiplicative_pascal(2, 5)) File "C:\Users\ASUS\Documents\Dalšie štúdium!!\MUNI\Informatika\ucenie na
semestralny test.py", line 105, in multiplicative_pascal
temp_list.append(Pascal_list[i-1][j]+Pascal_list[i-1][j-1]) # Addition of Upper Two Elements IndexError: list index out of range
*
有人可以帮我解决这个错误吗?或者你会如何尝试解决这个问题?也许我的整个思维过程都是错误的...
也许这样的事情会对你有所帮助:
def multiplicative_pascal(start: int, height: int) -> List[List[int]]:
if height < 1:
return []
result = row = [start]
for _ in range(height - 1):
row = [start] + [(a * b) for a, b in zip(row, row[1:])] + [start]
result.append(row)
return result
>>> multiplicative_pascal(1, 5)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1, 1]] # 1 * 1 is always 1...
>>> multiplicative_pascal(2, 5)
[[2], [2, 2], [2, 4, 2], [2, 8, 8, 2], [2, 16, 64, 16, 2]]
我是 python 的初学者,我必须做一个特殊版本的帕斯卡三角形...特殊的方式是元素不相加而是相乘。
这里是例子: 所以函数定义为multiplicative_pascal(start: int , 高度: 整数) -> 列表[列表[整数]]
对于 start = 2
和 height = 5
函数应该 return
[[2 ], [2, 2], [2, 4, 2], [2, 8, 8, 2], [2, 16, 64, 16, 2]]
我的思路和代码
首先,我尝试制作普通的帕斯卡三角形,然后我想我只需将 + 替换为 * 并将 1(帕斯卡三角形的正常起点)替换为变量开始
def multiplicative_pascal(start: int, height: int) -> List[List[int]]:
Pascal_list =[[start]] #FIrst entry Defined to start
for i in range(start, height+1):
temp_list =[]
for j in range(i+1): #+1 As we are considering last element
if(j==0):#First Element = start
temp_list.append(start)
continue
elif(j == i):#Last Element = start
temp_list.append(start)
continue
else:
temp_list.append(Pascal_list[i-1][j]+Pascal_list[i-1][j-1]) # Addition of Upper Two Elements
Pascal_list.append(temp_list)
return Pascal_list
print(multiplicative_pascal(1, 5))
对于这个函数,它打印了它应该打印的结果,这里是结果
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5 , 10, 10, 5, 1]]
但是当我尝试从 print(multiplicative_pascal(1, 5)) 更改为 print(multiplicative_pascal(2 , 5)) 它给了我这个错误,我不确定为什么 error 如果你不想去外部 link :
*Traceback (most recent call last): File "C:\Users\ASUS\Documents\Dalšie štúdium!!\MUNI\Informatika\ucenie na semestralny test.py", line 108, in print(multiplicative_pascal(2, 5)) File "C:\Users\ASUS\Documents\Dalšie štúdium!!\MUNI\Informatika\ucenie na semestralny test.py", line 105, in multiplicative_pascal temp_list.append(Pascal_list[i-1][j]+Pascal_list[i-1][j-1]) # Addition of Upper Two Elements IndexError: list index out of range
*
有人可以帮我解决这个错误吗?或者你会如何尝试解决这个问题?也许我的整个思维过程都是错误的...
也许这样的事情会对你有所帮助:
def multiplicative_pascal(start: int, height: int) -> List[List[int]]:
if height < 1:
return []
result = row = [start]
for _ in range(height - 1):
row = [start] + [(a * b) for a, b in zip(row, row[1:])] + [start]
result.append(row)
return result
>>> multiplicative_pascal(1, 5)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1, 1]] # 1 * 1 is always 1...
>>> multiplicative_pascal(2, 5)
[[2], [2, 2], [2, 4, 2], [2, 8, 8, 2], [2, 16, 64, 16, 2]]