세조목

PYTHON 정리(점프투파이썬 - While 제어문)(24.01.01) 본문

데이터 분석 공부/Python

PYTHON 정리(점프투파이썬 - While 제어문)(24.01.01)

세조목 2024. 1. 1. 13:07
  • 본 내용들은 PYTHON을 공부하면서 차후 제가 복습하기위해 정리해놓은 것으로 제가 새롭게 알게된 내용들만을 정리하였습니다. 또한 배움이 부족하여 미처 다 파악하지 못한 부분들도 많으니 혹시나 이 포스팅을 보시는 분들께서는 다른 포스팅, 도서, 강의도 함께 참고하시기 바라겠습니다.

 

if 제어문이 특정 조건을 판단해서 해당 조건에 맞는 상황을 수행하는 제어문이었다면

while 제어문은 조건문이 참인 동안 while문에 속한 문장들을 무한히 반복하는 제어문이다.

 

1. while 예시문

점프투파이썬 교재에 재미있는 예시가 있어 가져와봤다.

'열 번 찍어 안 넘어가는 나무 없다' 라는 속담에서 영감을 얻은 while 예시문이라고 한다.

treehit = 0
while treehit < 10:
        treehit+=1
        print(f'나무를 {treehit}번 찍었습니다.')
        if treehit == 10:
                print("나무 넘어갑니다")
                
                
>>> 나무를 1번 찍었습니다.
>>> 나무를 2번 찍었습니다.
>>> 나무를 3번 찍었습니다.
>>> 나무를 4번 찍었습니다.
>>> 나무를 5번 찍었습니다.
>>> 나무를 6번 찍었습니다.
>>> 나무를 7번 찍었습니다.
>>> 나무를 8번 찍었습니다.
>>> 나무를 9번 찍었습니다.
>>> 나무를 10번 찍었습니다.
>>> 나무 넘어갑니다.

 

2. while문 만들기

여행지를 선택하는 예제다.

먼저 선택지를 나타내는 문자열을 입력한다.

prompt = """
1. "seoul"
2. "daejeon"
3. "daegu"
4. "busan"
5. "jejudo"
6. "nowhere"

enter number: """

 

그런 다음 number라는 변수가 0을 가리키게하고 number가 6이 되지 않는다면 계속해서 prompt를 반복 출력하는

while문을 만든다.

number = 0
while number !=6:
		print(prompt)
        number = int(input())

while문을 돌리면

1. "seoul"
2. "daejeon"
3. "daegu"
4. "busan"
5. "jejudo"
6. "nowhere"

enter number:

이런 화면이 출력되며

6 이외 숫자를 입력했을때는 계속해서 같은 화면이 출력되고,

6을 입력했을때는 while문이 종료된다.

 

3. while문 강제로 빠져나가기

while문은 조건이 참인 경우에 계속해서 반복하는 제어문이라고 했다.

그런데 중간에 멈추고싶을 때가 있을 것이다.

이 때 사용하는 문자가 바로 break다.

 

라면 자판기를 사용한다는 가정하에 while문을 만들어보자

noodle = 15

while True:
    money = int(input('돈을 넣어주세요: '))
    if money == 3000:
        print("라면 여기있습니다.")
        noodle-=1
        print(f'남은 라면의 양은 {noodle}입니다.')
    elif money > 3000:
        print("거스름돈은 %s이고, 라면은 여기있습니다." % (money-3000))
        noodle-=1
        print(f'남은 라면의 양은 {noodle}입니다.')
    else:
        print("라면을 드릴 수 없습니다.")
        print(f'남은 라면의 양은 {noodle}입니다.')
    if noodle == 0:
        print('라면이 모두 떨어져 판매를 중지합니다.')
        break

 

위 이미지에서처럼 noodle이 0이 되면 '라면이 모두 떨어져 판매를 중지한다'는 문구와 함께

while문이 중지됩니다.

break를 적어놨기 때문인데 만약 break를 적어놓지 않았다면 아래 이미지에서와 같이 계속해서 반복된다.

 

4. while 문의 맨 처음으로 돌아가기

while문을 빠져나가지 않고 맨 처음 조건문으로 다시 돌아가고싶은 경우에는 어떻게 해야할까?

if 제어문과 continue를 활용해서 조건에 해당한다면 계속 반복하게끔 할 수 있다.

a = 3
while a < 25:
        a+=1
        if a % 2 == 0: continue
        print(a)

 

위 코드를 보면 a가 25 미만일 경우에는 계속해서 반복되는데

a가 짝수일때( = 2로 나누었을때의 나머지가 0)는 다시 a가 25보다 작은지 여부를 판단하는 조건으로 돌아간다.

만약 a가 홀수라면 a를 출력한다.

다시 말해 이 코드는 홀수를 출력하는 코드라고 할 수 있다.

 

5. 무한 루프

무한 루프란 무한히 반복되는 고리라는 의미다.

while True:
	print("이 문장은 영원히 반복됩니다")

while은 참인 경우에 계속해서 반복된다고했다.

그래서 True인 경우 '이 문장은 영원히 반복됩니다'라는 문장이 계속해서 반복 출력된다.

 

6. 예제 만들어보기

학습한 while문을 활용하여 예제를 만들어봤습니다.

 

점수를 입력하면 점수와 합/불합격 여부를 반환해주는 반복문인데

점수입력 → 합/불합 여부를 반환한 이후에도

계속해서 점수 입력창이 출력되게끔하고싶었습니다.

number = 1
    a = int(input("점수를 입력해주세요 : "))
while number < 50:
    if a > 100:
          print(f'{a}점은 불가능한 점수입니다.')
    elif a == 100:
          print(f'{number}번 학생의 성적은 {a}점이고 수석합격입니다.')
          number+=1
    elif 80 <= a <100:
          print(f'{number}번 학생의 성적은 {a}점이고 우수합격입니다.')
          number+=1
    elif 60 <= a < 79:
          print(f'{number}번 학생의 성적은 {a}점이고 합격입니다.')
          number+=1
    else:
          print(f'{number}번 학생의 성적은 {a}점이고 불합격입니다.')
          number+=1

처음 입력했던 코드입니다.

그런데 이렇게 했을때 아래와 같이 number만 변경되고 나머지 문자열들은 똑같이 출력됐습니다.

 

어떻게 해야하나 고민하던 중

a = int(input("점수를 입력해주세요 : "))

이 코드를 while문 안에 넣어야 한다는걸 발견했습니다.

점수 입력창도 반복해서 출력됐으면 해놓고 while문 안에 넣지 않고 있었네요 ㅎㅎ;;

number = 1
while True:
    a = int(input("점수를 입력해주세요 : "))
    if a > 100:
          print(f'{a}점은 불가능한 점수입니다.')
    elif a == 100:
          print(f'{number}번 학생의 성적은 {a}점이고 수석합격입니다.')
          number+=1
    elif 80 <= a <100:
          print(f'{number}번 학생의 성적은 {a}점이고 우수합격입니다.')
          number+=1
    elif 60 <= a < 79:
          print(f'{number}번 학생의 성적은 {a}점이고 합격입니다.')
          number+=1
    else:
          print(f'{number}번 학생의 성적은 {a}점이고 불합격입니다.')
          number+=1

위와 같이 코드를 수정했을때의 결과값은 아래와 같습니다.