Перевести с паскаля на питон

Pascal:

i:=1;
while i<=n do
 if a[i] mod c=0 then
 begin
  n:=n+1;
  for j:=n downto i+1 do
  a[j]:=a[j-1];
  a[i]:=m;
  i:=i+2;
 end
 else i:=i+1; 

Не очень разбираюсь в особенность паскаля, поэтому просто мог сделать прямой перевод:

n = int(input())
c = int(input())
a = list(map(int,input().split()))
i = 1
while i <= n:
    if a[i] % c == 0:
        n += 1
        for j in range(n,i+1,-1):
            a[j] = a[j-1]
            a[i] = c
            i += 2
    else:
        i += 1

Он не работает:

a[j] = a[j-1] IndexError: list index out of range

Т.к я понимаю j принимает значение > n-1, что связано с каким-нибудь другим устройством списков в pascal.

Мой полный код

n = int(input())
c = int(input())
a = list(map(int,input().split()))
i = 0
while i < n:
    if a[i] % c == 0:
        n += 1
        for j in range(n-2,i+1,-1):
            a[j] = a[j-1]
        a[i] = c
        i += 2
    else:
        i += 1
print(*a)

Ответы (1 шт):

Автор решения: Ainar-G

У вас в коде две ошибки. Первая, как упомянули коллеги в комментариях, в том, что в Python списки индексируются, увы, с нуля. Так что:

i = 0
while i < n:

Вторая в том, что в вашем паскалевом коде тело цикла состоит только из одной инструкции, а в пайтоновом — из трёх. Так что:

        for j in range(n - 1, i, -1):
            a[j] = a[j-1]
        a[i] = c
        i += 2


c = 2
a = [42, 50, 76, 84, 100]
i = 0
while i < len(a):
    if a[i] % c == 0:
        a.insert(i, c)
        i += 2
    else:
        i += 1
print(*a)
→ Ссылка