4/7 파이썬 조건문 & 반복문

JK·2023년 4월 11일
0

알고리즘 공부 1일차
오늘은 조건문과 반복문에 대하여 공부를 했습니다.
조건문은 특정 조건일 때 코드를 실행하는 문법입니다. 프로그램을 만들다 보면 여러 가지 상황을 처리해야 하는 경우가 생기죠. 이때 조건문은 다양한 상황에 대처할 때 사용합니다.

먼저 실생활의 예를 들어보겠습니다. 만약 세탁기에 빨래를 넣고 돌렸다면 다음과 같은 조건문을 만들 수 있겠죠?

if 세탁 완료 소리가 울리면:
    빨래를 꺼내서 말린다.
다음과 같이 날씨에 따라 행동할 수도 있습니다.
if 비가 온다면:
    우산을 가지고 나간다.
if 날씨가 춥다면:
    코트를 입고 나간다.
if 날씨가 덥다면:
    반소매에 얇은 옷을 입고 나간다.

즉, 조건문을 사용하면 조건에 따라 다른 코드를 실행할 수 있습니다. 이번 유닛부터는 if 조건문의 다양한 사용 방법을 알아보겠습니다.

프로그래밍이나 컴퓨터 이론을 공부하다 보면 의사 코드(pseudo code)라는 말을 접하게 됩니다. 의사 코드는 실제 프로그래밍 언어가 아닌 사람의 언어로 프로그래밍 언어를 표현한 것입니다. 보통 특정 프로그래밍 언어를 사용하지 않고 알고리즘이나 컴퓨터 명령을 기술할 때 사용합니다.

x = 10    # 파이썬 코드
변수 x에 10 할당    # 한글로 표현한 의사 코드

앞에서 if 조건문을 설명할 때 "if 비가 온다면", "우산을 가지고 나간다."도 일종의 의사 코드입니다.

if 조건문은 if에 조건식을 지정하고 :(콜론)을 붙이며 다음 줄에 실행할 코드가 옵니다. 이때 실행할 코드는 반드시 들여쓰기를 해야 합니다.

if 조건식:
코드
먼저 IDLE의 파이썬 셸에서 if 조건문을 사용해보겠습니다.

x = 10
if x == 10:
...      print('10입니다.')
... 
10입니다.

만약 if 다음 줄에서 들여쓰기를 하지 않으면 들여쓰기 에러가 발생합니다. 이 항상 이 부분을 주의해주세요.

x = 10
 if x == 10:
... print('10입니다.') 
  File "<stdin>", line 2
    print('10입니다.')
        ^

IndentationError: expected an indented block
참고로 IDLE의 파이썬 셸에서는 자동으로 들여쓰기가 되지만, 콘솔(터미널, 명령 프롬프트)에서 실행한 파이썬 셸에서는 자동으로 들여쓰기가 되지 않으므로 반드시 들여쓰기를 해줍니다.

이제 if 조건문을 자세히 알아보겠습니다. 파이썬에서 if 조건문은 if 조건식: 형식으로 사용하며 그다음 줄에는 들여쓰기를 한 뒤 조건식이 만족할 때 실행할 코드를 넣습니다. 특히 이 조건식이 만족할 때 실행할 코드를 if 본문(if body)이라고 부릅니다.

보통 if의 조건식이 만족하면 참( True), 만족하지 않으면 거짓(False)이라고 부릅니다.

if 조건문을 사용할 때 주의할 점이 있는데 파이썬에서는 =을 할당으로 사용하고 있으므로 값을 비교할 때는 =을 두 개 붙여서 ==로 사용해야 합니다. 자주 틀리는 부분이니 if 안에서 ==을 사용했는지 반드시 확인하세요. 다음과 같이 if에 =을 사용하면 문법 에러가 발생합니다.

if x = 10: 
  File "<stdin>", line 1
    if x = 10:
         ^

SyntaxError: invalid syntax
조건식 끝에 :을 빠뜨리는 실수도 자주하니 :도 확인해주세요. 다음은 조건식 끝에 :을 빠뜨렸을 때의 모습입니다.

if x == 10  
  File "<stdin>", line 1
    if x == 10
             ^

SyntaxError: invalid syntax
문법 에러가 발생하면 콘솔에서는 잘못된 코드 아래에 ^가 표시되고, IDLE에서는 빨간색으로 표시되므로 자신이 실수한 부분을 쉽게 찾을 수 있습니다.

이번에는 if 조건문에 조건식만 작성하고 코드를 생략하는 방법을 알아보겠습니다.

x = 10
if x == 10:
...     pass
...

if 다음 줄에 pass라는 특별한 키워드를 넣었습니다. 여기서 pass는 아무 일도 하지 않고 그냥 넘어간다는 뜻입니다. 파이썬에서는 if 다음 줄에 아무 코드도 넣지 않으면 에러가 발생하므로 if 조건문의 형태를 유지하기 위해 pass를 사용합니다.

다음은 반복문입니다.

'Hello, world!' 문자열을 100번 출력하려면 어떻게 해야 할까요? 가장 간단한 방법은 print를 100번 사용해서 출력하는 것입니다.

print 100번 사용

print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')

... (생략)

print('Hello, world!')
print('Hello, world!')
print('Hello, world!')
print('Hello, world!')

복사, 붙여 넣기로 print('Hello, world!')를 100번 붙여 넣으면 어렵지 않게 완성할 수 있습니다. 하지만 1,000번 또는 10,000번을 출력한다면 어떻게 될까요? 코드를 붙여 넣는데 시간이 너무 오래 걸리기도 하고, 프로그래밍 측면에서도 비효율적입니다. 그래서 대부분의 프로그래밍 언어에서는 반복되는 작업을 간단하게 처리하기 위해 반복문이라는 기능을 제공해줍니다. 반복문은 반복 횟수, 반복 및 정지 조건을 자유자재로 제어할 수 있습니다.

파이썬의 for 반복문은 다양한 사용 방법이 있지만, 먼저 range와 함께 사용하는 방법부터 알아보겠습니다. 다음과 같이 for 반복문은 range에 반복할 횟수를 지정하고 앞에 in과 변수를 입력합니다. 그리고 끝에 :(콜론)을 붙인 뒤 다음 줄에 반복할 코드를 넣습니다.

for 변수 in range(횟수):
     반복할 코드

for 다음 줄에 오는 코드는 반드시 들여쓰기를 해줍니다(들여쓰기 규칙은 if, elif, else와 같습니다).

이제 for 반복문으로 'Hello, world!'를 100번 출력해볼까요?

for i in range(100):
...      print('Hello, world!')
... 
Hello, world!
... (생략)
Hello, world!
Hello, world!
Hello, world!
에러

SyntaxError: invalid syntax: for 반복문의 형식을 지키지 않았을 때 발생하는 구문 에러입니다. for 반복문의 형식에 맞는지 확인해주세요. 특히 for 끝에 :(콜론)을 빠뜨리지 않았는지 확인해주세요.

SyntaxError: expected an indented block: for 다음 줄에 오는 반복할 코드의 들여쓰기가 맞지 않아서 발생하는 구문 에러입니다. 반복할 코드에서 들여쓰기 4칸을 했는지 확인해주세요.

간단하게 'Hello, world!'를 100번 출력하였습니다.

'10.1 리스트 만들기'에서 range는 연속된 숫자 생성한다고 했죠? 파이썬의 for 반복문은 range에서 in으로 숫자를 하나하나 꺼내서 반복하는 방식입니다. 그리고 for는 숫자를 꺼낼 때마다 코드를 실행합니다.

이번에는 while 반복문에 대해 알아보겠습니다.

while 반복문은 조건식으로만 동작하며 반복할 코드 안에 조건식에 영향을 주는 변화식이 들어갑니다.

i = 0                     # 초기식
while i < 100:            # while 조건식
     print('Hello, world!')    # 반복할 코드
     i += 1                    # 변화식

다음은 while 반복문의 실행 과정입니다. 먼저 초기식부터 시작하여 조건식을 판별합니다. 이때 조건식이 참(True)이면 반복할 코드와 변화식을 함께 수행합니다. 그리고 다시 조건식을 판별하여 참(True)이면 코드를 계속 반복하고, 거짓(False)이면 반복문을 끝낸 뒤 다음 코드를 실행합니다.

다음과 같이 while 반복문은 조건식을 지정하고 끝에 :(콜론)을 붙인 뒤 다음 줄에 반복할 코드와 변화식을 넣습니다. 초기식은 특별한 것이 없고 보통 변수에 값을 저장하는 코드입니다.

초기식
while 조건식:
반복할 코드
변화식
while 다음 줄에 오는 코드는 반드시 들여쓰기를 해줍니다.

이제 while 반복문으로 'Hello, world!'를 100번 출력해보겠습니다.

i = 0
while i < 100:
...      print('Hello, world!')
...      i += 1
... 
Hello, world!
... (생략)
Hello, world!
Hello, world!
Hello, world!
에러

SyntaxError: invalid syntax: while 반복문의 형식을 지키지 않았을 때 발생하는 구문 에러입니다. while 끝에 :(콜론)을 빠뜨리지 않았는지 확인해주세요.

SyntaxError: expected an indented block: while 다음 줄에 오는 반복할 코드의 들여쓰기가 맞지 않아서 발생하는 구문 에러입니다. 반복할 코드와 변화식에서 들여쓰기 4칸을 했는지 확인해주세요.

먼저 while 반복문에 사용할 변수 i에 0을 할당합니다. 그리고 while에는 조건식만 지정하면 됩니다. 특히 while 반복문은 반복할 코드 안에 변화식을 지정해야 합니다. 만약 조건식만 지정하고 변화식을 생략하면 반복이 끝나지 않고 계속 실행(무한 루프)되므로 주의해야 합니다

조건문과 반복문을 이용한 알고리즘 문제입니다

문제 링크

시험 성적

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 321670 176175 149085 55.168%

문제
시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력
시험 성적을 출력한다.

예제 입력 1
100

예제 출력 1
A

a = int(input())

if 89 < a <= 100:
    print("A")
elif 79 < a < 90:
    print("B")
elif 69 < a < 80:
    print("C")
elif 59 < a < 70:
    print("D")
elif a < 60:
    print("F")

문제 링크

별 찍기 - 1

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 265731 164240 136757 62.493%

문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

예제 입력 1
5

예제 출력 1

*
**
***
****
*****  
n = int(input())

for i in range(1,n+1):
    print("*"*i)
profile
^^

0개의 댓글