[Python기초]while문 연습(feat.for문)

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!


파이썬 while, for 연습문제


문제1: while문을 이용하여 7을 입력할 때까지 입력을 반복하고, 7이 입력되면 종료되게 하자!


일반적으로 for문은 리스트나 range을 이용해 일정 횟수를 반복하는데 이용하는 반면에, while문은 True값을 가진다면 계속 반복할 수가 있다. 다음의 문제는 숫자를 받아서 7이 나오면 프로그램이 종료가 되게 만드는 코드를 짜는 것이다.


  • 출력 예시:

py8-2


num = int(input('숫자 입력 : '))

# 언제나 그랬듯 input에 int를 씌워 숫자를 받는다.
if num == 7:
    print('7 입력! 종료')
else:
    while True:
        re = int(input('다시 입력 : '))
        if re == 7:
            print('7 입력! 종료')
            break

#  처음에 '숫자 입력 :'을 표현해야해서 if로 num이 7이라면 프로그램이 종료되도록 만들었다.
# 하지만 7이 아니라면 while문이 시작되어 숫자를 다시 입력해야한다. 7이 나올때 까지 True이므로 계속 반복된다.
# 만약 재입력한 값이 7이라면 종료메시지가 출력되며 종료된다.
# 그리고! 가장 중요한 것은 print문 다음에 break를 적어줘야 무한 루프에 빠지지 않는다.

while True: 일때 프로그램이 종료될 일이 없거나 코드를 잘못짜게 된다면 무한 루프에 빠질 수도 있다.
하지만, 프로그램을 짤 때 break를 활용하면 그런 현상을 막을 수 있고 정상적으로 명령문이 작동하게 만들 수 있다. 또한 무한루프 상태는 Run상태를 정지하면 풀 수 있다.
자, 적어놓은 코드를 입력해보자!
7을 입력하면 종료되는 것을 확인할 수 있다.

    숫자 입력 : 1
    다시 입력 : 2
    다시 입력 : 3
    다시 입력 : 7
    7 입력! 종료







문제2: 노래방에서 목이 터져라! 지갑은 텅텅!


1곡에 2,000원하는 노래방 기계에서 현재 잔액 10000원이 소진 될 때까지 노래방을 이용하는 프로그램을 작성해야한다. while문을 이용해 간단하게 풀어볼 수 있다.


  • 출력 예시:

py8-3

while True:
    if currency != 0:
        song += 1
        currency -= 2000
        print(f'노래를 {song}곡 불렀습니다.')
    else:
        print('잔액이 없습니다. 종료합니다.')
        break
    print(f'현재 {currency}원 남았습니다.')

# while문이 계속 반복되기 위해 True로 조건을 적어놓았다.
# 만약 잔액이 0원이 아니라면 노래를 부를 수 있고, 2000원을 사용할 것이다.
# 한 과정이 완료될 때마다 잔액이 출력된다.
# 가진돈 만원은 5곡을 부르고 나서야 0원이 되어 잔액이 부족해서 종료된다.

프로그램을 실행하면 이렇게 출력된다.

    노래를 1곡 불렀습니다.
    현재 8000원 남았습니다.
    노래를 2곡 불렀습니다.
    현재 6000원 남았습니다.
    노래를 3곡 불렀습니다.
    현재 4000원 남았습니다.
    노래를 4곡 불렀습니다.
    현재 2000원 남았습니다.
    노래를 5곡 불렀습니다.
    현재 0원 남았습니다.
    잔액이 없습니다. 종료합니다.


하지만, 이 경우에는 현재 가지고 있는 돈이 딱 떨어지는 경우이고 그게 아닌 경우를 대비하여 코드를 하나 추가적으로 적어보겠다.

c = int(input('가진 돈은?'))
song = 0
while True:
    if c >= 2000:
        song += 1
        c -= 2000
        print(f'노래를 {song}곡 불렀습니다.')
    else:
        print('잔액이 부족합니다. 종료합니다.')
        break
    print(f'현재 {c}원 남았습니다.')

# 크게 다른 것은 없지만, 만원으로 정해져있던 currency를 c로 변경해 값을 변경할 수 있게 만들었고, 2000원보다 적게 있을 경우에도 프로그램이 종료되게 했다.







문제3: for문을 이용해 다음과 같이 출력하시오.


별을 밑에 그림과 예시와 같이 출력하면 된다. 1번 문제는 출력 횟수를 줄여가는 것에 신경써야한다. 특히 2번 문제는 일정한 패턴과 공백을 잘 생각해야한다.


  • 출력 예시: py8-1


1)

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

# range의 범위를 보면 i가 5부터 (0+1)까지 1씩 줄어서 시행된다.
# 따라서 i는 5,4,3,2,1 이렇게 시행될 것이며, 별의 갯수가 하나씩 작아져 출력될 것이다. 
☆☆☆☆☆
☆☆☆☆
☆☆☆
☆☆
☆



2)

n = 0
for i in range(1,10,2):
    result=i * '☆'
    n += 1
    print((5-n)*' '+result+(5-n)*' ')

# for문 range의 범위로 한줄이 시행될때마다 별의 개수가 1부터 2개씩 늘어 총 9개가 출력된다.
# 별출력을 result에 저장한다.
# 다음으로 n이 1씩 늘어나고 첫 시행에는 공백을 4만큼, 그 다음엔 3만큼, 그 다음엔 2만큼 이렇게 하나씩 줄어든다.
# print문에 (공백 별 공백) 이렇게 작성해주면 출력 예시와 비슷하게 출력된다.

잘 실행되나 확인해보자.

    ☆    
   ☆☆☆   
  ☆☆☆☆☆  
 ☆☆☆☆☆☆☆ 
☆☆☆☆☆☆☆☆☆

다른 방법으로 풀은 분들이 있는데 string.center를 활용하는 방법이라고 한다. 밑에 코드를 공유하겠다.

for i in range(1, 10, 2):
    string = '☆' * i
    print(string.center(10))

2022

[web]jQuery 복습 3

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

16 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

9 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑