другая версия паскаль треугольник, список, питон - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в python, и мне нужно сделать специальную версию паскальского треугольника ... особенную, чтобы элементы не складывались, а умножались.

вот пример: , поэтому функция определяется как multiplicative_pascal (start: int, height: int) -> List [List [int]]

для start = 2 и height = 5 функция должна вернуть

[[2 ], [2, 2], [2, 4, 2], [2, 8, 8, 2], [2, 16, 64, 16, 2]]

Мой мыслительный процесс и код

Сначала я попытался сделать нормальный треугольник Паскаля, а затем подумал, что просто заменим + на * и 1 (нормальная начальная точка для треугольника Паскаля) переменной start

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 , если вы не хотите переходить на внешнюю ссылку:

* Трассировка (последний последний вызов): файл "C: \ Users \ ASUS \ Documents \ Dalši"e štúdium !! \ MUNI \ Informatika \ ucenie na semestralny test.py ", строка 108, в печатном виде (multiplicative_pascal (2, 5)), файл" C: \ Users \ ASUS \ Documents \ Dalšie štúdium !! \ MUNI \ Informatika \ucenie na semestralny test.py ", строка 105, в multiplicative_pascal temp_list.append (Pascal_list [i-1] [j] + Pascal_list [i-1] [j-1]) # Добавление верхних двух элементов IndexError: вывести список из спискадиапазона

*

Может кто-нибудь, пожалуйста, помогите мне с этой ошибкой? или как бы вы попытались решить эту проблему? может быть, весь мой мыслительный процесс неправильный ...

1 Ответ

0 голосов
/ 06 ноября 2019

Возможно, что-то подобное поможет вам:

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]]
...