본문 바로가기

부스트캠프 AI Tech 공부 기록/Python

[Python] Conditionals and Loops

Python Basics for AI

2-3. Conditionals and Loops

1) Conditionals : 조건문

조건문이란?

- 조건에 따라 특정한 동작을 하게하는 명령어

- 프로그램 예시

  •  지하철 앞 차 간격이 10m 이하이면 속도를 10km 이하로 늦춰라
  •  사용자가 20세 이하이면 VOD를 플레이 하지 마라
  • 휴대폰 패턴이 5회 틀리면 20초 동안 대기 상태로 만들어라

- 조건문은 조건을 나타내는 기준과 실행해야 할 명령으로 구성됨

- 조건의 참, 거짓에 따라 실행해야 할 명령이 수행되거나 되지 않음

- 파이썬은 조건문으로 if, else, elif 등의 예약어를 사용함

if-else 문법

if <조건> :			# if를 쓰고 조건 삽입 후 ":" 입력
	<수행 명령1-1>		# 들여쓰기(indentation) 후 수행명령 입력
    <수행 명령1-2>		# 같은 조건하에 실행일 경우 들여쓰기 유지
else:				# 조건이 불일치 할 경우 수행할 명령 block
	<수행 명령2-1>		# 조건 불일치 시 수행할 명령 입력
    <수행 명령2-2>		# 조건 불일치 시 수행할 명령 들여쓰기 유지

- 가장 기본적인 조건문으로 조건에 따른 명령을 실행

print("Tell me your age : ")
myage = int(input()) 	# 나이를 입력 받아 myage 변수에 할당
if myage < 30: 		# myage가 30 미만일 때
	print('Wellcome to the club.')
else:			# myage가 30 이상일 때
	print('Oh No. You are not accepted.')

조건 판단 방법

- if 다음에 조건을 표기하여 참 또는 거짓을 판단

- 참/거짓의 구분을 위해서는 비교 연산자를 활용

비교 연산자 비교 상태 설명
x < y ~보다 작음 x가 y보다 작은지 검사
x > y ~보다 큼 x가 y보다 큰지 검사
x == y  같음(값) x와 y가 같은지 검사(값) 
x is y 같음(메모리 주소) x와 y가 같은지 검사(메모리 주소)
x != y 같지 않음 x와 y가 다른지 검사(값)
x is not y 같지 않음(메모리 주소) x와 y가 다른지 검사(메모리 주소)
x >= y 크거나 같음 x가 y보다 크거나 같은지 검사
x <= y 작거나 같음 x가 y보다 작거나 같은지 검사

 

조건 참/거짓의 구분

- 숫자형의 경우는 수학에서의 참/거짓과 동일 ( 0은 거짓, 1은 참 )

- 컴퓨터는 존재하면 참, 없으면 거짓으로 판단

   * if "abc" : 는 참, if "": 는 거짓

>>> if 1:
... 	print("True")
... else:
... 	print("False")
...
True

 

논리 키워드 사용 : and, or, not

- 조건문을 표현할 때 집합의 논리 키워드를 함께 사용하여 참과 거짓을 판단하기도 함

- (T and T) → T

- (_ and F) → F

- ( T or _ ) → T

- ( F or F ) → F

a = 8, b = 5 일 때,
if a == 8 and b == 4	# 거짓
if a > 7 or b > 7 	# 참
if not(a > 7) 		# 거짓

 

삼항 연산자(Ternary operators)

- 조건문을 사용하여 참임 경우와 거짓일 경우의 결과를 한 줄에 표현

>>> value = 12
>>> is_even = True if value % 2 == 0 else False
>>> print(is_even)
True

2) Loop : 반복문

반복문이란?

- 정해진 동작으로 반복적으로 수행하게 하는 명령문

- 프로그램 예시

  • 100명의 학생에 성적을 산출할 때
  • 검색 결과를 출력해줄 떄
  • 워드에서 단어 바꾸기 명령 실행

- 반복문은 반복 시작 조건, 종료 조건, 수행 명령으로 구성됨

- 반복문 역시 반복 구문은 들여쓰기와 block으로 구분됨

- 파이썬은 반복문으로 for, while 등의 명령 키워드를 사용함

 

알아두면 좋은 반복문 상식!

  • 반복문 변수명 : 임시적인 반복 변수는 대부분 i, j, k로 정함
  • 0부터 시작하는 반복문 : 반복문은 대부분 0부터 반복을 시작하나, 일종의 관례로 1부터 시작하는 언어도 존재. 하지만 정해지지 않은 경우에는 2진수가 0부터 시작하기 때문에 0부터 시작하는 것을 권장!
  • 무한 loop : 반복 명령이 끝나지 않는 프로그램 오류. CPU와 메모리 등 컴퓨터의 리소스를 과다하게 점유하는 문제가 발생하고, 무한 loop 사실상 잘못된 프로그램일 가능성이 매우 높은 코드. 반복문, 특히 while문에서 종료 조건을 설정했는지 꼭 확인하기

for문 

- 기본적인 반복문 : 반복 범위를 지정하여 반복문 수행

""" 
작동 과정
1. looper 변수에 1 할당
2. looper 변수값(1) 출력
3. 리스트에 있는 값을 차례로 looper에 할당
4. 5까지 할당한 후 반복 block 수행 후 종료
"""
for looper in [1, 2, 3, 4, 5]: 
	print(looper)

- range() 사용하기 

   아래 두 코드는 같은 동작을 한다.

   * 왜 range(0, 4)가 아닌 range(0, 5)인가?

     → range()는 마지막 숫자 바로 앞까지 리스트를 만들어줌

     → range(0,4) = [0, 1, 2, 3], range(0, 5) = [0, 1, 2, 3, 4] = range(5)

# 방법 1
for looper in [0, 1, 2, 3, 4]:
	print('hello')
# 방법 2
for looper in range(0,5) : 
	print('hello')

- for 문의 다양한 반복문 조건 표현 ( 아래 예시들의 결과를 예상해보고, 주피터 노트북에서 돌려보자 )

  • 문자열을 한 글자씩 리스트로 처리하기
for i in "abcdefgh":
	print(i)
  • 각각의 문자열을 리스트로 처리
for i in ['americano', 'latte', 'frafuchino']:
	print(i)
  • 간격을 두고 세기
for i in range(1, 10, 2): 	# 1부터 9까지 2씩 증가하면서 i에 할당
    print(i)
  • 역순으로 반복문 수행
for i in range(10, 1, -1): 	# 10부터 2까지 -1씩 바꾸면서 i에 대입
    print(i)

 

while 문

- 조건이 만족하는 동안 반복 명령문 수행

- for 문은 while문으로 변환이 가능, while문도 for문으로 변환가능. 상황에 따라 다르게 사용

   * 반복 실행 횟수를 명확히 알 때 : for문

   * 반복 실행 횟수가 명확하지 않을 때 : while문

i = 1 			# i 변수에 1 할당
while i < 10: 		# i가 10 미만인지 판단
	print(i)	# 조건에 만족할 때 i 출력
	i += 1 		# i 에 1을 더함
			# i가 10이 되면 반복문 종료

반복의 제어 - break, continue

- break : 특정 조건에서 반복 종료

for i in range(10):
	if i==5: 	# i 가 5가 되면 반복문 종료
    		break
    	print(i)
print('EOP')

- continue : 특정 조건에서 남은 반복 명령 skip

for i in range(10):
	if i==5: 	# i 가 5일 때에는 i를 출력하지 않음
    		break
    	print(i)
print('EOP')

3) Loop & control lab

가변적인 중첩 반복문(variable nested loops)

- 실제 프로그램에서 반복문은 사용자의 입력에 따라 가변적으로 반복되고, 하나의 반복이 아닌 중복되어 반복이 일어남

- 반복문과 조건문은 정말정말 많은 상황에서 함께 사용됨

# 예시 - 숫자 찾기 게임
import random
answer = random.randint(1, 100)
print('숫자를 맞춰보세요(1~100)')
user_guess = int(input())

# 사용자가 언제 숫자를 맞힐지 모르기 때문에(종료 시적이 명확하지 않기 때문에) while문 사용
while (user_guess is not answer):
    if user_guess > answer:
    	print('up')
    else:
    	print('down')
    user_guess = int(input())
else: print('correct!')

4) Debugging

Debugging(디버깅)

- 코드의 오류를 발견하여 수정하는 과정

- 오류의 원인을 알고 해결책을 찾아야 함

- 문법적 오류와 논리적 오류가 존재

문법적 오류

- 종류

  • 들여 쓰기(indentation error) 오류 : 파이썬은 들여쓰기로 코드 블록을 판단함
  • 오탈자
  • 대소문자 구분 안 함

- 주로 인터프리터가 알려주는 오류. 에러코드를 이해하고 그에 맞춰 해결하기

문법적 오류 코드의 예시

논리적 오류

- 예상한대로 실행이 안되는 경우

- 중간중간 프린트 문을 찍어서 확인하기

def addition(x, y):
	return x + y

def multiplication(x, y):
	return x * y
    
def divided_by_2(x):
	return x/2
    
if __name__ == '__main__':
    print(addition(10, 5))
    print(multiplication(10, 5))
    print(divided_by_2(50))

 

Doing by yourself

- 여러 시행착오를 겪다보면 오류를 해결하는 능력도 향상될 것..!

- 인터넷에 물어보기 : Google 과 Stack overflow 잘 활용하기!

   * Stack overflow : 전 세계 개발자들의 코딩 Q&A 사이트