파이썬 기초 학습기-3

SeungHo_LEE·2025년 7월 6일

📚 3: 조건문, 반복문

기본 if문

if문 핵심 규칙

  • 조건식이 참이면 문장 실행, 거짓이면 아무것도 실행하지 않음
  • 콜론 : 필수 - 아직 문장이 종료되지 않음을 의미
  • 들여쓰기 필수 - 보통 공백 4칸 권장
  • 같은 블록은 동일한 들여쓰기 사용해야 함

🔀 if~else문

특징

  • 조건식이 참이면 명령문1 실행, 거짓이면 명령문2 실행
  • 반드시 둘 중 하나는 실행됨

🔄 중첩 if문과 elif문

중첩 if문

if 조건식1:
    명령문1
    if 조건식2:
        명령문2
    else:
        명령문3
else:
    명령문4

elif문

  • else + if = elif
  • 여러 조건을 순차적으로 검사
if 조건식1:
    명령문1
elif 조건식2:
    명령문2
else:
    명령문3

if~else문

score = 85
if score >= 90:
    print("A")
_____:else
    print("B")

elif문

if score >= 90:
    print("A")
_____ score >= 80:elif
    print("B")

논리 연산자

if age >= 10 _____ height >= 165:and
    print("탑승 가능")

if age  65:or
    print("할인 대상")

관계 연산자

if num _____ 0:>, =,  10:
    if num = 90:
    print("A")
elif score >= 80:
    print("B")
else:
    print("C")

💡 반복문 필요성

반복문 정의

  • 특정 부분을 원하는 횟수만큼 반복하는 구문
  • 수백 줄의 코드를 단 몇 줄로 줄이는 효율을 발휘함

반복문 종류

  • for문: 회수 제어 반복 - 정해진 횟수만큼 반복 실행
  • while문: 조건 제어 반복 - 조건식을 충족하는 동안 반복 실행

🔢 for문

for문 기본 형식

# 자료 원소
for 변수 in 리스트:
    반복할 문장

# 범위 값
for 변수 in range():
    반복할 문장

자료 원소 사용

# 리스트
for i in [0, 1, 2]:
    print(i)

# 문자열
for char in "hello":
    print(char)

range 함수

  • range(start, end, step)
  • start: 범위의 시작 값, 생략하면 기본값 0
  • end: 범위의 종료 값, 미포함
  • step: 반환 숫자의 간격, 생략하면 기본값 1

range 함수 사용법

  • range(3) = range(0, 3, 1) = 0, 1, 2
  • range(1, 5) = 1, 2, 3, 4
  • range(1, 10, 2) = 1, 3, 5, 7, 9
  • range(10, 0, -1) = 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

중첩 for문

  • for문 안에 또 다른 for문 사용
  • 실행 횟수: 바깥 for문 반복 횟수 × 안쪽 for문 반복 횟수
  • 안쪽 for문이 더 자주, 더 많이 반복 실행

while문

while문 기본 형식

while 조건식:
    반복할 문장

for문을 while문으로 변환

# for문
for i in range(start, end, step):
    반복할 문장

# while문으로 변환
i = start
while i < end:
    반복할 문장
    i = i + step

무한 루프

while True:
    반복할 문장
  • 중지 방법: Ctrl + C

🛑 break문과 continue문

break문

  • 반복문을 완전히 빠져나옴
  • 반복문 안에서 break문을 만나면 무조건 반복문 종료

continue문

  • 현재 반복을 건너뛰고 다음 반복으로 이동
  • continue 이후 명령문 실행 생략 후 반복문의 처음으로 돌아감

중첩 반복문에서의 break

  • 단 하나의 반복문만 빠져나옴
  • 모든 중첩 반복문을 빠져나오려면 flag 변수 사용
flag = False
for i in range(10):
    for j in range(10):
        if 조건:
            flag = True
            break
    if flag:
        break

나의 생각

for, while을 사용한 과제

1번)
사용자로부터 두 정수를 입력받고 작은 숫자 이상 큰 숫자 이하의 수 중에서
3으로 끝나는 숫자를 제외하고 다른 숫자 모두를 출력하는 프로그램을 작성하시오.

num1 = int(input("number1 : "))
num2 = int(input("number2 : "))

if num1 > num2:
    big = num1
    small = num2
else:
    big = num2
    small = num1

for i in range(small, big + 1):
    if i % 10 != 3:
        print(i, end=" ")

이 부분에서 고민했던 것은 3으로 끝나는 숫자의 판별이였다. 짝수 홀수로 판별할수없고 내가 배운 부분에서는 바로 떠오르지 않았다.
그래서 1의자리만 남게 만들고 그 값이 3이면 제외하고 출력하는 방법을 사용했다.
10으로 나누면 1의자리 숫자만 남게된다. 이 방법은 쉽지만 생각하기 어려웠다고 생각한다.


2번)
사용자로부터 두 숫자를 입력받고 두 숫자 사이의 수 중에서 홀수와 짝수의 개수를 구하는 프로그램을 작성하시오.
(입력된 두 숫자 포함하여 홀수/짝수 계산)

num1 = int(input("number1 : "))
num2 = int(input("number2 : "))

even = 0
odd = 0

if num1 > num2:
    big = num1
    small = num2
else:
    big = num2
    small = num1

for i in range(small, big + 1):
    if i % 2 == 0:
        even += 1
    else:
        odd += 1

print(f"짝수의 개수: {even}, 홀수의 개수: {odd}")

이 문제는 비교적 쉽게 작성할 수 있었다. 홀수와 짝수는 명확하게 '%2' 를 통해 알아낼수 있기 때문이다.


3번)
답을 연속으로 맞출수록 점수가 커지는 OX퀴즈가 있다. O는 정답을, X는 오답을 의미한다. 정답인 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, "OOXXOXXOOO"의 점수는 총 1+2+0+0+1+0+0+1+2+3 = 10점이다. 퀴즈의 OX를 입력받은 후 점수를 계산하는 프로그램을 작성하시오. OX 문자를 입력하면 반복 진행하며, 다른 문자를 입력하면 점수 결과를 출력하고 종료한다.

score = 0
sum = 0

while True:
    OX = input("영어 O or X 를 입력하세요 (종료하려면 'OX외 다른문자' 입력): ")
    if OX != "O" and OX != "o" and OX != "X" and OX != "x":
        break
    
    if OX == "O" or OX == "o":
        score += 1
        sum += score
    elif OX == "X" or OX == "x":
        score = 0


print(f"종료합니다. \n퀴즈 점수는 {sum}점 입니다.")

처음에 보고 꽤 오랜시간동안 고민했다. 단순히 점수의 합이 아니라 연속되면 점수가 올라가는 방식이라 중간에 초기화가 필요했다.
그래서 앞서 배웠던 개념중에서 인터프리터 방식에선 한줄씩 읽기때문에 객체의 값이 계속 변할수있다는 점을 이용했다.
윗줄에서 'O'면 score의 점수가 쌓인다. 그리고 sum에 더해준다. 그런데 'X'가 입력되면 score가 0으로 초기화되고 다시 반복한다.
그럼 또 연속된 'O'의 갯수에 따라 score가 쌓이고 sum에 더해준다. 다른 방법도 있겠지만 좀 더 학습해야할것같다.

또한 사용자에게 입력받을때 영어 ox가 대문자나 소문자 둘다 인식하게 해줘야하는데 그 코드를 and방식으로 연결한건 비효율적으로 보인다.
다른 방법도 있겠지만 현재의 난 이 방법을 사용해야했다.

profile
게임개발자를 꿈꾸는 대학생입니다.

0개의 댓글