Python에서 Do-While 루프를 어떻게 에뮬레이트할 수 있습니까?

2023. 12. 17. 15:53python/basic

요약: while 루프 및 break 문을 사용하세요.

이 루프는 형식 조건으로 True을 사용합니다. 이 트릭은 루프를 무한 루프로 바꿉니다. 조건문 이전에 루프는 필요한 모든 처리를 실행하고 중단 조건을 업데이트합니다. 이 조건이 true로 평가되면 break 문은 루프에서 벗어나고 프로그램 실행은 일반 경로를 계속 진행합니다.

참고: 무한 루프와 break 문을 사용하면 do-while 루프를 에뮬레이트할 수 있습니다. 이 기술은 Python 커뮤니티에서 일반적으로 권장하지만 완전히 안전하지는 않습니다.

예를 들어 문 앞에 continue 문을 삽입하면 루프가 중단 조건을 놓치고 제어할 수 없는 무한 루프에 빠질 수 있습니다.

In [ ]:
while True:
    number = int(input("Enter a positive number: "))
    print(number)
    if not number > 0:
        break

Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1

Do-While 루프는 실제로 어떻게 작동합니까?

In [ ]:
# guess.py

from random import randint

LOW, HIGH = 1, 10

secret_number = randint(LOW, HIGH)
clue = ""

while True:
    guess = input(f"Guess a number between {LOW} and {HIGH} {clue} ")
    number = int(guess)
    if number > secret_number:
        clue = f"(less than {number})"
    elif number < secret_number:
        clue = f"(greater than {number})"
    else:
        break

print(f"You guessed it! The secret number is {number}")

Do-While 루프와 While 루프의 차이점은 무엇입니까?

간단히 말해서, do-while 루프와 while 루프의 주요 차이점은 전자는 루프 조건이 마지막에 확인되기 때문에 본문을 적어도 한 번 실행한다는 것입니다. 반면, 일반 while 루프의 본문은 조건이 true로 평가되면 실행되며, 이는 루프 시작 시 테스트됩니다.

Python에서 Do-While 루프를 에뮬레이트하기 위해 어떤 대안을 사용할 수 있습니까?

루프 이전에 첫 번째 작업 수행

In [ ]:
# guess.py

from random import randint

LOW, HIGH = 1, 10

secret_number = randint(LOW, HIGH)
clue = ""

def process_move(clue):
    user_input = input(f"Guess a number between {LOW} and {HIGH} {clue} ")
    number = int(user_input)
    if number > secret_number:
        clue = f"(less than {number})"
    elif number < secret_number:
        clue = f"(greater than {number})"
    return number, clue

number, clue = process_move(clue)  # First iteration

while number != secret_number:
    number, clue = process_move(clue)

print(f"You guessed it! The secret number is {number}")

초기에 참인 루프 조건 사용

In [ ]:
# guess.py

from random import randint

LOW, HIGH = 1, 10

secret_number = randint(LOW, HIGH)
clue = ""
number_guessed = False

while not number_guessed:
    user_input = input(f"Guess a number between {LOW} and {HIGH} {clue} ")
    number = int(user_input)
    if number > secret_number:
        clue = f"(less than {number})"
    elif number < secret_number:
        clue = f"(greater than {number})"
    else:
        number_guessed = True

print(f"You guessed it! The secret number is {number}")