데이터를 가공할 때 특정 조건에 따라 가공하는 일이 많고 보통 이러한 작업은 반복 수행이 많기 때문에 조건문과 반복문을 함께 쓰는 경우가 많습니다. 뿐만 아니라 대용량의 데이터를 AI 모델에 하나씩 집어 넣을 때, AI 모델을 여러번 반복할습할 때에도 반복문이 사용됩니다.
설명
목적
기대 효과
if
, elif
(else if의 줄임말), else
키워드를 사용하여 구성if 조건:
# 조건이 참일 때 실행될 코드
elif 다른조건:
# 다른 조건이 참일 때 실행될 코드
else:
# 위의 조건이 모두 거짓일 때 실행될 코드
x = 10
if x > 0:
print("양수입니다.")
elif x < 0:
print("음수입니다.")
else:
print("0입니다.")
x = 10
if x > 5:
print("x는 5보다 큽니다.")
else:
print("x는 5보다 작거나 같습니다.")
🡆 if
문과 else
문이 서로 다른 인덴트 수준에 위치: 각각의 블록이 어디서 시작하고 끝나는지 명확하게 보여줌
x = 10
if x > 5:
print("x는 5보다 큽니다.")
else:
print("x는 5보다 작거나 같습니다.")
🡆 파이썬은 들여쓰기를 통해 블록을 식별하기 때문에 들여쓰기가 제대로 이루어지지 않으면 오류가 발생함(IndentationError)
x = 10
if x > 5:
print("첫 번째 블록 시작")
if x < 15:
print("두 번째 블록 시작")
else:
print("첫 번째 블록 끝")
'''
출력:
첫 번째 블록 시작
두 번째 블록 시작
'''
# case 1 → 출력: 두 번째 블록 시작
x = 10
if x < 0:
print("첫 번째 블록 시작")
if x > 5:
print("두 번째 블록 시작")
else:
print("첫 번째 블록 끝")
# case 2 → 출력: 첫 번째 블록 끝
x = 10
if x < 0:
print("첫 번째 블록 시작")
if x > 5:
print("두 번째 블록 시작")
else:
print("첫 번째 블록 끝")
🡆 들여쓰기를 사용하여 블록이 서로 어떻게 연결되어 있는지 명확하게 보여 줌: 첫 번째 if
문의 내부에 두 번째 if
문이 존재
🡆 똑같은 코드인데도 들여쓰기에 따라서 완전 다르게 해석이 될 수 있다!
>
: 초과<
: 미만>=
: 이상<=
: 이하==
: 같음!=
: 같지 않음and
: 모두 참일 때 참or
: 하나 이상이 참일 때 참not
: 조건을 부정x = 10
if x > 0 and x % 2 == 0:
print("양의 짝수입니다.")
x = 10
y = 5
if x > 5 and y < 10:
print("x는 5보다 크고, y는 10보다 작습니다.")
elif x <= 5 or y > 10:
print("x는 5보다 작거나 같거나, y는 10보다 큽니다.")
else:
print("다른 조건")
x = 10
if x > 5:
print("x는 5보다 큽니다.")
if x < 15:
print("x는 15보다 작습니다.")
else:
print("x는 15보다 큽니다.")
else:
print("x는 5보다 작거나 같습니다.")
x = 10
if x > 0:
if x % 2 == 0:
print("양의 짝수입니다.")
else:
print("양의 홀수입니다.")
else:
print("음수 또는 0입니다.")
x = 10
result = "양의 짝수" if x > 0 and x % 2 == 0 else "음수 또는 0"
print(result)
# 판매량에 따른 생산량 결정 예시
sales = 1000
if sales > 1000:
print("추가 생산이 필요합니다.")
elif sales <= 1000:
print("현재 생산량이 적당합니다.")
for 변수 in 반복할_데이터:
코드_블록
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
for letter in "hello":
print(letter)
for i in range(5):
print(i)
'''
출력:
0
1
2
3
4
'''
for i in range(4+1):
print(i)
'''
출력:
0
1
2
3
4
'''
-range()
: 연속된 정수를 생성하는 데 사용되는 내장 함수
range(stop)
range(start, stop)
range(start, stop, step)
# 0부터 시작하여 5 이전까지의 정수 시퀀스 생성
for i in range(5):
print(i, end=' ')
# 출력: 0 1 2 3 4
# 2부터 시작하여 7 이전까지의 정수 시퀀스 생성
for i in range(2, 7):
print(i, end=' ')
# 출력: 2 3 4 5 6
# 1부터 시작하여 10 이전까지 2씩 증가하는 정수 시퀀스 생성
for i in range(1, 10, 2):
print(i, end=' ')
# 출력: 1 3 5 7 9
🡆 range()
함수의 인자에 따라 생성되는 정수 시퀀스의 범위와 증가량이 달라짐
🡆 이를 활용하여 다양한 반복 작업을 수행 가능
Q. 리스트 슬라이싱 느낌이 비슷해요
A. 차이점 알려드릴게요
- 리스트에서 슬라이싱: 리스트 안에 있는 값을 내가 가져올 때 사용
- range: 값을 내가 "생성"할 때
- 특히, 반복해서 사용할 때
개념은 비슷해 보일 수 있지만 전혀 다른 사용법임
person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
print(key, " : ", value)
'''
print(f"{key}:{value}")
"f-string 문자열 포멧팅(advanced-formatting)"
→ 다른 서식 지정 방법보다 읽기 쉽고 간결하며 오류가 거의 발생하지 않는다고 함
'''
for i in range(1, 11):
if i % 2 == 0:
print(i)
사실 조건문을 안 써도 할 수 있어요
for i in range(2, 11, 2): print(i)
# 조건문과 반복문을 복합적으로 활용하여 1부터 100까지의 숫자 중 3의 배수 출력
for i in range(1, 101):
if i % 3 == 0:
print(i)
이것도 range에 step을 걸어서 할 수 있어요
for i in range(3, 101, 3): print(i)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = []
for num in numbers:
if num % 2 == 0:
even_numbers.append(num)
print(even_numbers)
홀수만 담고 싶다면
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] odd_numbers = [] for num in numbers: if num % 2 == 1: even_numbers.append(num) print(even_numbers)
# 조건문과 반복문을 복합적으로 활용하여 구구단 출력
for i in range(2, 10):
print(f"{i}단:")
for j in range(1, 10):
print(f"{i} x {j} = {i * j}")
# formatting 없는 버전
for i in range(2, 10):
print(i, "단")
for j in range(1, 10):
print(i, "x", j, "=", i * j)
# 조건문과 반복문을 복합적으로 활용하여 별표로 직각 삼각형 그리기
size = 10 # 삼각형의 크기를 입력
for i in range(1, size + 1):
print("*" * i)
sentence = "Hello World"
result = ""
for char in sentence:
if char != "o":
result += char # result = result + char라는 의미
print(result)
ages = {"John": 30, "Jane": 25, "Doe": 35, "Alice": 20}
for name, age in ages.items():
if age > 25:
print(name, " is older than 25")
for i in range(2, 10):
for j in range(1, 10):
print(i, "x", j, "=", i*j)
size = 5
for i in range(size): # 별을 몇 줄?
for j in range(i + 1): # 별을 몇 개?
print("*", end="")
print()
size = 5
for i in range(size, 0, -1):
for j in range(i):
print("*", end="")
print()
추가: 별찍기 - 정삼각형
# 1번 size = 5 for i in range(size): print(" "*((size-1)-i), end="") print("*"*(2*i+1))
size = 5
for i in range(size):
for j in range((size-1)-i):
print(" ", end="")
for j in range(2i-1):
print("", end="")
## 5) 실전 예시
- 데이터 분석에서는 반복문을 데이터의 각 요소를 처리하거나 데이터 구조를 탐색하는 데 사용
### 데이터 정제 및 전처리
- 데이터에서 결측치를 처리하거나 이상치를 탐지하기 위해 각 행이나 열을 반복적으로 검사
- 문자열 데이터를 숫자로 변환하거나 특수문자를 제거하는 등의 전처리 작업에서 반복문을 사용
```python
# 결측치 처리 예시
data = [10, 20, None, 30, 40, None, 50]
cleaned_data = []
for d in data:
if d is not None:
cleaned_data.append(d)
print(cleaned_data)
# 평균 계산 예시
data = [10, 20, 30, 40, 50]
total = 0
for d in data:
total += d
mean = total / len(data)
print("Mean:", mean)
리스트 평균 sum과 len으로 구했던 거 기억나죠?
data = [10, 20, 30, 40, 50] mean = sum(data) / len(data) print("Mean:", mean)
# 특정 조건을 만족하는 데이터 찾기 예시
data = [10, 20, 30, 40, 50]
threshold = 25
for d in data:
if d > threshold:
print("Value greater than", threshold, "found:", d)
# 모델 성능 평가 예시
true_values = [1, 0, 1, 0, 1] # 실제 정답
predicted_values = [0, 0, 1, 0, 1] # AI가 예측한 정답
correct_predictions = 0
for true, pred in zip(true_values, predicted_values):
if true == pred:
correct_predictions += 1
accuracy = correct_predictions / len(true_values) # 얼마만큼 정확하게 예측했는지 계산
print("Accuracy:", accuracy)
while 조건:
코드_블록
i = 1
while i <= 5:
print(i)
i += 1
user_input = ''
while user_input != 'quit':
user_input = input("Type 'quit' to exit: ")
print("You typed:", user_input)
※ 무한 루프를 짤 때는 반드시 ‘break’와 같은 반복을 끝내는 장치를 잘 만들어 둬야 함 ※
while True:
user_input = input("Type 'quit' to exit: ")
if user_input == 'quit':
break
print("You typed:", user_input)
: 무한 루프를 생성하고 사용자가 'quit'을 입력하면 루프를 종료 → break문 사용
break
, pass
, continue
와 같이 특정 조건에 따라 반복 동작을 제어할 제어문을 함께 자주 사용break
, pass
, continue
는 각 반복문의 동작을 중단하거나 다음 반복으로 이동하거나 아무 동작을 하지 않고 다음으로 넘어가는 데 사용# 사용자가 'quit'을 입력할 때까지 반복하여 숫자를 입력받고 합을 출력
total = 0
while True:
num = input("숫자를 입력하세요 (종료하려면 'quit' 입력): ")
if num == 'quit':
break
total += int(num)
print("합:", total)
# 홀수를 출력하는 코드에서 짝수일 경우에는 아무 작업도 수행하지 않고 넘어감
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
pass
else:
print(num, "은 홀수입니다.")
# 1부터 10까지의 숫자 중 짝수를 출력
num = 0
while num < 10:
num += 1
if num % 2 == 1:
continue
print(num)
pass와 continue 비교
# continue num = 0 while num < 10: num += 1 if num % 2 == 1: continue print(num) ''' 출력: 2 4 6 8 10 ''' # pass num = 0 while num < 10: num += 1 if num % 2 == 1: pass print(num) ''' 출력: 1 2 3 4 5 6 7 8 9 10 '''
count = 0
while count < 3:
print("Hello")
count += 1
num = 5
factorial = 1
while num > 0:
factorial *= num
num -= 1
print("Factorial of 5 is:", factorial)
※ 대부분은 for문으로 해결 가능
※ 특정한 상황에서만 while문 쓰게 되는데 그 때 무한 루프에 빠지지 않도록 조심 또 조심!
🡆 d
🡆
num = input("임의의 수를 입력하세요. (0은 양수로 간주합니다)")
if num >= 0:
print("입력된 수는 양수입니다.")
else:
print("입력된 수는 음수입니다.")
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
print(num)
a) 1
b) 2
c) 3
d) 4
e) 5
🡆 b, d
🡆
odd_num = []
for i in range(1, 11):
if i % 2 == 1:
odd_num.append(i)
※ 추가: 다른 풀이
# 1
odd_numbers = []
for i in range(1, 11):
if i % 2 != 0:
odd_numbers.append(i)
# 2
odd_numbers = []
for i in range(1, 11):
if not i % 2 == 0:
odd_numbers.append(i)
🡆 d
for i in range(1, 101):
if i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
※ 추가: 3의 배수이면서 5의 배수인 경우 "Fizz"와 "Buzz"를 모두 출력하도록 만들고 싶은데 어떻게 접근해야 할까? elif를 추가하면 if에서 걸려서 적용이 안 될 것 같은데?
🡆 튜터님께 여쭤보니 if에서 한 번 더 if를 쓰면 된다고 하셨음! 그래서 아래처럼 작성해서 실행해보니 잘 나왔다.
for i in range(1, 101):
if i % 3 == 0:
if i % 5 == 0:
print("Fizz & Buzz")
else:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
아니면 그냥 if절 시작을 i % 15로 하는 건? → 이것도 됨
for i in range(1, 101):
if i % 15 == 0:
print("Fizz & Buzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)