yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/Python

프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 제어문

2021. 9. 3. 20:04
while 반복문 개념

while 반복문 : 무언가를 반복하기 위해 사용

 

while 반복문 문법
while 조건 부분:
    수행 부분

조건 부분이 True이면 수행 부분이 반복된다.

i = 1
while i <= 3:
    print("나는 잘생겼다!")
    i += 1
나는 잘생겼다!
나는 잘생겼다!
나는 잘생겼다!

 

실습과제: while문 연습 1

while 반복문을 사용하여 1 이상 100 이하의 짝수를 모두 출력해 보세요.

출력 결과는 아래와 같이 나와야 합니다.

2
4
6
8
.
.
.
94
96
98
100

i = 1
while i <= 50:
    print(2 * i)
    i += 1

 

실습과제: while문 연습 2

while문을 사용하여, 100 이상의 자연수 중 가장 작은 23의 배수를 출력해 보세요.

i = 100

# 코드를 입력하세요.
115

나의 답안

i = 100
while i % 23 == 0:
    print(i)
    i += 1

무한루프에 빠지는데 방법을 잘 모르겠다!

모범 답안

i = 100
while i % 23 != 0:
    i += 1

print(i)

i를 23으로 나눈 나머지(i % 23)가 0이 될 때까지 while문을 반복하면 됩니다. 다른 말로는,

  1. i를 23으로 나눈 나머지가 0이 아닐 동안에 → while i % 23 != 0
  2. i를 1씩 늘리면 됩니다. → i += 1

 

if문 개념
if 조건 부분:
    수행 부분

 

if문 문법
if 조건 부분:  # 불린 값으로 계산되는 식 ex) x < 3, name == "유재석"
    수행 부분  # 조건을 충족했을 때, 실행하고 싶은 명령

 

elif문
if 점수가 90점 이상이다:
    A를 준다
else:
    if 점수가 80점 이상이다:
        B를 준다
    else:
        if 점수가 70점 이상이다:
            C를 준다
        else:
            if 점수가 60점 이상이다:
                D를 준다
            else:
                F를 준다
if 점수가 90점 이상이다:
    A를 준다
elif 점수가 80점 이상이다:
    B를 준다
elif 점수가 70점 이상이다:
    C를 준다
elif 점수가 60점 이상이다:
    D를 준다
else:
    F를 준다

 

실습과제: 학점 계산기

학생들에게 최종 성적을 알려 주는 '학점 계산기'를 만들려고 합니다.

이 수업에는 50점 만점의 중간고사와 50점 만점의 기말고사가 있는데요. 두 시험의 점수를 합해서 최종 성적을 내는 방식입니다. 규칙은 다음과 같습니다.

  • A: 90점 이상
  • B: 80점 이상 90점 미만
  • C: 70점 이상 80점 미만
  • D: 60점 이상 70점 미만
  • F: 60점 미만

print_grade 함수는 파라미터로 중간고사 점수 midterm_score와 기말고사 점수 final_score를 받고, 최종 성적을 출력합니다.

def print_grade(midterm_score, final_score):
    total = midterm_score + final_score
    # 코드를 쓰세요.


# 테스트
print_grade(40, 45)
print_grade(20, 35)
print_grade(30, 32)
print_grade(50, 45)
B
F
D
A

def print_grade(midterm_score, final_score):
    total = midterm_score + final_score
    # 코드를 쓰세요.
    if total >= 90:
        print("A")
    elif total >= 80:
        print("B")
    elif total >= 70:
        print("C")
    elif total >= 60:
        print("D")
    else:
        print("F")


# 테스트
print_grade(40, 45)
print_grade(20, 35)
print_grade(30, 32)
print_grade(50, 45)

 

실습과제: 이상한 수학 문제 1

while문과 if문을 활용하여, 100 이하의 자연수 중 8의 배수이지만 12의 배수는 아닌 것을 모두 출력하세요.

예를 들어서 16은 8의 배수이지만 12의 배수가 아니니까 조건에 부합합니다. 하지만 48은 8의 배수이면서 12의 배수이기도 해서 조건에 부합하지 않습니다.

실행하면 콘솔에 아래와 같이 출력되어야 합니다.

8
16
32
40
56
64
80
88

i = 1
while i <= 100:
    if i % 8 == 0 and i % 12 != 0:
        print(i)
    i += 1

 

실습과제: 이상한 수학 문제 2

10보다 작은 2 또는 3의 배수는 2, 3, 4, 6, 8, 9이며, 이들의 합은 32입니다.

while문과 if문을 활용하여, 1,000보다 작은 자연수 중 2 또는 3의 배수의 합을 출력하는 프로그램을 써 보세요.

333167

나의 답안

i = 1
sum = 0
while i < 1000:
    if i % 2 == 0 or i % 3 == 0:
       sum += i
    i += 1
print(sum)

모범 답안

i = 1
total = 0

while i < 1000:
    if i % 2 == 0 or i % 3 == 0:
        total += i
    i += 1

print(total)

참고로 i += 1은 if문 밖에 있어야 합니다. 그렇지 않으면 끝이 안 나는 "무한 루프"에 빠지게 됩니다. 주의해 주세요!

 

실습과제: 약수 찾기

정수 n의 약수는 n을 나누었을 때 나누어 떨어지는 수입니다. 만약 정수 i가 정수 n의 약수라면, n을 i로 나누었을 때 나머지가 0이 나와야 하는 거죠.

정수 120의 약수를 모두 출력하고, 총 몇개의 약수가 있는지 출력하는 프로그램을 써 보세요. 아래처럼 콘솔에 출력되어야 합니다.

1
2
3
4
5
6
8
10
12
15
20
24
30
40
60
120
120의 약수는 총 16개입니다.

나의 답안

i = 1
list = []

while i <= 120:
    if 120 % i == 0:
        print(i)
        list.append(i)
    i += 1
    
print("120의 약수는 총 {}개입니다.".format(len(list)))

모범 답안

N = 120
i = 1
count = 0

while i <= N:
    if N % i == 0:
        print(i)
        count += 1
    i += 1

print("{}의 약수는 총 {}개입니다.".format(N, count))

 

실습과제: 택이의 우승 상금

1988년 쌍문동에 사는 택이는 바둑 대회 우승 상금으로 5,000만원을 받았습니다. 하지만 바둑 외에는 아는 게 없으니, 이웃 어른들에게 이 돈으로 무엇을 해야 할지 물어보기로 하였습니다.

은행에서 근무하는 동일 아저씨는 은행에 돈을 맡겨서 매년 이자로 12%씩 받는 것을 추천하셨습니다. 1년 후인 1989년에는 5,000만원의 12% 이자인 600만원이 더해져 5,600만원이 된다고 하면서요.

이 이야기를 들은 미란 아주머니는 고작 12% 때문에 생돈을 은행에 넣느냐며, 얼마 전 지어진 은마아파트를 사라고 추천하셨습니다. 당시 은마아파트의 매매가는 5,000만원이었죠.

2016년 기준 은마아파트의 매매가는 11억원인데요. 1988년 은행에 5,000만원을 넣었을 경우 2016년에는 얼마가 있을지 계산하여, 동일 아저씨와 미란 아주머니 중 누구의 말을 듣는 것이 좋았을지 판단해 보세요. 2016년 은행에 얼마가 있을지는 꼭 while문을 사용해서 계산해 주세요!

2016년에 은행에 저축해 둔 금액이 더 크면, *원 차이로 동일 아저씨 말씀이 맞습니다.가 출력되도록 하세요. 반대로 은마아파트의 가격이 더 크면, *원 차이로 미란 아주머니 말씀이 맞습니다.가 출력되도록 하세요. 여기서는 꼭 if문을 사용해 주세요!

원하는 출력 결과

94193324원 차이로 동일 아저씨 말씀이 맞습니다.

trial 1

m_1988 = 50000000
m_dongil = m_1988 * 1.12
m_miran = 1100000000
i = 2

while i < 2016 - 1988:
    m_dongil = m_dongil * 1.12
    i += 1

if m_dongil > m_miran:
    print("{}원 차이로 동일 아저씨 말씀이 맞습니다.".format(round(m_dongil - m_miran)))
else:
    print("{}원 차이로 미란 아주머니 말씀이 맞습니다.".format(round(m_miran - m_dongil)))
33755960원 차이로 미란 아주머니 말씀이 맞습니다.

 

실습과제: 피보나치 수열

피보나치 수열(Fibonacci Sequence)라고 들어 보셨나요?

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...1,1,2,3,5,8,13,21,34,55,...

우선 피보나치 수열의 1번 항과 2번 항은 각각 1입니다. 3번 항부터는 바로 앞 두 항의 합으로 계산됩니다. 예를 들어서 3번 항은 1번 항(1)과 2번 항(1)을 더한 2이며, 4번 항은 2번 항(1)과 3번 항(2)을 더한 3입니다.

피보나치 수열의 첫 50개 항을 차례대로 출력하는 프로그램을 작성해 보세요.

1
1
2
3
5
8
13
21
.
.
.
4807526976
7778742049
12586269025

나의 답안

i = 1
list = [1, 1]

while i <= 50:
    if i <= 2:
        print(1)
    else:
        print(list[i - 3] + list[i - 2])
        list.append(list[i - 3] + list[i - 2])
    i += 1

모범 답안

 

실습과제: 구구단

while문을 사용해서 구구단 프로그램을 만들어 봅시다. 실행하면 아래와 같은 결과물이 출력되어야 합니다.

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
.
.
.
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

참고로 이 문제는 '중첩 while문'이라는 개념을 사용해야 하는데요. 중첩 while문은 while문의 수행 부분 안에 또 다른 while문을 넣는 것을 이야기 합니다. 제가 특별히 설명드리지 않은 개념이지만, 조금 고민하다 보면 여러분이 직접 알아내실 수도 있습니다. 도저히 생각이 안 난다면 힌트를 참고해 주세요!


trial 1

i = 1
j = 1

while i <= 9:
    while j <= 9:
        print("{} * {} = {}".format(i, j, i * j))
        j += 1
    i += 1
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9

 

제어문 꿀팁

break문

만약 while문의 조건 부분과 상관 없이 반복문에서 나오고 싶으면, break문을 사용하면 된다.

i = 100

while True:
    # i가 23의 배수면 반복문을 끝냄
    if i % 23 == 0:
        break
    i = i + 1
    
print(i)
115

continue문

현재 진행되고 있는 수행 부분을 중단하고 바로 조건 부분을 확인하고 싶으면 continue문을 쓰면 된다.

i = 0

while i < 15:
    i = i + 1
    
    # i가 홀수면 print(i) 안 하고 바로 조건 부분으로 돌아감
    if i % 2 == 1:
        continue
    print(i)
2
4
6
8
10
12
14

'~2023.02 > Python' 카테고리의 다른 글

프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 사전 & 파이썬 데이터의 비밀  (0) 2021.09.05
프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 리스트 & for 반복문  (0) 2021.09.04
프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 추상화  (0) 2021.09.03
프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 자료형  (0) 2021.09.03
프로그래밍 기초 in Python _ [토픽1] 프로그래밍 시작하기 in Python  (0) 2021.09.02
    '~2023.02/Python' 카테고리의 다른 글
    • 프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 사전 & 파이썬 데이터의 비밀
    • 프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 리스트 & for 반복문
    • 프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 추상화
    • 프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 자료형
    yooniiverse
    yooniiverse

    티스토리툴바