조건문
- if, elif(else if의 줄임말), else 키워드 사용
- 특정 조건이 참(True)인 경우에만 특정 코드 블록을 실행 (if, elif, else 중 하나만 실행)
- 파이썬은 들여쓰기를 통해 블록을 식별하므로 들여쓰기 잘 하는 게 중요함
- 조건이 여러개면 if 쓰고 elif 여러개 쓰면 됨
x = 10
if x > 0:
print("양수입니다.") # if는 조건이 참일 때 실행될 코드
elif x < 0:
print("음수입니다.") # elif는 다른 조건이 참일 때 실행될 코드
else:
print("0입니다.") # else는 위의 조건이 모두 거짓일 때 실행될 코드
# 들여쓰기의 중요성, 이렇게 블록 구분이 가능함
x = 10
if x > 5:
print("첫 번째 블록 시작")
if x < 15:
print("두 번째 블록 시작")
else:
print("첫 번째 블록 끝")
비교 연산자
- > : 초과
- < : 미만
- >= : 이상
- <= : 이하
- == : 같음
- != : 같지 않음
논리 연산자
- and : 모두 참일 때 참
- or : 하나 이상이 참일 때 참
- not : 조건을 부정
조건문 예시
# and, or, not을 통한 다중 조건식
x = 10
y = 7
if x > 5 and y < 10:
print("x는 5보다 크고, y는 10보다 작습니다.")
if x < 5 or y > 10:
print("x는 5보다 작거나, y는 10보다 큽니다.")
if not (x == 5):
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)
- 리스트, 튜플, 문자열 등과 같은 반복 가능한(iterable) 데이터 타입으로 순회함
- while보다 for을 더 자주 씀
- for문 기본 구조
for 변수 in 반복할_데이터:
코드_블록
연산자
- == : 등호 (= 는 변수 할당에 사용되었으므로)
- * : 곱하기
- / : 나누기
- + : 더하기
- - : 빼기
- % : 나눈 나머지
- // : 나눈 몫
for문 기본 사용법
- 리스트 순회하기
- 문자열 순회하기
- range함수와 함께 사용하기
- 딕셔너리 순회하기
# 리스트 순회
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
' ' '
apple
banana
cherry
' ' '
# 문자열 순회
for letter in "hello":
print(letter)
' ' '
h
e
l
l
o
' ' '
# range 함수와 함께 사용
for i in range(5):
print(i)
' ' '
0
1
2
3
4
' ' '
# 딕셔너리 순회
person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
print(key, " : ", value)
' ' '
name : John
age : 30
city : New York
' ' '
range 함수
- 연속된 정수를 생성하는 데 사용되는 내장 함수
- 주로 반복문에 사용되며, 특히 for 루프와 자주 사용됨
- start (시작값): 순차적인 정수 시퀀스의 시작 값. 생략 가능, 기본값은 0
- stop (끝값): 순차적인 정수 시퀀스의 끝 값. 필수 지정되어야 함. 단, 실제 생성되는 마지막 숫자는 이 값보다 작음.
이게 헷갈리면, 끝값이 원래 6일 때 5+1 같은 식으로 써두는 방법도 있음 (5까지 출력된다는 걸 스스로 인지하기 위해) - step (증가값): 각 숫자 사이의 간격. 생략 가능, 기본값은 1
range(stop)
range(start, stop)
range(start, stop, step)
# 둘의 결과 값은 같음
range(3) = range(0,3,1)
# 사례 1: range(stop)
# 0부터 시작하여 5 이전까지의 정수 시퀀스 생성
for i in range(5):
print(i, end=' ')
' ' '
0 1 2 3 4
' ' '
# 사례 2: range(start, stop)
# 2부터 시작하여 7 이전까지의 정수 시퀀스 생성
for i in range(2, 7):
print(i, end=' ')
' ' '
2 3 4 5 6
' ' '
# 사례 3: range(start, stop, step)
# 1부터 시작하여 10 이전까지 2씩 증가하는 정수 시퀀스 생성
for i in range(1, 10, 2):
print(i, end=' ')
' ' '
1 3 5 7 9
' ' '
for과 조건문 함께 사용하기
# 1부터 10까지의 숫자 중 짝수만 출력
for i in range(1, 11):
if i % 2 == 0:
print(i)
# 조건문과 반복문을 복합적으로 활용하여 1부터 100까지의 숫자 중 3의 배수 출력
for i in range(1, 101):
if i % 3 == 0:
print(i)
# if문 안 쓰고 이렇게 해도 3의 배수 출력됨. 3으로 시작해서 3간격으로.
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)
# 조건문과 반복문을 복합적으로 활용하여 구구단 출력
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): # 직관적으로 알아보게 size+1로 range 지정
print("*" * i)
# 문자열에서 특정 문자 제거하기
# 문자열에서 "o"를 제외한 모든 문자를 새로운 문자열에 추가하여 출력
sentence = "Hello World"
result = ""
for char in sentence:
if char != "o":
result += char # result = result + char의 의미
print(result)
' ' '
Hell Wrld
' ' '
# 딕셔너리에서 특정 조건에 맞는 항목 출력하기
# 딕셔너리에서 값이 25보다 큰 경우에 대해 이름과 함께 메시지를 출력
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문
# 구구단 출력하기
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()
실전 예시
- 데이터 정제 및 전처리 (결측치, 이상치 처리)
# 결측치 처리 예시
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)
- 데이터 탐색
# 특정 조건을 만족하는 데이터 찾기 예시
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]
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)
- while문은 조건문과 반복문의 조합. 조건을 만족하는 동안 코드 블록을 반복적으로 실행
- 특정 조건이 참(True)일 때에만 실행, 거짓(False)될 때까지 반복 `무한반복 주의!`
- for 사용 권장.. 최대한 많이 뽑아야 할 때도 for에 range로 100만 넣어버리는게 나음. 컴퓨터 과부하 올 일 없음
- while문 기본 구조
while 조건:
코드_블록
- 여기서 조건은 불리언(boolean) 값(True 또는 False)을 반환하는 표현식
while문 기본 사용방법
# 1부터 5까지 출력하기
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)
# 조건에 따른 특정 동작 반복, "Hello"를 세 번 출력
count = 0
while count < 3:
print("Hello")
count += 1
# 조건에 따른 특정 동작 반복, 5의 팩토리얼(=5*4*3*2*1)을 계산
num = 5
factorial = 1
while num > 0:
factorial *= num
num -= 1
print("Factorial of 5 is:", factorial)
반복문에 필요한 제어문 ( break, pass, continue )
- 무한 루프를 짤 때는 반드시 ‘break’와 같은 반복을 끝내는 장치를 잘 만들어야 함!
colab에서는 어느정도 시간이 지나면 자동으로 끊기겠지만, 본인 컴퓨터에서 그렇게 돌렸다간~~ - break 예시
# 사용자가 'quit'을 입력할 때까지 반복하여 숫자를 입력받고 합을 출력
total = 0
while True:
num = input("숫자를 입력하세요 (종료하려면 'quit' 입력): ")
if num == 'quit':
break
total += int(num)
print("합:", total)
- pass 예시 (코드가 비어있는 것과 같음)
# 홀수를 출력하는 코드에서 짝수일 경우에는 아무 작업도 수행하지 않고 넘어감
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
pass
else:
print(num, "은 홀수입니다.")
- continue 예시
- pass와 continue의 차이 : pass는 그냥 쭉 실행하고 continue는 반복문으로 올라감
- 다음 코드로 넘어가는게 아니라 다음 반복으로 넘어가고 싶으면 continue를 써야 함
# 1부터 10까지의 숫자 중 짝수를 출력
# 짝수일 경우에만 출력을 수행하고, 홀수일 경우 다음 반복을 진행
num = 0
while num < 10:
num += 1
if num % 2 == 1:
continue # continue했으니 홀수면 print를 시행하지 않고 바로 반복으로 넘어감
print(num)
' ' '
2
4
6
8
10
' ' '
# 만약에 여기서 continue 대신 pass를 쓰면 결과가 다름
# pass는 그냥 지나가고, 그 다음 실행할게 있으면 그것도 실행해줌
# continue는 무조건 반복문으로 올라감
num = 0
while num < 10:
num += 1
if num % 2 == 1:
pass # pass는 이 if문이 아예 의미없어지는 것
print(num)
' ' '
1
2
3
4
5
6
7
8
9
10
' ' '
for i in range(3):
print(i)
if i == 0:
continue
'''
1
2
'''
퀴즈
Quiz 1.
임의의 수를 변수에 넣고 그 변수에 입력된 수가 양수인지 음수인지 판별하여 결과를 출력하는 파이썬 코드를 작성해보세요. (0은 양수로 간주합니다)
문제풀이
num = 3
if num % 2 == 0:
print(num,"은 양수입니다.")
else:
print(num,"은 음수입니다.")
결과
Quiz 2.
1부터 10까지의 정수 중에서 홀수만을 포함하는 리스트를 생성하는 파이썬 코드를 작성해보세요.
문제풀이
# 리스트 새로 생성할 땐 공란으로 대괄호..!
odd_list = []
for i in range(1,10+1):
if i % 2 ==1:
odd_list.append(i)
print(odd_list)
결과
Quiz 3.
1부터 100까지의 정수 중에서 3의 배수일 때 "Fizz", 5의 배수일 때 "Buzz"를 출력하세요. (나머지 경우에는 그냥 숫자를 출력합니다)
문제풀이
for i in range (1,100+1):
if i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
결과