본문 바로가기
Python/Basic

[Python] 제어문 (if, while, for 문)

by Mr.Han 2024. 8. 21.

" IF 문 "


문제 1. 정수를 입력 받아서, 그 정수가 1과 10 사이의 정수인지 여부를 판단하시오.

>>>
x = int(input("정수 입력: "))

if x >= 1 and x <= 10: # 조건1
    print("1과 10 사이의 정수")
else: # 조건2
    print("1과 10 사이의 정수 X")

 

# Output (input: 6)
1과 10 사이의 정수

 


문제 2. 세 개의 정수를 입력 받은 후 가장 큰 숫자를 출력하시오.

>>>
num1 = int(input("정수1 입력: "))
num2 = int(input("정수2 입력: "))
num3 = int(input("정수3 입력: "))

if num1 > num2 and num1 > num3:
    print(num1)
elif num2 > num1 and num2 > num3:
    print(num2)
else:
    print(num3)

 

 

* 리스트와 함수를 활용하는 방법

>>>
num1 = int(input("정수1 입력: "))
num2 = int(input("정수2 입력: "))
num3 = int(input("정수3 입력: "))

num_list = [num1, num2, num3]
max(num_list)

 


문제 3. 다음 리스트의 중앙값을 구하시오.

 

x = [1, 100, 90, 32, 78, 40, 2]
y = [38, 19, 10, 20, 22, 18]

>>>
# x의 중앙값
a = x.copy()
a.sort()

center_index = len(a) // 2

if len(a) % 2 == 1:
    print(a[center_index])
else:
    print((a[center_index - 1] + a[center_index]) / 2)
    
# y의 중앙값
b = y.copy()
b.sort()

center_index = len(b) // 2

if len(b) % 2 == 1:
    print(b[center_index])
else:
    print((b[center_index - 1] + b[center_index]) / 2)

 

# Output
40
19.5

 


문제 4. 아래의 리스트는 어떤 반의 수학 점수 모음입니다. 학생 점수를 입력 받으면 아래와 같이 출력되게끔 코드를 작성하시오.

'학생의 수학 점수는 00점입니다.'
'반 평균은 00점이고, 평균보다 00점 낮습니다 / 00점 높습니다 / 평균과 같습니다.'

 

- 만약 학생 점수로 0~100 사이의 정수가 입력되지 않으면 아래와 같이 출력하시오.

'잘못된 값을 입력했습니다.'

 

- 반 평균은 소숫점 둘째 자리에서 반올림하시오.

score_list = [70, 90, 50, 30, 100, 95, 95, 40, 90, 20, 100]

 

>>>
x = int(input('0~100 사이의 정수 입력: '))

score_mean = round(sum(score_list) / len(score_list), 2)

diff = round(abs(x - score_mean), 2)

print(f'학생의 수학 점수는 {x}점 입니다.')
print(f'반 평균은 {score_mean}점이고, ', end='')

if x < 0 or x > 100:
    print('잘못된 값을 입력했습니다.')
elif x > score_mean:
    print(f'평균보다 {diff}점 높습니다.')
elif x < score_mean:
    print(f'평균보다 {diff}점 낮습니다.')
else:
    print('평균과 같습니다.')

 

# Output (input: 30)
학생의 수학 점수는 30점 입니다.
반 평균은 70.91점이고, 평균보다 40.91점 낮습니다.

 


문제 5. 가위바위보 게임

 

- 결과 예시

'플레이어는 가위를 냈습니다.'
'컴퓨터는 보를 냈습니다.'
'플레이어가 승리했습니다.'

 

>>>
import random

player = input('가위, 바위, 보 중 하나를 입력: ')
computer = random.choice(['가위', '바위', '보'])

print(f'플레이어는 {player}를 냈습니다.')
print(f'컴퓨터는 {computer}를 냈습니다.')

if player == computer:
    print('무승부입니다.')
elif player == '가위':
    if computer == '바위':
        print('컴퓨터가 승리했습니다.')
    else:
        print('플레이어가 승리했습니다.')
elif player == '바위':
    if computer == '보':
        print('컴퓨터가 승리했습니다.')
    else:
        print('플레이어가 승리했습니다.')
elif player == '보':
    if computer == '가위':
        print('컴퓨터가 승리했습니다.')
    else:
        print('플레이어가 승리했습니다.')
else:
    print('잘못 입력했습니다.')

 

* 딕셔너리 활용 방법

>>>
import random

player = input('가위, 바위, 보 중 하나를 입력: ')
computer = random.choice(['가위', '바위', '보'])
win_dict = {'가위':'보', '바위':'가위', '보':'바위'}

print(f'플레이어는 {player}를 냈습니다.')
print(f'컴퓨터는 {computer}를 냈습니다.')

if player not in win_dict:
    print('잘못 입력했습니다.')
elif computer == player:
    print('무승부')
elif win_dict[computer] == player:
    print('컴퓨터가 승리했습니다.')
else:
    print('플레이어가 승리했습니다.')

 


" WHILE 문 "


문제 1. 짜장면을 열 그릇 먹으면 무료 쿠폰을 받는다는 것을 표현

>>>
jajang = 0

while jajang < 10:
    jajang += 1
    print(f'짜장면을 {jajang}그릇 먹었습니다.')

    if jajang == 10:
        print('무료 쿠폰을 받았습니다.')

 

* 강제로 탈출하는 방법

>>>
jajang = 0

while True: # 항상 반복
    jajang += 1
    print(f'짜장면을 {jajang}그릇 먹었습니다.')

    if jajang == 10:
        print('무료 쿠폰을 받았습니다.')
        break # 반복문 탈출 (없으면 무한루프)

 

# Output
짜장면을 1그릇 먹었습니다.
짜장면을 2그릇 먹었습니다.
짜장면을 3그릇 먹었습니다.
짜장면을 4그릇 먹었습니다.
짜장면을 5그릇 먹었습니다.
짜장면을 6그릇 먹었습니다.
짜장면을 7그릇 먹었습니다.
짜장면을 8그릇 먹었습니다.
짜장면을 9그릇 먹었습니다.
짜장면을 10그릇 먹었습니다.
무료 쿠폰을 받았습니다.

 


문제 2. 1~10까지의 숫자 중 홀수만 출력하시오. (while 반복문)

* 중요
- continue: 해당 조건에서 그 루프가 끝나고 다음 루프로 넘어감.
- pass : 실행할 코드가 없는 것과 마찬가지로 해당 루프는 모두 실행하고 다음 루프로 넘어감.
- break : 조건문 자체를 중단함.

 

>>>
a = 0

while a < 10:
    a += 1

    if a % 2 == 0:
        continue
    print(a)

 

# Output
1
3
5
7
9

 

>>>
a = 0

while a < 10:
    a += 1

    if a % 2 == 0:
        pass
    print(a)

 

# Output
1
2
3
4
5
6
7
8
9
10

 

>>>
a = 0

while a < 10:
    a += 1

    if a % 2 == 0:
        pass
    else:
        print(a)

 

# Output
1
3
5
7
9

 

>>>
a = 0

while a < 10:
    a += 1

    if a % 2 == 0:
        break
    print(a)

 

# Output
1

 


문제 3. 1부터 1000까지 자연수의 합을 구하시오.

 

>>>
i = 0
sum = 0

while i < 1000:
    i += 1
    sum += i

print(sum)

 

# Output
500500

 


문제 4. 1부터 1000까지 5의 배수의 합을 구하시오.

 

>>>
i = 0
sum = 0

while i < 1000:
    i += 1

    if i % 5 != 0:
        continue

    sum += i

print(sum)

 

# Output
100500

 


문제 5. 커피 자판기에 재고가 5잔이 있고, 커피 한 잔의 가격은 300원입니다. 돈을 입력받고, 커피 재고가 다 떨어질 때까지 주문을 반복하는 코드를 작성하시오.

입력된 돈이 300원일 경우:
'커피를 줍니다.'
'남은 커피는 00잔입니다.'

입력된 돈이 300원보다 클 경우:
'거스름돈 00원을 주고 커피를 줍니다.'
'남은 커피는 00잔입니다.'

입력된 돈이 300원보다 작을 경우:
'커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.'
'남은 커피는 00잔입니다.'

커피가 다 떨어진 경우:
'커피가 다 떨어졌습니다. 판매를 중지합니다.'

 

>>>
coffee = 5

while True:
    money = int(input("돈을 넣어 주세요."))

    if money == 300:
        print('커피를 줍니다.')
        coffee -= 1
        print(f'남은 커피는 {coffee}잔입니다.')

    elif money >= 300:
        print(f'거스름돈 {money - 300}원을 주고 커피를 줍니다.')
        coffee -= 1
        print(f'남은 커피는 {coffee}잔입니다.')

    else:
        print('커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.')
        print(f'남은 커피는 {coffee}잔입니다.')

    if coffee == 0:
        print('커피가 다 떨어졌습니다. 판매를 중지합니다.')
        break

 

# Output
커피를 줍니다.
남은 커피는 4잔입니다.
커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피는 4잔입니다.
거스름돈 200원을 주고 커피를 줍니다.
남은 커피는 3잔입니다.
거스름돈 200원을 주고 커피를 줍니다.
남은 커피는 2잔입니다.
커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피는 2잔입니다.
거스름돈 300원을 주고 커피를 줍니다.
남은 커피는 1잔입니다.
커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피는 1잔입니다.
커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피는 1잔입니다.
커피의 가격은 300원입니다. 돈을 다시 돌려주고 커피를 주지 않습니다.
남은 커피는 1잔입니다.
거스름돈 300원을 주고 커피를 줍니다.
남은 커피는 0잔입니다.
커피가 다 떨어졌습니다. 판매를 중지합니다.

 


문제 6. while문을 이용하여 아래와 같이 출력해보시오.

*******
 *****
  ***
   *

 

>>>
i = 8

while i > 0:
    i -= 1

    if i % 2 == 0:
        continue

    star = i
    blank = int((7-i) / 2)
    print(' '*blank, '*'*star, ' '*blank, sep='')

 

# Output
*******
 ***** 
  ***  
   *

 


문제 7. 숫자 맞추기 게임을 만들어보시오.

- 맞출 숫자는 아래 코드와 같이 1~100까지 자연수 중 랜덤으로 정합니다.

- 숫자를 입력할 때마다 더 큰지 작은지 여부를 말해줍니다.

 

>>>
import random

number = random.randint(1, 100)

while True:
    guess = int(input('숫자를 맞추시오. (1~100까지의 자연수)'))

    if number == guess:
        print('맞았습니다.')
        break

    elif number < guess:
        print('틀렸습니다. 더 작은 숫자입니다.')

    else:
        print('틀렸습니다. 더 큰 숫자입니다.')

 

# Output
틀렸습니다. 더 큰 숫자입니다.
틀렸습니다. 더 작은 숫자입니다.
맞았습니다.

 


" FOR 문 "


문제 1. 짜장면을 열 그릇 먹으면 무료 쿠폰을 받는다는 것을 표현

>>>
for i in range(0, 10):
    print(f'짜장면을 {i+1}그릇 먹었습니다.')
print('무료 쿠폰을 받았습니다.')

 

# Output
짜장면을 1그릇 먹었습니다.
짜장면을 2그릇 먹었습니다.
짜장면을 3그릇 먹었습니다.
짜장면을 4그릇 먹었습니다.
짜장면을 5그릇 먹었습니다.
짜장면을 6그릇 먹었습니다.
짜장면을 7그릇 먹었습니다.
짜장면을 8그릇 먹었습니다.
짜장면을 9그릇 먹었습니다.
짜장면을 10그릇 먹었습니다.
무료 쿠폰을 받았습니다.

 

*  continue, pass, break 사용
# continue
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)
    
# pass
for i in range(1, 11):
    if i % 2 == 0:
        pass
    print(i)
    
# break
for i in range(1, 11):
    if i % 2 == 0:
        break
    print(i)

 

# Output
# continue
1
3
5
7
9

# pass
1
2
3
4
5
6
7
8
9
10

# break
1

 

* 리스트에서 for문 사용
- append 함수 사용
>>>
ls = []

for i in range(1, 51):
    if i % 5 == 0:
        ls.append(i)

print(ls)

 

# Output
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

 

* 딕셔너리에서 for문 사용
- items 함수 사용
>>>
dic = {'name' : 'Merry',\
       'num' : 1,\
        'birth' : 'jan'}

for k, v in dic.items():
    print(k, ':', v)

 

# Output
name : Merry
num : 1
birth : jan

 

* 튜플에서 for문 사용
- 다양하게 인덱싱 가능 (리스트 내 리스트도 동일)
>>>
a = [(1, 2), (3, 4), (5, 6)]

for i in a:
    print(i[0] + i[1])
    
    
>>>
a = [(1, 2), (3, 4), (5, 6)]

for i, j in a:
    print(i + j)

 

# Output
3
7
11

 


문제 2. 구구단

>>>
for i in range(1, 10):
    for j in range(1, 10):
        print(i * j, end=' ')
    print() # 줄 바꿈.

 

# Output
1 2 3 4 5 6 7 8 9 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81

 


문제 3. 입력받은 문자열을 다음과 같이 출력

입력 받은 문자열이 'Hello, Python'일 때:
H
eH
leH
lleH
olleH
,olleH
 ,olleH
P ,olleH
yP ,olleH
tyP ,olleH
htyP ,olleH
ohtyP ,olleH
nohtyP ,olleH

 

>>>
input_str = input("문자열을 입력하시오.")
output_str = ""

for i in input_str:
    output_str = i + output_str
    print(output_str)

 

# Output
H
eH
leH
lleH
olleH
,olleH
 ,olleH
P ,olleH
yP ,olleH
tyP ,olleH
htyP ,olleH
ohtyP ,olleH
nohtyP ,olleH

 


문제 4. 1부터 1000까지 5의 배수의 합을 for문으로 구해보시오.

>>>
sum = 0

for i in range(1, 1001):
    if i % 5 != 0:
        continue
    sum += i

print(sum)

 

# Output
100500

 


문제 5. 아래 리스트는 반 학생들의 수학 점수 리스트입니다. 각 등급별 학생수를 구하시오.

81 ~ 100 : A
61 ~ 80 : B
41 ~ 60 : C
0 ~ 40 : D

score_list = [20, 100, 45, 50, 60, 85, 70, 75, 80, 90, 95, 25, 90]

 

>>>
grade_dic = {'A':[], 'B':[], 'C':[], 'D':[]}

for i in score_list:
    if i >= 81:
        grade_dic['A'].append(i)
    elif i >= 61:
        grade_dic['B'].append(i)
    elif i >= 41:
        grade_dic['C'].append(i)
    else:
        grade_dic['D'].append(i)

for k, v in grade_dic.items():
    print(f'{k}등급 : {len(v)}명')

 

# Output
A등급 : 5명
B등급 : 3명
C등급 : 3명
D등급 : 2명

 


문제 6. 숫자 맞추기 게임

- 맞출 숫자는 1~100까지 자연수 중 랜덤으로 정함.

- 숫자를 입력할 때마다 더 큰지 작은지 여부를 말해줌.

- 단, 기회는 5번이고 5번이 지나면 'GAME OVER, 정답은: 00'를 출력함.

>>>
import random

number = random.randint(1, 100)

for i in range(5):
    guess = int(input('숫자를 맞추시오. (1~100 자연수)'))

    if number > guess:
        print('틀렸습니다. 더 큰 숫자입니다.')
    elif number < guess:
        print('틀렸습니다. 더 작은 숫자입니다.')
    else:
        print('맞았습니다.')
        break

if number != guess:
    print(f'GAME OVER, 정답은 {number}')

 

# Output (5번 다 틀렸을 경우)
틀렸습니다. 더 작은 숫자입니다.
틀렸습니다. 더 작은 숫자입니다.
틀렸습니다. 더 작은 숫자입니다.
틀렸습니다. 더 작은 숫자입니다.
틀렸습니다. 더 작은 숫자입니다.
GAME OVER, 정답은 7