programming

파이썬 구구단 만들기 코드 작성 쉬운 버전 상세한 해설 포함


by Kitle · 2020. 07. 08.



아주 쉽게 설명한 파이썬 구구단 만들기 시작하겠습니다.

파이썬이 설치되어 있다는 가정하에 진행합니다.


환경이 구성되어 있지 않다면 PyCharm 이라는 개발툴을 설치하시고 진행하시면 됩니다.

여기서는 파이참 환경으로 가정하고 진행하도록 하겠습니다.


파이참 까시고 프로젝트 만드시고 아래 복붙 하시고 .py 파일로 저장하시고  우클릭 > Run 해보겠습니다.

코드 작성

gugudan.py

min_dan = 1
max_dan = 9
min_number = 1
max_number = 9
for now_dan in range(min_dan, max_dan+1):
    for now_number in range(min_number, max_number+1):
        print(now_dan, '*', now_number, '=', now_dan * now_number)


IndentationError: unindent does not match any outer indentation level 해결법

위와 같은 오류가 발생하는 경우 문장앞의 공백(Whitespace)가 올바르게 작성되어 있지 않기 때문입니다. 첫번째 줄은 공백이 없어야 합니다. 두번째 줄은 공백 4개 white_space (스페이스바 네번 누르세여) 세번째 줄은 공백 8개가 필요합니다.

파이썬은 블록 레벨을 {} 등의 기호로 두지않고 인덴트(스페이스) 로 구분합니다

 해당 규칙이 엄격해서 해당 언어를 싫어하는 사람도 있지만, 요즘은 IDE(통합 개발환경) 개발 툴에서 어느정도는 다 잡아주므로 스트레스 안받으셔도 됩니다.


구구단 만들기 상세 해걸

그러면 저게 어떻게 되는지 이제 좀 나누어서 해보겠습니다.


Python의 range() 이해하기

for i in range(1, 11):
    print(i)

이러면 1부터 10까지 주루루룩 출력됩니다.


range() 이거를 파이썬에서 엄청 많이 쓰게 됩니다.  얘를 잘 알아두면 응용할때가 많습니다.

java나 C같은 애들은 for i=0;i<10;i++ 이런식으로 숫자 카운트를 돌리는데


python은 iteration 가능한 객체만 for문 끝에 올 수 있습니다. 말이 어려우면 우선은 이해하지 않으셔도 됩니다.  for n in 10 이런게 안됩니다.

for 문 뒤에 오는 것은 11 이라는 숫자(상수) 대신에 순환가능한 객체 범위를 할당해줘야 합니다.여기서 젤 많이 쓰는게 range() 입니다. 이걸 쓰면 범위에 해당하는 순환가능한 객체를 만들어주는데 예를 들어 range(10)이면 0~9까지 할당됩니다. 10이 아니라 10-1 n-1 이 규칙임을 참고하세요.

range(11) 이렇게 인자 하나만 오면 맨 뒤에 오는 범위만 의미하며 맨앞에  자동으로 0은 생략가능 합니다. 

range(0,10) == range(10) 같은의미로 볼 수 있겠죠.

명시적으로 시작 포인트를 바꿀 수 있습니다.  range(1,11) 하면 난 1부터 시작해서 11-1 = 10 에 끝낼래 라고 하는 것을 의미합니다.


n = 5
for i in range(n): # for문은 반복, 5이므로 다섯번이 출력된다.
    print(i)  #print 문 뒤에는 자동으로 줄바꿈('\n')이 포함되어 있다. print('*', end='\n') 과 동일함. 생략됨


출력결과가 0~4 가 출력되죠? 흠.. 난 1부터 출력하고 싶은데..

그렇기때문에 range 의 시작 포인트를 변경 하면 됩니다.

Python range()의 시작 지점 변경하기

n = 5
for i in range(1, n+1): # 범위를 한칸씩 뒤로 미뤄 보았습니다.
    print(i) 


이제 1~5가 순서대로 하나씩 출력 되는군요.


그럼 드디어 구구단 1단을 출력해 보겠습니다.

일단은 숫자 정리 부터 들어갑니다.

1단은 1* 1~9 를 출력하면 되죠. 

1단은 말그대로 1

따라서 시작 점을 1, 종료 숫자를 9 로 하겠습니다.


구구단 1단 출력 해 보기

dan = 1
min_number = 1
max_number = 9
for now_number in range(min_number, max_number+1):
print(i) 


이제 1에서 9 순서대로 한번씩 돌아갑니다.

하지만 곱한 값을 계산하진 않았죠. 

1단 * 1~9 곱 이므로

결국 dan * now_number 가 계산 값이 되겠습니다.


dan = 1
min_number = 1
max_number = 9
for now_number in range(min_number, max_number+1):
print(dan * now_number)


출력값은 차이가 없습니다. 1*1 = 1 결과만 출력하고 있으므로

이번엔 1* 1 = 1 앞에 수식을 같이 출력해보겠습니다.

1단 * 1~9 = 결과 식으로 만들어줍니다.

dan = 1
min_number = 1
max_number = 9
for now_number in range(min_number, max_number+1):
print(dan , '*' , now_number , '=' , dan * now_number)


이름으로 지정해준 친구들은 바로 출력, 그외에 지정하지 않은 문자들은 '*' '로 감싸줘서 출력 각각 항목이 달라지는 구분자는 , 로 구분하여 출력하였습니다.


자 이제 1단이 출력됩니다.

그럼 1~9단을 출력하면 어떻게야 할까요?

앞에 단 도 for 문을 이용하여 1로 고정하지 않고 1~9까지 순환하면 됩니다.

1~9단 모두 출력 해 보기

min_dan = 1
max_dan = 9
min_number = 1
max_number = 9
for now_dan in range(min_dan, max_dan+1):
    for now_number in range(min_number, max_number+1):
        print(now_dan, '*', now_number, '=', now_dan * now_number)

결과부분

---생략---
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

Process finished with exit code 0

결과가 잘 출력 되었네요.

1~99단까지 출력하면 무엇을 바꾸면 될까요?

이렇게 잘 구조화 해두면 변경/확장에 유연하게 대응할 수 있어요.

끝.