상세 컨텐츠

본문 제목

[Python] 자연수의 약수 구하기 파이썬 프로그램 예제

IT & Programming/파이썬 (Python) 공부

by 그림아이 2023. 4. 13. 02:00

본문

반응형

 

이번 시간에는 파이썬으로 자연수의 약수를 출력해주는 프로그램을 만들어 보겠습니다. 약수를 구하려면 정의부터 알아야 합니다. 약수란 나눠서 나머지가 0인 수들을 의미합니다. 가령 6의 약수는 1, 2, 3, 6입니다.계속해서 while문과 for문으로 연습하고 있으니 여기서도 간단하게 반복문으로 처리하면 됩니다.

 

우선 먼저 항상 그랬듯이 사용자로부터 입력 값을 받기 위한 구문부터 시작하겠습니다.

 

while True:
    try:
        input_number = int(input("\n1 이상의 자연수를입력하세요 : "))
        if input_number == 0:
            print("\n0은 0이 아닌 모든 수가 약수입니다.")
            continue
        elif input_number == 1:
            print("\n1의 약수는 1입니다.")
            continue
        elif input_number < 0:
            print("\n음수의 약수는 자연수에 마이너스 부호만붙이면 됩니다. 다시 입력해 주세요.")
            continue
        else:
            break
    except:
        print("\n잘 좀 입력해주시죠. :(")
        continue

 

이전에 사용하던 구문을 약간 변형해봤습니다. 매번 똑같으면 재미가 없으니까요. 사용자가 자연수만 입력하도록 했고, 입력한 것이 정수가 아닌 실수이거나, 문자열이거나 하면 틀렸으니 다시 입력할 것을 요구합니다. 그럼에도 굳이 0을 입력하면 세상 모든 수에 0을 곱하면 0이 되니 0을 제외한 모든 수가 약수라고 했고, 1을 입력하면 약수는 1밖에 없으므로 다시 입력할 것을 요구합니다. 추가로 음수를 입력하면 자연수의 약수에 부호만 바뀌니 다시 입력하라고 해두었습니다. 물론 제대로 잘 입력하면 바로 while문을 탈출할 것입니다.

 

반응형

 

이제 사용자가 입력한 값의 약수를 찾아 리스트로 만들어 출력하기만 하면 됩니다. 첫번째는 while문으로 만들어 봤습니다.

 

n = 1
aliquot = []
while n <= input_number:
    if input_number % n == 0:
        aliquot.append(n)
    n = n + 1 #or n+=1
print(input_number,'의 약수는', aliquot, '입니다.')

 

n과 리스트를 저장해두는 aliquot라는 변수가 필요하지만 어쨌든 간단히 해결됐습니다. 결과값은 다음과 같습니다.

1 이상의 자연수를 입력하세요 : 24

24 의 약수는 [1, 2, 3, 4, 6, 8, 12, 24] 입니다.

 

두 번째는 for문을 이용해서 만들어 봤습니다.

 

aliquot = []
for i in range(1, input_number+1):
    if input_number % i == 0:
        aliquot.append(i)
print(input_number,'의 약수는', aliquot, '입니다.')

 

보시다시피 for문이 while문에 비해 더 간결하고 쉽습니다. n이라는 변수가 필요하지도 않습니다. 물론 결과값도 잘 출력됩니다.

1 이상의 자연수를 입력하세요 : 128

128 의 약수는 [1, 2, 4, 8, 16, 32, 64, 128] 입니다.

 

while문과 for문만 제대로 이해해도 코딩하실 때 에러를 줄이고 간결하고 깔끔하게 잘 만드실 수 있습니다.

 

제가 만든 것이 정답은 아닙니다. 저는 정답이라고 글을 쓰거나 자랑하려고 올리는 것이 아닙니다. 저는 부족한 것 투성이임을 누구보다 잘 알고 있습니다. 그래서 공부를 놓지 못하고 계속하는 것입니다. 반복해서 말씀 드리지만, 저도 처음 공부 시작할 때 누군가에게 도움을 받았으니, 저도 누군가에게 도움을 드리고자 할 뿐입니다. 시작할 때의 그 막막함과 답답함을 저는 너무 잘 알고 있으니까요.

 

끝으로…

 

프로그램 언어 공부는 이렇게 갑자기 만들고 싶은 것이 있어야 실력이 향상됩니다. 함수를 잔뜩 외운다고 늘지 않습니다. 직접 프로그램을 만들어 보고, 책이나 인터넷에서 남이 만든 코딩을 영어 해석하듯이 해석해보고, 때론 응용도 하면서 씹고, 뜯고, 맛보고, 즐기고 해야 합니다. 저도 그랬습니다. 

 

세상 모든 것이 그러하듯이, 코딩도 꾸준히 하다 보면 실력이 늡니다.

 

 

728x90
반응형

관련글 더보기

댓글 영역