본문 바로가기
파이썬/데이터 다루기

[240909] 파이썬#5 제어문 실습

by 황오독 2024. 9. 9.

실습 #1: 조건문(if문)

(문제) 변수 score에 임의의 점수를 저장하고, 다음의 조건에 맞게 출력하도록 아래 구문을 완성하세요.
90 <= score 이면 'A'
80 <= score < 90 이면 'B'
70 <= score < 80 이면 'C'
60 <= score < 70 이면 'D'
score < 60 이면 'F'
score = 55

if (90 <= score):
    print('A')
elif (80 <= score < 90):
    print('B')
elif (70 <= score < 80):
    print('C')
elif (60 <= score < 70):
    print('D')
else:
    print('F')

 

실습 #2: 반복문(for 문)

다음 모양을 출력하세요.
힌트: 각 줄마다 출력해야 하는 '*'의 수가 하나씩 증가한다는 것을 이용해 봅니다.
*
**
***
****
*****

<정답>

for i in range(1,6):
    print('*' * i)

 

다음 모양을 출력하시오.
힌트: 각 줄마다 출력해야 하는 ' '(공백)과 '*'의 수의 규칙을 생각해 봅니다.
    *
   **
  ***
 ****
*****

 

<내가 생각한 정답>

for i in range(6):
    print(('*' * i).rjust(6))

이 문제의 핵심은 반복문으로 해당 모양을 출력하는 건데,

이전에 배웠던 rjust를 응용했다.

좋은 시도라고 했지만, 문제의도를 파악하는 것도 중요하므로, 선생님께서 알려주신 정답도 함께 기록하였다.

<실제 정답>

for i in range(1,6):
    print((' ' * (5-i)) + ('*' * i))

 

 

[심화] 2단부터 9단까지 구구단을 아래 예시와 같이 출력하세요.
구구단 2 단을 출력합니다.  
2 x 1 = 2  
2 x 2 = 4  
2 x 3 = 6  
2 x 4 = 8  
2 x 5 = 10  
2 x 6 = 12  
2 x 7 = 14  
2 x 8 = 16  
2 x 9 = 18  
구구단 3 단을 출력합니다.  
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
(생략)
힌트: for loop를 중첩해서 수행해야 합니다.
for i in range(2,10):
    print(f'구구단 {i} 단을 출력합니다.')
    for n in range(1,10):
        print(f'{i} x {n} = {i * n}')

=> 구구단은 정말 파이썬이나 c언어 배울때도 지겹도록 했던 반복문이었는데,

    처음 배웠을 땐 구현하는게 힘들다고 생각했었는데, 지금 해보니 넘 쉬워서 .. 놀랬다.

 

실습 #3: 반복문(while 문)

# (문제) 1부터 100까지 3의 배수만 더하세요.
# 변수 선언
tot, i = 0, 0

# 100까지 3의 배수 합 구하기
while True:
    i += 1
    if i > 100:
        break
    if i % 32 == 0:
        tot += i
    else:
        continue

# 확인
print(tot)

while문은 순서를 어떻게 넣어야할 지 모르겠어서 계속 무한루프의 늪에 빠지게 된다.

[심화] 홍길동의 과목별 점수는 아래와 같습니다.
국어: 96점, 수학: 72점, 영어: 88점
변수 kor, math, eng에 각 과목 점수를 저장한 뒤,
과목명을 입력받아, 해당하는 과목의 점수를 출력하고 종료합니다.
일치하는 과목명이 없으면 '잘못 입력하셨습니다.'를 출력하며 다시 입력 받게 합니다.

# 변수에 각 과목의 점수를 저장
kor = 96
math = 72
eng = 88

while True:
    # 사용자로부터 과목명을 입력받음
    subject = input("과목명을 입력하세요 (kor, math, eng): ")

    # 입력된 과목명에 따라 점수를 출력
    if subject == "kor":
        print(f"국어 점수: {kor}점")
        break
    elif subject == "math":
        print(f"수학 점수: {math}점")
        break
    elif subject == "eng":
        print(f"영어 점수: {eng}점")
        break
    else:
        # 잘못된 입력 처리
        print("잘못 입력하셨습니다. 다시 시도해 주세요.")

break를 안넣어도 되지만, 다음 코드 실행할 때 자꾸 에러가 떠서 우선은 과목별로 입력하고 점수가 나오면 빠져나올 수 있게 설정을 하였다.

 

처음에 input문을 While문 앞에 작성해서 결과가 이상하게 나왔다.

 

 [심화] 5,000원의 돈을 갖고 있습니다. 동료들과 AIVLE 로봇카페에서 아메리카노를 구매하려고 합니다. (아메리카노는 한잔에 1,300원)

- 갖고 있는 돈을 변수 money, 커피 한 잔의 가격을 변수 coffee에 저장합니다.
- '아메리카노를 구입하시겠습니까?'에 대한 대답을 입력받아, 대답이 '네'일 경우 커피가 판매됩니다.
- 다른 대답을 할 경우 '다시 입력해 주세요.'라고 출력합니다.
- 한 잔을 구매할 때마다 남은 돈을 변수 money에 저장하여 출력합니다.
- 커피를 살 돈이 모자랄 경우 '돈이 모자랍니다. 커피를 구입할 수 없습니다.'라고 출력하고 종료합니다.
- 힌트: while 문 내에서 if 조건문을 중첩해서 사용해야 합니다.


print('=====로봇자판기====')
money = 5000
coffee = 1300

while True:
    order = input('아메리카노를 구입하시겠습니까?(네)')
    if order == '네':
        money -= 1300
        print(f'아메리카노를 구매하셨습니다. 잔액은 {money}원입니다.')
        if money < 1300:
            print('돈이 모자랍니다. 커피를 구입할 수 없습니다.')
            break
        if money < 1300:
            print('돈이 모자랍니다. 커피를 구입할 수 없습니다.')
            break
    else:
        print('다시 입력해주세요.')

 

로봇자판기 문제는 앞에 과목 점수에 시간을 너무 잡아먹어서 겁을 먹고 풀었는데,

천천히 한줄씩 문제의 의미를 읽으면서 작성하다보니.

한번에 코드를 맞추었다!!!

 

 

이제 코드마스터랑 코드업 풀러가야징..

기록한답시고 작성하고 있긴한데 이렇게 공부하는게 맞는건지 아직은 모르겠다.

 

우선 꾸준히 하는 것에 의의를 두고 천천히 내 방식을 찾아가야할 것 같다!!