본문 바로가기

Personal Study

멘토씨리즈 Python 예제풀이 / Ch4. 파이썬의 제어문

 

Chapter 4. 파이썬의 제어문

 

section6. 반복문 while

 

응용예제1 

정수를 입력받아서 그 횟수만큼 'Hello'를 출력하는 프로그램을 구현하세요. 

0 이하의 값이 입력되면 '잘못된 입력입니다'라는 오류 메시지를 출력하세요

<실행 예>

정수를 입력하세요 >>> 5

1번째 Hello

2번째 Hello

3번째 Hello

4번째 Hello

5번째 Hello

===================

정수를 입력하세요 >>> -5

잘못된 입력입니다.


i = int(input('정수를 입력하세요.'))
j = 1
if i>0:
    while j <= i:
        print('{}번째 Hello'.format(i))
        j += 1
else:
    print('잘못된 입력입니다.')

 

응용예제2

1부터 100 사이의 모든 정수 중에서 7의 배수만 출력하는 프로그램을 구현하세요.

<실행 예>

7

14

21

28

35

...

84

91

98


i = 1
while i <= 100:
    if i % 7 == 0:
        print(i)
    i +=1

 

응용예제3

커피 1잔을 300원에 판매하는 커피자판기가 있습니다.

이 커피자판기에 돈을 넣으면 자판기에서 뽑을 수 있는 커피가 몇 잔이며

잔돈은 얼마인지를 함께 출력하는 프로그램을 구현하세요.

<실행 예>

자판기에 얼마를 넣을까요? >>> 1400

커피 1잔, 잔돈 1100원

커피 2잔, 잔돈 800원

커피 3잔, 잔돈 500원

커피 4잔, 잔돈 200원


i = int(input('자판기에 얼마를 넣을까요?'))
count = 0
while i >= 300:
    count += 1
    i -= 300
    print('커피 {}잔, 잔돈 {}원.'.format(count, i))

   

응용예제4

사용자로부터 0부터 9사이의 정수를 입력받습니다.

이 때 입력된 정수가 5개가 될 때까지 입력받는 프로그램을 구현하세요.

이 때 중복된 값이 입력되면 해당 입력은 무시하세요.

<실행 예>

0 ~ 9 사이 정수를 입력하세요 >>> 0

0 ~ 9 사이 정수를 입력하세요 >>> 0

0 ~ 9 사이 정수를 입력하세요 >>> 0

0 ~ 9 사이 정수를 입력하세요 >>> 1

0 ~ 9 사이 정수를 입력하세요 >>> 2

0 ~ 9 사이 정수를 입력하세요 >>> 5

0 ~ 9 사이 정수를 입력하세요 >>> 3

모두 입력되었습니다.

입력된 값은 {0, 1, 2, 3, 5} 입니다.


count = 0
numbers = []
while count <5:
    num = int(input('0~9사이의 정수를 입력하세요'))
    if num >= 0 and num <= 9:
        count += 1
        numbers.append(num)
    else:
        print('잘못 입력했습니다.')
print('모두 입력되었습니다. 입력된 값은 {}입니다.'.format(numbers))

 

응용예제5

1부터 100 사이의 모든 정수를 한 줄에 10개씩 출력하는 프로그램을 구현하세요.

<실행 예>

1    2    3   4   ...  8    9   10

11 12  13  14 ... 18  19   20

....

91 92  93  94 ... 98  99  100


number = 1
while number <= 100:
    print(number, end=" ")
    if number % 10 == 0:
        print()
    number += 1 




응용예제6

전체 구구단을 다음과 같은 모습으로 출력하는 프로그램을 구현하세요.

<실행 예>

2*1=2    3*1=3    4*1=4    5*1=5      6*1=6      7*1=7      8*1=8      9*1=9

2*2=4    3*2=6    4*2=8    5*2=10    6*2=12    7*2=14    8*2=16    9*2=18    

...

2*9=18  3*9=27  4*9=36  5*9=45    6*9=54    7*9=63     8*9=72   9*9=81


i = 2
while i <= 9:
    j = 1
    while j <= 9:
        print('{}X{}={}'.format(i, j, i*j), end= " ")
        j += 1
    print()
    i += 1

 

section7. 반복문 for

 

응용예제1

1부터 5 사이에 존재하는 모든 정수를 역순으로 출력하는 프로그램을 구현하세요.

<실행 예>

5

4

3

2

1


for i in range(5,0,-1):
    print(i)



응용예제2

사용자로부터 임의의 양의 정수를 하나 입력받은 뒤 1부터 입력받은 정수까지 모든 정수의 합계를 출력하는 프로그램을 구현하세요.
<실행 예>

임의의 양수를 입력하세요 >>> 5

1부터 5 사이 모든 정수의 합계는 15입니다.


i = int(input('임의의 양수를 입력하세요'))
if i > 0:
    total = 0
    for j in range(1, i+1):
        total += j
    print('1부터 {} 사이 모든 정수의 합계는 {}입니다.'.format(i, total))



응용예제3

사용자로부터 임의의 양의 정수를 하나 입력받은 뒤 그 숫자만큼 '과일이름'을 입력받아 'basket'리스트에

저장하는 프로그램을 구현하세요.
<실행 예>

몇 개의 과일을 보관할까요? >>> 5

1번째 과일을 입력하세요 >>> 사과

2번째 과일을 입력하세요 >>> 바나나

3번째 과일을 입력하세요 >>> 체리

4번째 과일을 입력하세요 >>> 오렌지

5번째 과일을 입력하세요 >>> 망고

입력받은 과일들은 ['사과', '바나나', '체리', '오렌지', '망고']입니다.


num = int(input('몇 개의 과일을 보관할까요?'))
list = [ ]
for i in range(1, num+1):
    fruit = input('{}번째 과일을 입력하세요.'.format(i))
    list.append(fruit)
print('입력받은 과일들은{}입니다.'.format(list))



응용예제4

중간고사 성적이 발표되었습니다.

한 반에 총 10명의 학생이 있고, 각 학생의 국어점수를 번호순으로 나열하면 다음과 같습니다.
exam = [99, 78, 100, 91, 81, 85, 54, 100, 71, 50]
100점을 받은 학생의 점수를 제외한 나머지 학생들의 점수를 5점씩 증가시킨 'score'리스트를 생성하고 

출력하는 프로그램을 구현하세요. 단, 증가된 점수가 100점이 초과하지 않도록 처리하세요.
<실행 예>

 [100, 83, 100, 96, 86, 90, 59, 100, 76, 55]


exam = [99, 78, 100, 91, 81, 85, 54, 100, 71, 50]
exam_mod = []
for i in exam:
    i = i+5
    exam_mod.append(i)
score = [ ]
for j in exam_mod:
    if j >= 100:
        j = 100
    score.append(j)
print(score)



응용예제5

1부터 99사이의 모든 정수를 대상으로 369게임의 결과를 출력하는 프로그램을 구현하세요.
<실행 예>

1    2    짝    4     5     짝     7     8      짝    10

....

81  82  짝   84    85    짝    87    88    짝    짝

짝  짝 짝짝 짝    짝  짝짝   짝    짝   짝짝


for i in range(0,10):
    print()
    for j in range(1,11):
        if str(33) in str(i*10+j) or str(36) in str(i*10+j) or str(39) in str(i*10+j) or str(63) in str(i*10+j) or str(66) in str(i*10+j) or str(69) in str(i*10+j) or str(93) in str(i*10+j) or str(96) in str(i*10+j) or str(99) in str(i*10+j):
            print("짝짝", end=" ")
        elif str(3) in str(i*10+j) or str(6) in str(i*10+j) or str(9) in str(i*10+j):
            print("짝", end=" ")
        else:
            print(i*10+j, end=" ")

 

section8. 기타 제어문

 

기본예제4

다음은 사용자로부터 5개의 양의 정수를 입력받아 그 합계를 구하는 프로그램입니다.

만약 0 이하의 값이 입력되면 사용자에게 재입력을 요구합니다.


count = 1
total = 0
while count <= 5:
    n = int(input('{}번째 정수를 입력하세요.'.format(count)))
    if n <= 0:
        print('재입력하세요')
        continue
    total += n
    count += 1
print('입력된 5개 양수의 합은 {}입니다.'.format(total))





응용예제1

현재 10000원을 가지고 있음. 얼마를 사용할 것인지 반복해서 입력받아 10000원을 모두 사용하세요.

0 이하의 금액은 사용할 수 없으며, 현재 가지고 있는 돈보다 더 큰 금액도 사용할 수 없습니다.

<실행 예>

현재 10000원이 있습니다.

사용할 금액 입력 >>> 5000

현재 5000원이 있습니다.

사용할 금액 입력 >>> -5000

0 이하의 금액은 사용할 수 없습니다.

현재 5000원이 있습니다.

사용할 금액 입력 >>> 6000

1000원이 부족합니다.

현재 5000원이 있습니다.

사용할 금액 입력 >>> 4000

현재 1000원이 있습니다.

사용할 금액 입력 >>> 1000

현재 0원이 있습니다.


money = 10000
while True:
    use = int(input('사용할 금액을 입력하세요.'))
    if use <= 0:
        print('0이하의 금액은 사용할 수 없습니다')
        continue
    if use > money:
        print('현재 갖고 있는 금액보다 더 큰 금액을 사용할 수 없습니다.')
        continue
    money -= use
    if money == 0:
        print('현재 0원이 있습니다.')
        break
    print('남은 잔액:{}'.format(money))



응용예제2

영화 평점을 1부터 5 사이의 정수로 입력받아 해당 평점만큼 ★을 표시하는 프로그램을 구현하세요.

표시할 수 있는 범위를 벗어나면 재입력을 요구하세요.

<실행 예>

이번 영화의 평점을 입력하세요 >>> 10

평점은 1~5 사이만 입력할 수 있습니다.

이번 영화의 평점을 입력하세요 >>> -2

평점은 1~5 사이만 입력할 수 있습니다.

이번 영화의 평점을 입력하세요 >>> 5

평점: ★


while True:
    score = int(input('이번 영화의 평점을 입력하세요.'))
    if score >= 1 and score <= 5:
        print("★"*score)
        break
    else:
        print("평점은 1~5 사이만 입력할 수 있습니다.")



응용예제3

저장된 비밀번호를 맞히는 프로그램을 구현하세요.

저장된 비밀번호는 'qwerty'이며, 최대 5번 시도할 수 있습니다.

5번 이내에 비밀번호를 맞히면 '비밀번호를 맞췄습니다'를 출력하고,

그렇지 않으면 '비밀번호 입력 횟수를 초과했습니다'를 입력하세요.

<실행 예>

비밀번호를 입력하세요 >>> 123456

비밀번호를 입력하세요 >>> asdfgh

비밀번호를 입력하세요 >>> qwerty

비밀번호를 맞혔습니다.

==============================

비밀번호를 입력하세요 >>> 123456

비밀번호를 입력하세요 >>> asdfgh

비밀번호를 입력하세요 >>> zxcvbn

비밀번호를 입력하세요 >>> 098765

비밀번호를 입력하세요 >>> poiuyt

비밀번호 입력 횟수를 초과했습니다.


password = "qwerty"
count = 5
while True:
    write = input('비밀번호를 입력하세요.')
    if write == password:
        print("비밀번호를 맞혔습니다.")
        break
    elif count == 1:
            print('비밀번호 입력횟수를 초과했습니다.')
            break
    else:
        "비밀번호를 입력하세요"
        count -= 1

 

응용예제4

다음 조건을 만족하는 구구단을 출력하세요
  1. 짝수인 단(2,4,6,8단)은 출력하지 말고 blank line만 추가하세요.
  2. 각 단까지만 출력하세요. 예를 들어, 3단은 3*3까지만 출력하고, 5단은 5*5까지만 출력하세요.
<실행 예>

3*1=3

3*2=6

3*3=9

 

5*1=5

5*2=10

5*3=15

5*4=20

5*5=25

 

...

 


for i in range(1,10,2):
    for j in range(1,i+1):
        print('{}*{}={}'.format(i, j, i*j), end=" ")