스터디/파이썬 스터디 강의자료

[1팀/한규림] 4차시 파이썬 스터디 - 반복문

onegyul 2023. 3. 30. 19:08

4차시_반복문_강의안.pdf
0.88MB
4차시_반복문_과제.pdf
2.55MB

4차시 주제는 반복문입니다.

1. 반복문

1) 반복문의 개념

  • 반복문 loop : 정해진 동작을 반복적으로 수행할 때 사용하는 명령어
    • 학생 100명의 성적 산출
    • 쇼핑몰에서 상품 추천
    • MS 워드에서 단어 바꾸기 명령 실행
  • 쇼핑몰에서 상품 추천 → 사용자의 상품 구매 특징과 다른 상품 간의 특징 비교가 계속되어야 함. 한 번에 일어나는 것이 아닌 여러 제품을 차례차례 비교하므로 반복이 일어날 수밖에 없음.
  • MS 워드에서 단어 바꾸기 명령 실행 → 각 단어가 바꾸고자 하는 단어와 비슷한지 비교하는 과정이 필요, 이를 전체 단어에 적용하기 위해 단어를 찾는 과정이 계속 수행되어야 함.

  • 모든 프로그램에서 핵심적으로 사용되는 반복문!
  • 반복 시작 조건, 종료 조건, 수행 명령으로 구성됨.
  • 들여쓰기와 블록으로 구분함.
  • 명령 키워드는 for, while이 있음.

2) for문

  • 가장 기본적인 반복문. 반복 범위를 지정하여 반복을 수행함.
for looper in [1, 2, 3, 4, 5]:
		print("hello")
  • [1, 2, 3, 4, 5]에 있는 값을 한 번씩 수행하므로, 총 다섯 번의 반복이 일어나 ‘hello’가 다섯번 출력되는 것.

for 입력 후 반복되는 범위 지정해야 함. 범위를 지정하는 방법은 두 가지가 있음.

  1. 리스트 사용

변수 자체를 출력하기.

for looper in [1, 2, 3, 4, 5]:
		print(looper)

  1. range 키워드 사용
for looper in range(100):
		print("hello")
  • range 문법의 기본 구조

 👉🏻 for 변수 in range(시작 번호, 마지막 번호, 증가값)

시작 번호, 증가값 생략 가능함. 생략 시, 시작번호는 0, 증가값은 1로 설정됨.

  • tip: 반복문에서 알아두면 좋은 상식
    1. 반복문의 변수는 대부분 i, j, k로 지정함. 수학에서 변수를 대부분 x, y, z로 지정하는 것과 비슷함.
    2. 반복문은 대부분 0부터 반복을 시작함. 0부터 시작하는 이진수의 특징 때문에 대부분의 언어가 0부터 인덱스를 시작함.
    3. 반복문을 잘못 작성하면 무한 루프 오류가 발생할 수 있음. 무한 루프는 CPU와 메모리 등 컴퓨터의 리소스를 과다 점유하여 다른 프로그램에서 영향을 미침.

문자열에서 각 문자를 화면에 출력하기

for i in 'abcdefg':
		print(i)

문자열 리스트값 출력하기

for i in ['americano', 'latte', 'frappuccino']:
		print(i)

range 구문의 특성을 이용하여 반복문 만들기

for i in range(1, 10, 2):    # 1부터 9까지 2씩 증가시키면서 반복문 수행
		print(i)

10부터 2까지 1씩 감소시키는 반복문 만들기

for i in range(10, 1, -1):   # 10부터 2까지 1씩 감소시키면서 반복문 수행
		print(i)

 

3) while문

  • 어떤 조건이 만족하는 동안 명령 블록을 수행,(if문과 반복문이 결합한 형태라고 보면 됨)
  • 해당 조건이 거짓일 경우, 더이상 반복 명령문을 수행하지 않는 구문
  • 예시로 살펴보자.
i = 1             # i 변수에 1 할당
while i < 10:     # i가 10 미만인지 판단
		print(i)      # 조건을 만족할 때 i 출력
		i += 1        # i에 1을 더하는 것을 반복하다가 i가 10이 되면 반복 종료

for문과 while문은 기본적으로 유사하며, 서로 변환이 가능함. 하지만 구문의 쓰임에 차이가 있음.

for문은 일반적으로 반복 횟수를 정확하게 알고 있고, 반복 횟수가 변하지 않을 때 사용함.

while문은 반복 실행 횟수가 명확하지 않고 어떤 조건을 만족하면 프로그램을 종료하고자 할 때 사용함.

예를 들어, 학생들의 성적을 채점하는 프로그램 만들때

→ 이미 학생이 몇 명인지 명확하게 알고 있으므로 for문 사용이 좋음.

하지만, 가위바위보를 하는데 ‘이기면 종료하라’라는 조건을 준다면

→ 언제 이길지 모르므로 while문 사용이 좋음.

2. 반복문의 제어

1) break문

  • 논리적으로 반복을 종료하는 방법. 반복문을 강제로 종료시킴.
for i in range(10):
		if i == 5: break
		print(i)
print("End of Program")

2) continue문

  • 특정 조건에서 남은 명령을 건너뛰고 다음 반복문을 수행함.
for i in range(10):
		if i == 5: continue
		print(i)
print("End of Program")

3) else문

  • 어떤 조건이 완전히 끝났을 때 한번 더 실행해주는 역할을 함.
  • else문을 쓰지 않아도 해당 반복문이 모두 수행되면 다음 코드를 수행하므로 필요없어 보이는 구문이기는 함. 하지만 해당 반복문이 중간에 종료없이 완벽히 수행되었는지를 명시적으로 확인하기 위해 필요하다고 보면 됨.
for i in range(10):
		print(i)
else:
		print("End of Program")

제어 구문들은 되도록 사용하지 않는 것을 권함.

특히, 긴 코드 작성 시 중간에 break, continue문이 있다면 의도치 않게 코드가 오작동할 가능성이 있음.

특히 많은 사람과 함께 코딩할 경우 이러한 코드들로 인하여 예측하지 못한 작동을 할 수 있으므로 주의가 필요함.

3. 조건문과 반복문 실습

1) 문자열 역순 출력

sentence = "I love you"
reverse_sentence = ' '
for char in sentence:
		reverse_sentence = char + reverse_sentence
print(reverse_sentence)
  • sentence 변수에 있는 “I love you”라는 글자를 char 변수에 저장한 후, 역순으로 reverse_sentence에 붙여넣는 구조

2) 십진수와 이진수 변환

십진수를 이진수로 변환하는 방법 : 십진수 숫자를 2로 계속 나눈 후 그 나머지를 역순으로 취함.

decimal = 10
result = ' '
while (decimal > 0):
		remainder = decimal % 2   # 나머지를 구해 remainder 변수에 저장
		decimal = decimal // 2   # 현재의 십진수를 2로 나눈 몫을 다시 decimal 변수에 저장
		result = str(remainder) + result  # 값의 역순을 result 변수에 저장
print(result)

4. 코드의 오류를 처리하는 방법

1) 버그와 디버그

  • 버그 bug : 프로그래밍에서 발생하는 오류
  • 디버그 debug : 오류를 수정하는 과정
  • 디버깅 debugging : 코드에서 오류를 만났을 때 잘못을 찾아내고 고치는 것

2) 오류의 종류와 해결 방법

- 문법적 오류

코딩 과정에서 인터프리터가 해석을 못해 코드 자체를 실행시키지 못하는 오류.

  • 들여쓰기 오류 indentation error문법적 오류는 파이썬 파일을 실행시켰을 때 곧바로 문법적 오류임을 알려줌.오류가 발생한 부분에 꺾쇠 표시( ^ )를 하고 오류 종류와 함께 ‘unexpected indent’라고 나타냄.
  • 오류가 발생한 파일 경로와 line number를 출력함.
  • x = 2 y = 5 print(x + y)
  • 오탈자로 인한 오류NameError’라는 오류 메시지가 출력됨.
  • 괄호 등을 잘못 사용했을 때 발생하는 ‘ValueError’도 자주 발생함.
  • pront (x + y) # print가 아닌 pront로 작성 korean = "ACE" print(Korean) # korean이 아닌 Korean으로 작성

오류 메시지는 처음 나타났을 때 꼼꼼히 읽어보고 반드시 수정하도록 하자.

 

- 논리적 오류

  • 코드를 제대로 작성했다고 생각했음에도 원하는 결과가 출력되지 않는 경우, ‘논리적 오류가 있다’, ‘버그가 있다’고 표현함.
  • 논리적 오류를 해결하기 위해 확인이 필요한 변수들의 값을 print( ) 함수를 사용하여 출력해보기.

사다리꼴 넓이를 구하는 프로그램 작성을 통해 알아보자.

 👉🏻 사다리꼴 넓이 구하는 공식 : ‘{(밑변 + 윗변)/2} * 높이’

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

def divided_by_2(x):
		return x / 2

def main():
		base_line = float(input("밑변의 길이는?"))
		upper_edge = float(input("윗변의 길이는?"))
		height = float(input("높이는?"))

		print("넓이는:", divided_by_2(addition(base_line, upper_edge) * height))

if __name__ == '__main__':
		main()

if name == 'main' 구문과 main( ) 함수를 추가해 이로 인해 코드가 실행될 수 있도록 수정함. 파이썬 파일을 실행하면 가장 먼저 if문으로 이동한 다음 main( ) 함수를 호출하는 구조임.