@ddukbbok_kang

하고 싶은 건 일단 해봅니다.

Python/데이터 전처리

파이썬 기초 - for문, while문

강떡볶 2022. 3. 25. 00:25
반목문이란? & 반복문이 필요한 이유
  • 코드를 붙여 넣는 데 시간이 오래 걸림
  • 프로그래밍 측면에서 비효율적임
  • 반복되는 작업을 처리하는 반복문의 기능을 제공
  • 반목적인 작업을 처리하는 도구
  • 코드 작업에서 가장 많이 사용하는 구문 중 하나

 

 

for와 range의 동작 과정

 

즉, for문은 반복 횟수가 정해져 있을 때 주로 사용한다.

 

for i in range(10):
    print("Hello, bitamin!", i)
print("반복문 끝!")

for i in range(10):
    print(i)    
    i = 10

 

 

 

다양한 for문의 사용

 

1) range 증가 폭 사용하기

for i in range(10,0,-1):
    print(i)

for i in range(0, 30, 3):
    print(i)

 

2) list 원소 순회하기

name = ['이소연', '김도경', '김지윤', '서현재']
for n in name:
    print(n)

 

3) tuple 원소 순회하기

name = ("이소연", "김도경", "김지윤", "서현재")
for n in name:
    print(n)

 

4) 문자열 순회하기

for i in "hello bitamin!":
    print(i)

 

5) dictionary 순회하기

bitamin = {"교육부":"김도경", "기획부":"김지윤", "총무부":"서현재"}
for depart in bitamin: # key값만 출력됨. bitamin.keys()와 결과가 같다
    print(depart)

bitamin = {"교육부":"김도경", "기획부":"김지윤", "총무부":"서현재"}
for name in bitamin.values():
    print(name)

bitamin = {"교육부":"김도경", "기획부":"김지윤", "총무부":"서현재"}
for depart, name in bitamin.items():
    print(depart, name)

 

 

for문 응용

 

enumerate 함수

  • 순서와 리스트의 값을 전달하는 기능
  • '열거하다'라는 뜻
  • 순서가 있는 자료형(list, set, tuple, dictionary, string)을 입력으로 받아
  • index값을 포함하는 enumerate 객체를 리턴
  • for문과 함께 자주 사용
name = ['이소연', '김도경', '김지윤', '서현재']
list(enumerate(name))

name = ['이소연', '김도경', '김지윤', '서현재']
for index, name in enumerate(name):
    if index > 1:
        print(index, name)

 

Q. 학생(1~5번)의 시험점수가 50, 70, 80, 20, 90점일 때, 시험 점수가 60점이 넘으면 합격, 그렇지 않으면 불합격이다. 각 학생이 합격인지 불합격인지 결과를 보여주는 코드를 구현해보자.

# Step 1) 시험점수를 list로 만들기
score = [50, 70 ,80 ,20 ,90]

# Step 2) 시험점수와 학생을 mapping하기
data = enumerate(score)

# Step 3) 주어진 조건을 if문을 활용하여 구현하기

for idx, sc in data:
    if sc > 60:
        print(idx+1, ':', sc, '(합격)')
    else:
        print(idx+1, ':', sc, '(불합격)')

 

 

while문의 기본구조 & 동작과정

 

  • 기본 구조
while 조건문:
    수행할 문장1
    수행할 문장2
    수행할 문장3
    ...
  • while 뒤의 조건문이 참인 동안 반복 수행
  • 조건문이 False가 되면 멈추고 다음 코드를 실행
  • 반드시 반복을 멈추게 하는 요소가 필요
  • while문에 속하는 문장은 들여쓰기 필수

 

즉, while문은 반복 횟수가 정해져 있지 않을 때 주로 사용한다.

 

 

 

다양한 while문의 활용

 

Q. 'Hello, bitamin!'을 100번 출력해보자

i = 0
while i < 100:
    print("Hello, bitamin", i)
    i += 1

(중략)

 

 

Q. 열 번 찍어 안넘어가는 나무 없다

treehit = 0
while treehit < 10:
    treehit += 1
    print("나무를", treehit, "번 찍었습니다")

if treehit == 10:
    print("나무 넘어갑니다")

 

 

무한 loop
  • while문에 반복을 멈추는 요소가 없으면 무한 loop를 돌게 된다
  • while에 True를 지정할 때, 0이 아닌 숫자는 True로 취급, 내용이 있는 문자열은 True로 취급

 

 

반복문 강제로 빠져나가기 (break문)

 

1) while문

i = 0
while True:
    print(i)
    i += 1
    if i == 10:
        break

 

2) for문

for i in range(100000000):
    print(i)
    if i == 10:
        break

 

Q. 자판기에 한 잔에 300원인 커피가 10잔이 남아있다. 커피가 다 떨어질 때까지의 과정을 while문을 사용하여 구현해보자

# Step 1) 커피는 10잔이 남아있음을 변수로 저장
money = 300
coffee = 10

# Step 2) 돈을 받을 때마다 커피가 한 잔씩 소진
while money:
    print("돈을 받았으니 커피를 드립니다")
    coffee -=1
    print("남은 커피는", coffee, "잔입니다.")

# Step 3) 커피가 모두 소진되면 판매 중지
    if coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
        break

 

 

처음으로 돌아가기(continue문)
  • 반복문 전체를 빠져나가지 않고 반복문의 맨 처음으로 돌아가고 싶을 땐?
  • 특정 조건에서 코드 실행을 건너뛰고 싶을 땐?

1) while문

i = 0
while i < 100:
    i += 1
    if i % 2 == 0: # i가 짝수일 때 print하지 않고 while문의 조건을 판단하는 곳으로 돌아감
        continue
    print(i)

 

 

2) for문

for i in range(100):
if i % 2 == 0: # i가 짝수일 때 print하지 않고 for문의 변수 지정하는 곳으로 돌아감
continue
print(i)

 

 

실행할 코드가 없을 때 (pass문)
  • 아무 일도 하지 않고 그냥 넘어간다는 뜻
  • if 다음에 아무 코드도 넣지 않으면 오류가 발생하므로 조건문의 형태를 유지하기 위해 사용
  • 나중에 작성해야 할 코드를 표시할 때 사용

 

for i in range(100):
    if i % 2 == 0: # i가 짝수일 때 실행할 코드가 없음
        pass
    print(i)

중간 생략

 

 

중첩 루프
  • 반복문 여러 개가 겹쳐 있는 구조
  • 2차원 데이터를 다룰 때 자주 사용

 

Q. 2차원 리스트를 1차원으로 바꿔보기

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new = []

for i in matrix:
    for j in i:
        print(j)
        new.append(j)
new

 

 

Q. 10 X 10 구구단 만들어보기

for i in range(1,11):
    for j in range(1,11):
        print(i, "*", j, "=", i*j)
    print("="*50)