파이썬 0부터 입력된 정수까지의 합을 구하는 함수 만들기.
조회수 2444회
정수를 매개변수로 전달받아 1보다 큰 정수이면 1부터 전달된 정수까지의 합계를, 0보다 작으면 -1부터 전달된 정수까지의 합계를 구하는 one2n_sum2()함수를 선언하고 싶습니다. 그리고 정수를 입력받아서 함수를 호출하고 결과를 반환받아 출력하고자 합니다. 그리고 0을 입력받으면 0이 입력되었다고 출력하고 싶은데 elif 부분에서 오류가 뜨는데 피드백 받을 수 있을까요?
def one2n_sum2(n):
if n>1:
j=0
for i in range(1, n, 1):
j=j+i
return j
print('1 --', n, '=', j)
elif n<0:
h=0
for i in range(-1, n,-1):
h=h+i
return h
print('-1 --', n, '=', h)
else:
print('입력된 수가', n, '입니다.')
a=int(input('정수 : '))
one2n_sum2(n)
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
def one2n_sum2(n): if n>1: j=0 for i in range(1, n+1, 1): j+=i print('1 --', n, '=', j) return j elif n<0: h=0 for i in range(-1, n-1,-1): h+=i print('-1 --', n, '=',h) return h else: print('입력된 수가', n, '입니다.') a=int(input('정수 : ')) one2n_sum2(a)
print와 return의 순서를 바꾸시고 print와 return 모두 if문 안에 들어있어야 합니다
그리고 마지막 두줄보시면 정수를 변수a로 받으셨는데 함수에 넣는 변수는 n인것도 고쳐야합니다
+) for문에도 인덱스로 생각하시면 양수 부분은 n+1로 음수 부분은 n-1로 고쳐주시는게 좋겠네요
+) j = j + i 대신 j += i로 작성하시면 더 깔끔한 코드를 작성할 수 있습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
아래를 봐주세요. 제가 이해한 게 맞나요?
- 경우의 수는 3가지이다.
n<0
n>1
n == 0 || n == 1
n == 1
일 땐 아무 일도 하지 않는다.- 기본적으로 이 함수는
1
부터n
까지의 자연수의 합을 돌려주는 함수이며, 따라서 등차수열 합 공식을 이용해(n * (n+1))/2
를 계산하면 되는데,n
이 음수일 때는 여기에-1
을 곱해서 돌려줘야 한다.- 사실 파이썬에서는
sum(range(1, n+1))
하면 된다.
- 사실 파이썬에서는
3번에 부연 설명을 하자면 이건 수학적 공식을 도입해서 해결 가능하고 그래야 하는 문제라고 봅니다.
n
이 정수인 한 이 문제는 모든 정수에 대한 일반 해법이 존재하는 문제라고 간주하는 편이 낫기 때문이지요. (더 간결하고 논리정연해지며 대부분의 경우 성능도 올라감) 왜 이런걸 루프연산 써서 해결하라고 과제들을 내주시는지 모르겠네요 차라리 별찍기를 내주지…그리고 일단 주어진 함수의 Indentation이 틀렸습니다. 한 구간만 보자면:
def one2n_sum2(n): if n>1: j=0 for i in range(1, n, 1): j=j+i print('1 --', n, '=', j) # n>1일때 일어나야 하는 일이므로 return j # 위의 if 안에 있어야 함
- 경우의 수는 3가지이다.
댓글 입력