본문 바로가기
파이썬/알고리즘

while문 정리, 업다운 게임[파이썬 독학]

by davi_kr 2023. 3. 19.

목차

    반응형
    while문 개념

    while문은 특정 조건이 참인 코드 블록을 반복적으로 실행할 있도록 해주는 일종의 루프 구문입니다.

    조건은 또는 거짓으로 평가되는 Boolean 타입으로 구분됩니다. 조건이 True 루프 내의 코드 블록은 반복적으로 실행됩니다. 조건이 False 되면 루프가 종료되고 제어가 루프문 다음으로 전달됩니다.

    count = 0
    while count <= 5:
        print(count)
        count += 1

    1부터 시작해서 5까지는 print를 출력하고 count도 +1을 해줍니다. 여기서 중요하게 봐야 하는 점은 5 다음에 count의 값이 6이 됐기 때문에 while문이 종료됐다는 점입니다. while의 조건문에 따라, count가 6이 되면 False를 반환하기 때문에 종료가 되고 그 이후에 다음 코드를 실행하게 됩니다.

    예시 - 업,다운 게임
    import random
    
    lowest_num = 1
    biggest_num = 100
    try_count = 0
    
    number = random.randint(lowest_num, biggest_num)
    print(number)
    guess = 0
    
    while guess != number:
        guess = int(input(f"Guess a number between {lowest_num} and {biggest_num}: "))
        if guess < number:
            print(f"Too low! current guess: {guess}")
        elif guess > number:
            print(f"Too high! current guess: {guess}")
        try_count += 1
        if guess != number: print(f"try count: {try_count}")
    
    print(f"You guessed it! answer: {guess}\nfinal_count:{try_count}")

     

    이 게임은 무작위로 선택된 1과 100 사이의 숫자를 맞추는 것입니다.

    먼저 lowest_num과 biggest_num을 설정해줍니다.(변수를 바로 뒀는데, 만약에 그 값도 바꾸고 싶다면 int(input())을 사용하면 됩니다.)

    try_count는 몇번이나 시도했는지를 세기 위함으로 시작에는 0으로 둡니다.

    그 다음, random 라이브러리를 가져와서 random.randint() 함수를 사용하여 1과 100 사이의 무작위 정수를 생성합니다. 그리고 guess 변수를 0으로 초기화합니다.

    이제 while문을 사용하여 사용자가 올바른 숫자를 추측할 때까지 반복적으로 입력을 받습니다. guess와 number가 다른 동안에는 while문이 계속해서 실행되고, 추측한 숫자가 너무 낮으면 "Too low! cureent guess: {추측한 숫자}"를 출력하고 추측한 숫자가 너무 높으면 "Too high! cureent guess: {추측한 숫자}"를 출력합니다.

    이 과정 중에 값이 일치하지 않는다면 계속 try_count를 찍어줍니다.

    마지막으로, while문이 종료되면 "You guessed it! answer: {추측한 숫자}와 final_count: {최종 시도한 횟수}"를 출력하고 게임이 종료됩니다.

     

    주의사항

    while문은 파이썬에서 매우 강력한 반복문 중 하나이지만, 잘못 사용하면 무한 루프와 같은 문제가 발생할 수 있습니다. 따라서 다음과 같은 주의점을 알고 사용해야 합니다.

    1. 조건문의 변경: while문 안의 조건문이 항상 참인 경우 무한 루프가 발생할 수 있습니다. 이를 방지하기 위해 조건문이 언젠가는 거짓이 되도록 변경되는지 확인해야 합니다.
    2. 변수의 업데이트: while문 안에서 변수를 업데이트하지 않으면 무한 루프가 발생할 수 있습니다. 따라서 조건문이 참이 되는 경우, 변수를 업데이트하고 다시 조건문을 검사해야 합니다.
    3. 반복 횟수의 제한: 반복이 지나치게 많이 일어나는 경우, 시스템 성능에 부담을 줄 수 있습니다. 따라서 반복 횟수를 제한하거나, 최적화된 코드를 작성하여 최소한의 반복만 수행하도록 해야 합니다.
    4. 중단 조건: while문을 중간에 중단시키는 조건을 추가하는 것이 좋습니다. 이를 통해 사용자의 입력이나 예외상황과 같은 경우에도 코드 실행을 종료할 수 있습니다.(break문 사용)
    예시 - 구구단 (while문 강제 종료, 탈출하기, break문 예시)
    i = 1
    while i <= 9:
        j = 1
        while j <= 9:
            print("{} x {} = {}".format(i, j, i*j))
            j += 1
        if i == 6: break
        i += 1

    if i == 6: break 부분만 제외하면 위의 코드는 1단부터 9단까지 구구단을 출력해줍니다.

    i가 9이하면 참으로 설정되어 있기 때문입니다.

    다만, 여기서 강제로 break문 샘플을 보여드리려 if i == 6: break를 추가했습니다.

    그렇기에 원래라면 구구단이 됐겠지만 이 예시에서는 결론적으로는 육구단이 되겠습니다.

     

    보통, while문으로 구성한다면 참일 때 돌도록 셋팅이 되기 때문에, 꼭 필요한 예외 케이스에 break문을 사용하면 좋을 것 같습니다.

    반응형

    댓글