Перевести с паскаля на питон
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)