class="layout-aside-right paging-number">
본문 바로가기
데이터 분석/Python

Python(3) 제어문 : 조건문 - if / 반복문 - for, while

by heestory323 2025. 3. 6.

 

1. 조건문 if 

2. 반복문 for

3. 반복문 while

 

📌                                 For 문                                            vs                            While 문 
여러개의 자료가 담긴 것에서 하나씩 뽑아와서 사용할 때                  어떤 상황이 계속 반복되는 것을 기본으로 하여
                                                                                                   조건이 틀어지거나 조건을 빠져나오는 경우 (무한반복)

 

1.조건문 : if, elif(else if), else 

프로그램의 흐름을 제어하는 중요한 요소 

-if문 : 조건1 / elif문 : 조건2,3,4, ...  

if문 : 조건이 True인경우에만 -> 특정 코드 블록을 실행하도록 

elif문 : 개수제한 없이 사용  가능 

 

***** 들여쓰기indent 일관성있게  *****

***** 콜론 : 있어야 *****

-> 조건문 실행 OK

if 조건:
    # 조건이 참일 때 실행될 코드
elif 다른조건:
    # 다른 조건이 참일 때 실행될 코드
else:
    # 위의 조건이 모두 거짓일 때, 나머지 실행될 코드
x = 10
if x > 0:
	print("양수입니다.")
elif x < 0:
    print("음수입니다.")
else:
    print("0입니다.")

*****들여쓰기 & 띄어쓰기 매우 중요*****

 

1-1. 연산자

  • 비교연산자
    • > : 초과
    • < : 미만
    • >= : 이상
    • <= : 이하
    • == : 같음
    • != : 같지 않음
  • 결합 연산자
    • and : 모두 참일 때 참
    • or : 하나 이상이 참일 때 참
    • not : 조건이 거짓이면 참 (반대로 생각하기)

    • += : 기존 값에 새로운 값 누적

    • in 리스트, 튜플, 문자열 : 리스트, 튜플, 문자열에 변수 존재 여부
    • not in : <> in 
    • in 구문에서 아무것도 실행하고 싶지 않다면? pass 쓰기

 

연산자 ex-

x = 10
if x > 0 and x % 2 == 0:
    print("양의 짝수입니다.")

 

x % 2 == 0  : 나머지 를 구하는 연산자 = 2로 나누었을때 나머지는 0
                     짝수 구하기

x % 2 == 1  : 홀수 구하기

 

  • 들여쓰기로 조건문 중첩 사용 가능
x = 10
if x > 0:
    if x % 2 == 0:
        print("양의 짝수입니다.")
    else:
        print("양의 홀수입니다.")
else:
    print("음수 또는 0입니다.")

 

  • 한 줄 간략하게 표현(Comprehension?)
x = 10
result = "양의 짝수" if x > 0 and x % 2 == 0 else "음수 또는 0"
print(result)

 

 

문자열의 경우 문자열 자체가 True

2-1.반복문 : for 

반드시 반복할 데이터(list, tuple, "문자열 그 자체") 를 주고, 그 안에서 값을 가져와서 반복함

각 반복마다 현재 값을 가지는 변수

for 변수 in 반복할_데이터: # list, tuple, string ...
    코드_블록

 

fruits = ["apple", "banana", "cherry"]
for a in fruits: -- fruits에 있는 것을 하나씩 빼서 a에 담기
    print(a)       # "apple", "banana", "cherry" 를 순서대로 출력
    
for letter in "hello":
    print(letter)     # "h","e", "l", "l", "o"를 순서대로 출력

 

 

range() : 범위지정, 슬라이싱과 비슷함

  • 연속된 정수를 나열하는 데 사용되는 함수 
    = list를 길게 쓰기 힘드니까 range() 사용
  • () 안의 숫자 전까지 출력  
range(stop)            # stop 할 숫자 전까지만 출력
range(start, stop)
range(start, stop, step)
range(시작값, 끝값, 간격)
for i in range(4+1):
    print(i)   # 0 ~ 4까지 출력
    
    
# 0부터 시작하여 5 이전까지의 정수 시퀀스 생성
for i in range(5):
    print(i, end=' ')   # 0 1 2 3 4
    
    
# 1부터 시작하여 10 이전까지 2씩 증가하는 정수 시퀀스 생성
for i in range(1, 10, 2):
    print(i, end=' ')   # 1 3 5 7 9
end= '', end='' 란?  줄바꿈 없애기***
보통 print() 는 출력 후 자동으로 줄바꿈되서 나타남.
-> but end="" 를 사용하면 출력된 값들 사이에 공백이 들어가고,
                       줄바꿈이 없어서 값들이 같은 줄에 출력됨. 
  •       리스트의 슬라이싱          vs        반복문 for의 range()
    리스트에서 값을 가져올 때             값을 반복해서 생성할 때

 

딕셔너리에서 반복문 사용할 때 :  .items()

: key만 가져오기, value만 가져오기, ket+value (키, 값) 쌍으로 가져오기 .items()

person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
    print(key, " : ", value)

# 딕셔너리의 키와 값 쌍을 출력
name  :  John
age  :  30
city  :  New York

 

✅ Dictionary = key 와 value를 짝지어 저장하는 상자
a = { key:value, key:value, key:value }

특히 딕셔너리.itmes() 를 사용하면 (key, value) 쌍을 가져올 수 있음
  f" " 를 통해   

for key, value in my_dict.items() :
     print (f" 키: {key}, 값: {value} " )

✅ f-string  , f ""       f" 문자열 {변수} "
숫자를 직접 넣지 않고 반복해서 변수로 대체 가능케 함.

age = 10
print ( "나는 " + str(age) + "살이야")   # 나는 10살이야

age = 10
print( f"나는 {age}살이야" )

조건문 if + 반복문 for 

  • 리스트에서 특정 값 걸러내기
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) # 빈 리스트에 .append()로 값 채워넣기
print(even_numbers)    # [2, 4, 6, 8, 10] # 짝수만 담긴 리스트 출력


odd_numbers = []      
for num in numbers:
    if num % 2 == 1:
        odd_numbers.append(num) # 빈 리스트에 .append()로 값 채워넣기
print(odd_numbers)    # [1, 3, 5, 7, 9]  # 홀수만 담긴 리스트 출력
  • 조건문 & 반복문 복합적 활용
# 조건문과 반복문을 복합적으로 활용하여 구구단 출력
i = [0,1,2,3,4,5,6,7,8,9,10]
for i in range(0, 10):
    print(f"{i}단:")
    for j in range(0, 10):
        print(i, "x", j, " = ", i * j)

 

 

 

  • 문자열에서 특정 문자 제거하기
sentence = "Hello World"
result = ""
for char in sentence:
    if char != "o":
        result += char
    # result = result + char ( 기존 값에 누적하여 다시 저장하는 연산자 += )
print(result)   # 출력 : Hell wrld

 

1. 문자열을 변수에 저장
2. 빈 문자열을 저장할 변수 지정
3. in 뒤에 있는 변수에서 각 char(문자)를 반복해서 가져옴
4. 조건 지정 - char이 o가 아닐 때 실행해야함.
                     그 때 result에 해당 글자를 추가 result += char 
5. 최종결과 print

+= : 하고 그 결과를 값에 추가해서 다시 저장(더하고 나서 다시 변수에 저장)
ex - text = "i like"
      text += " yellow"
print(text)  # i like yellow

 

 

 

  • 딕셔너리에서 특정 조건에 맞는 항목 출력하기
ages = {"John": 30, "Jane": 25, "Doe": 35, "Alice": 20}
for name, age in ages.items():
    if age > 25:
        print(name, " is older than 25")

 

1. ages =  { name: age } 로 묶어진 key, value를 가진 딕셔너리.
2. ages라는 딕셔너리에서 name,age를 반복해서 가져올건데,
   .items()를 쓰면 ages 딕셔너리에서 튜플(name,age) 리스트를 가져올 수 있음.
3.   근데 가져올 때 조건 if age>25 일때만(True) 가져와라.
4.                            name, "is older than 25" 로 print 해라. 

 

 

-이중 for문 사용 가능

for i in range(2, 10):
    for j in range(1, 10):
        print(i, "x", j, "=", i*j)

# 평균 계산 예시
data = [10, 20, 30, 40, 50]
total = 0
for d in data:
    total += d
mean = total / len(data)
print("Mean:", mean)

 

1. data 라는 리스트에 5개의 값이 들어있음.
2. total 이라는 변수의 초기값은 0 
3. data 리스트에서 값을 반복해서 꺼내서 d에 저장하고, total은 d를 계속 더해서 저장하는 거야.
4. mean(평균) = total  /나누기  len(data) : data리스트에 있는 요소의 개수(5개)
5. "Mean:" mean print 하기 (150/5) -> Mean: 30

 

 

# 모델 성능 평가 예시
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)

 

1. true_values, predicted_values 라는 리스트에 길이가 같은 값이 각각 5개들어있음.
2. 올바른 예상값의 초기값은 0이라고 설정.
3. true_values 와 predicted_values 를 합친 zip 리스트에서 값을 반복해서 꺼내서  true,pred에 저장할 것.
4. 여기서 if true == pred 동일하면 correct_predictions 에서 1을 계속해서 추가(누적)
5. 정확도 = correct_predictions /나누기 len(true_values)
6. 정확도 print하기

 

✅ zip(리스트1,리스트2) : 2개의 리스트를 짝지어 값을 하나씩 가져와서 튜플 만들기

 

2-2. 반복문 : while

조건을 만족할 때 까지 코드블록을 반복적으로 실행 (*무한반복 조심)

while의 조건은 T/F 로 반환 가능해야함

 

while 조건:    
    코드_블록
✅ 자주쓰는 표현 
treehit = treehit +1
==
treehit += 1 

treehit + 1 한 값이 다시 treehit에 들어간다. 

 

i = 1
while i <= 5:  --i가 5이하일 때
    print(i)      i를 출력한다
    i += 1  -- i에 1을 계속해서 추가한다
user_input = ''
while user_input != 'quit':
    user_input = input("Type 'quit' to exit: ")
    print("You typed:", user_input)

 

1. user_input = ' ' <- [빈 문자열로 설정]
2. user_input이 'quit' 이 아니면 (참) -> 반복적으로 실행 [조건]
3. Type 'quit' to exit : 네모칸  으로 실행됨 ->  input() 함수로 사용자가 계속 입력할 수 있게 만듦
     입력값은 user_input에 저장
4. print( 입력값 ) 출력
5. 종료 조건 : quit을 입력하면 while문 종료 [브레이크]

 

📌무한루프 주의점 : 브레이크 걸어주기
break, pass, continue 같이 제어문을 만들어줘야 루프 종료 : Ctrl + C 

- break : 반복문 강제 종료
- pass : 그냥 넘어가기 = 실행할 코드가 없으므로 돌아가는게 아니라 그냥 다음 행동 진행
- continue : 조건은 실행이 안되고 while문 처음으로 다시 돌아가기

 

  • 조건에 따른 특정 동작 반복 : 5! (5팩토리) 구하기
 num = 5
factorial = 1
while num > 0:
    factorial *= num
    num -= 1
print("Factorial of 5 is:", factorial)

 

1. 초기값 설정 : num = 5, factorial = 1 
2. while문은 num이 0보다 클 때 반복
3. factorial * = num    factorial*num = num 
   num - =1     num-1 = num 
    =>   1*5 = 5     5=num     
           5*4 = 20   20=num
          20*3 = 60   60=num
          60*2 = 120 120=num
         120*1= 120 
4. 결과 출력 print() 

 

 

Quiz

1. 임의의 수를 변수에 넣고 그 변수에 입력된 수가 양수인지 음수인지 판별하여 결과를 출력하는 파이썬 코드를 작성해보세요.
(0은 양수로 간주합니다)

num = -2
if num >= 0 :
   print("양수")
else :  print("음수")

 

2. 1부터 10까지의 정수 중에서 홀수만을 포함하는 리스트를 생성하는 파이썬 코드를 작성해보세요.

odd_numbers = []
for a in range (1,11):
  if a%2 == 1 :
    odd_numbers.append(a)
  print(odd_numbers)

빈 리스트 [ ] 를 만든 후 for... in range() 문 으로 연속된 숫자들 불러내기 -> 조건 건 후 -> .append() 로 리스트에 추가로 넣기

 

3.1부터 100까지의 정수 중에서 3의 배수일 때 "Fizz", 5의 배수일 때 "Buzz"를 출력하세요.
(나머지 경우에는 그냥 숫자를 출력합니다)

for i in range(1,101) : 
  if i %3 == 0 :
    print("Fizz")
  elif i % 5 == 0 :
    print("Buzz")
  else :
    print(i)