본문 바로가기
컴퓨터

[파이썬02]반복문과 조건문 심화 과정

by Oh 선생 2019. 12. 27.

2장. 반복문과 조건문 심화과정

1. 구구단 계산기

구구단을 인쇄하려면 여러 번 반복 작업이 필요할 겁니다. 2*1=2, 2*2=4...9까지 반복하고, 이걸 또 9단까지 반복해야 하지요. 코딩의 장점 중 하나는 이런 반복 작업을 간략하게 줄여버릴 수 있다는 겁니다. 일단 다음의 코드를 작성해보세요.

n=int(input('몇 단을 만들까요?:'))
for i in range(1,10):
    print(n,'*',i,'=',n*i)

첫 줄은 감이 오지요? 몇 단을 만들지 입력받아(input) 정수로 바꿔(int) n이라는 문자에 할당하는 줄입니다. , 세 번째 줄이 반복문의 구조입니다. 파이썬에선 for (반복시킬 변수) (범위): 의 형태로 반복문을 사용합니다. 문자 i가 주어진 범위(range(1,10))에서 변화하면서 for문 이후의 내용을 실행시키는 겁니다. range(1,10)1부터 10까지의 수를 생성합니다. print()문을 보면, 이미 입력 받은 n, 곱하기를 나타낼 ‘*’, 1부터 변화시킬 i 등으로 구성되어 있지요. 실제로 실행하면 다음과 같이 됩니다.

같은 프로그램을 다음과 같이 만들 수도 있습니다.

n=int(input('몇 단을 만들까요?:'))
i=0
while i<9:
    i=i+1
    print(n,'*',i,'=',n*i)

이번에도 실행 결과는 같기 때문에 결과는 생략하겠습니다. 이번엔 반복문을 while 구문을 이용해서 작성했습니다. while 구문은 while (조건): 과 같은 형태로 사용합니다. 조건이 만족하는 동안에는 while 구문 안쪽의 문장들이 계속 실행됩니다. while문을 사용할 때 중요한 것은 i=i+1 과 같이 조건을 만족시킬 수 있는 구문을 집어넣어줘야 한다는 겁니다. i=i+1 부분이 빠지면 while문에 준 조건을 만족시킬 방법이 없기 때문에 무한루프가 만들어집니다. 여기에선 i=i+1을 통해 i1씩 커집니다. 그러다가 9보다 작다는 조건을 만족시키지 않을 때, while 반복이 끝나며 프로그램이 종료됩니다. forwhile이나 둘 다 쓰려니 힘들죠? 일단 for문만 빠삭하게 잘 써봅시다.

 

2. 별 만들기

이번엔 *을 찍어서 사각형을 만들어봅시다.

for i in range(5):
    for j in range(5):
        print('*', end='') 
    print() 

range(5)0부터 4까지의 수를 만들어줍니다. 말 나온김에 range를 설명합시다. range(5)0,1,2,3,4 까지의 수를 만들어주는 명령어입니다. range를 제대로 쓰면 range(시작하는 수, 끝나는 수, 간격)으로 사용합니다. range(1,10,2)1부터 10까지의 수를 2간격으로 만들란 말입니다. 1, 3, 5... 처럼 나타나겠지요. 이 세 가지를 다 쓸 필요는 없습니다. range(3)0~2까지의 수를 만들라는 뜻이고, range(1,5)1~4의 수를 만들란 뜻이고, range(1,50,3)1부터 50까지 3간격으로 수를 만들란 말입니다. 대충 이해되지요? 이제 일단 이 프로그램의 결과를 봅시다.

여기에선 for문을 반복해서 사용하고 있습니다. 우선 안쪽의 for문을 봅시다.

for j in range(5):  
    print('*', end='')

j라는 문자를 0부터 4까지 반복시키는데, 그러면 총 5회의 반복이 생기겠지요. 그리고 반복횟수만큼 *을 인쇄하도록 하고 있습니다. print는 기본적으로 줄바꿈을 해주는데, end=''를 넣으면 줄바꿈을 하지 않게 합니다. 결국 이 코드를 통해서는 ***** 이 인쇄되는 거지요.

이제 바깥쪽의 for문을 봅시다.

for i in range(5):   
    for j in range(5):
        print('*', end='')
    print()

처음엔 i0입니다. 이때 안쪽의 j에 의한 반복이 일어나지요. 이 과정에서 *****이 그려집니다. 그러면 print()문을 통해 줄바꿈을 합니다. 이제 다시 i1로 증가합니다. 그리고 다시 안쪽의 j에 의한 반복, 즉 두 번째 *****줄이 그려집니다. 이런 게 i4가 될때 까지 5번 반복되는 겁니다.

 

연습문제

앞서 주어진 코드를 변형하여 *로 이루어진 직사각형이 그려지도록 해보세요.

연습문제

앞서 주어진 코드를 변형하여 구구단 전체가 인쇄되도록 해보세요.

 

 

이번엔 반복문과 앞서 배운 조건문을 섞어서 활용해봅시다. 아래의 코드를 작성하세요.

for i in range(5):
    for j in range(5):
        if j<=i:
            print('*', end='')
    print()

이번엔 결과를 보기 전에 대충 예상을 좀 해봅시다. 어떤 그림이 그려질까요?

코드 설명을 해봅시다. 이제 알겠지만, 이 코드에서 j*의 개수를, i는 행을 결정합니다. 이때 if문에 주어진 j<=i는 결국 1행에선 *1개까지, 2행에선 2개까지, ... 5행에선 5개까지 그리라는 명령이 됩니다. 이해 되나요?

 

연습문제

위에 제시된 코드를 적당히 변형하여 제멋대로 *을 찍어봅시다.

 

 

3. 369 만들기

, 이번엔 조건문 심화버전입니다. 조건문이 만약 이렇다면 이렇게 해였다는건 기억하지요? 그런데 코딩을 하다보면 만약 이렇다면 이렇게 하고 저렇다면 저렇게 하고 아무 것도 아니면 요렇게 해라고 말하고 싶을 때도 있을 겁니다. 그럴 때 어떻게 코딩을 할지 배워봅시다. 다음은 3, 6, 9를 만드는 프로그램입니다. 3이나 6이나 9가 들어간 부분에선 을 인쇄하고, 그 외에는 수를 인쇄하는 프로그램이지요.

print('369 369 369 369')
for i in range(1,100):
    j=str(i)
    if '3' in j:
        print('짝',end=' ')
    elif '6' in j:
        print('짝',end=' ')
    elif '9' in j:
        print('짝',end=' ')
    else:
        print(j,end=' ')

결과는 다음과 같습니다.

if문에서의 분기는 elif구문을 통해 만듭니다. 그리고 마지막에는 else문을 통해 마무리하지요. 위 코드를 설명하면, 만약 3j에 들어있으면 짝을 인쇄하고, 그게 아니라 6이 있어도 짝을 인쇄하고, 그게 아니라 9가 있어도 짝을 인쇄하는데, 아무것도 아니면 j를 인쇄하라는 겁니다. elif문을 사용할 때에는 반드시 마지막 조건이 else로 끝나야 한다는 규칙이 있습니다. elif문을 사용할 필요가 없는 간단한 경우에는 바로 if else의 형태로 사용할 수도 있습니다. 물론 if만 사용하고, else를 생략할 수도 있습니다.

 

연습문제

369 프로그램에서, 5의 배수에는 꾸앙을 외치도록 만들어보세요.

 

 

이 아가씨도 좋은데 화장 안할 때가 훨 낫다... 

 

댓글0