간단한 파이썬 문제 지적 좀 부탁드립니다.

import time,random

n=int(input(“원하시는 숫자를 입력하세요:”))

X=[random.randint(-999,999) for i in range(n)]

print(X)
#pr1 start
before1 = time.clock()
def prefixSum1(X, n): # code for prefixSum1
for i = 0 to n-1 do
S[i] = 0
for j = 0 to i do
S[i]=S[i]+X[j]
return (S)
after1 = time.clock()
#pr2 start
before2 = time.clock()
def prefixSum2(X, n): # code for prefixSum2
S[0]= X[0]
for i = 1 to n-1 do
S[i]=S[i-1]+X[i]
return (S)
after2 = time.clock()

random.seed()
print(after1 - before1)
print(after2 - before2)

X배열을 랜덤 생성 시켜서 prefix sum 알고리즘을 2개 적용시켜 각자 걸리는 시간을 체크해보고 싶었습니다. 그런데 계속해서 아래의 오류가 나더군요. 1번, 2번 모두 다 그렇습니다. 간단한 알고리즘이라 제가 혹시 틀렸나 싶어 인터넷도 뒤져봤는데 근본적으로는 맞는 코드 같더라구요. 그래서 질문드립니다. 이 코드에서 문제되고 있는 점이 무엇인가요?

Makefile:6: recipe for target ‘py3_run’ failed
make: *** [py3_run] Error 1
File “Main.out”, line 11
for i = 0 to n-1 do
^

for in 방법만 있는줄 알았는데 to do 방법도 있었나보네요

파이썬에 for to do가 있나요?? 없는거 같은데 혹시 제가 못찾는건가요 -_-?

import time,random

n=int(input("원하시는 숫자를 입력하세요:"))

X=[random.randint(-999,999) for i in range(n)]
#pr1 start
def prefixSum1(X, n):	# code for prefixSum1
	S=[]
	for i in range(n-1):
		S.append(0)
		for j in range(i):
			S[i]=S[i]+X[j]		
	return (S)
#clear, don't touch antm===
#pr2 start
def prefixSum2(X, n):	# code for prefixSum2
	S=[]
	S.append(X[0])
	for i in range(1, n-1):
		S[i]=S[i-1]+X[i]
	return (S)
#
random.seed()	
before=time.clock()
prefixSum1(X,n)
after=time.clock()
print(after - before)

before2=time.clock()
prefixSum2(X,n)
after2=time.clock()
print(after2 - before2)

지금 이게 제 코드인데 prefixSum1 함수는 정상 작동하는데 2함수가 File “Main.out”, line 18, in File “Main.out”, line 20, in prefixSum2
S[i]=S[i-1]+X[i]
IndexError: list assignment index out of range

라는 오류가 계속 뜨는 데 이게 이상한 게 이 함수 부분만 따로 빼놓으면 에러가 안 뜨거든요. 어떻게 하면 고칠 수 있을까요

제가 바보같이 노트 정리용 코드를 그대로 옮겨 썼더라구요. 막상 올리고 나서 깨달았습니다. 답변 감사합니다 ㅜㅜ


소스코드의 시작과 끝에 백쿼트 문자 세개를 넣으면 코드가 보기 좋게 됩니다.

에러메시지를 읽을 생각을 안하시네요.

i 나 i - 1 으로 리스트의 인덱스로 사용한 값이 만들어진 리스트의 요소 갯수 범위와 맞지 않다는겁니다.
잘 세 보세요.

random seed 를 정하고 나서 random 을 돌리는거지, random 을 돌리고 나서 random seed 를 정하는건
다리가 가려워서 벽을 긁고 벽에다 다리를 대는건가요…

힌트를 드리자면 append 횟수가 두 함수가 다릅니다.

제가 기초를 잘 몰라서… 기초 단단히 다지고 오겠습니다 ㅜㅜ