low = 1
high = 1000
print("Please think of a number between {} and {}".format(low, high))
input("Press ENTER to start")
guesses = 1
while True:
guess = low + (high - low) // 2
high_low = input("My guess is {}. Should I guess higher or lower?"
" Enter h or l or c if my guess was correct: ".format(guess)).casefold()
if high_low == "h":
# Guess higher. The low end of the range becomes 1 greater than the guess.
low = guess + 1
elif high_low == "l":
# Guess hihger. The high end of the range becomes one less than the guess.
high = guess - 1
elif high_low == "c":
print("I got it in {} guesses!".format(guesses))
break
else:
print("Please enter h, l or c")
guesses += 1
<위와는 조금 다른 버전>
guesses = 1
while low != high:
guess = low + (high - low) // 2
high_low = input("My guess is {}. Should I guess higher or lower?"
" Enter h or l or c if my guess was correct: ".format(guess)).casefold()
if high_low == "h":
# Guess higher. The low end of the range becomes 1 greater than the guess.
low = guess + 1
elif high_low == "l":
# Guess hihger. The high end of the range becomes one less than the guess.
high = guess - 1
elif high_low == "c":
print("I got it in {} guesses!".format(guesses))
break
else:
print("Please enter h, l or c")
guesses += 1
else:
print("You thought of the number {}".format(low))
print("I got it in {} guesses".format(guesses))
첫 번째 버전과 두 번째 버전의 차이점은, 고점과 저점이 서로 같아질 때 (10번 이하의 추측 이후 최종 도달할 정답지점) 전자의 경우에는 바보같이 계속 사용자에게 재질문을 끊임없이 하고, 후자는 알아서 깔끔하게 정답을 맞춤. 사실 컴퓨터는 굉장히 똑똑해보이는 두뇌회전이 빠른 바보라서, 일거수 일투족을 다 알려주어야만함. => While 구문 시작시 while low != high와 동일 indentation 선상에서의 else 문을 통해서 loop에서 break되어 빠져나올 수 있게 설정함.
마지막 else문은 위에 while loop 중간에서 break가 적용안되고 끝까지 다 수행했음을 의미함. (영문 표기 그대로의 otherwise의 의미를 지니는 'else'보다 문제없이 위 루프를 온전히, 완전히 수행했다는 의미로 'nobreak' 아니면 'completed'가 더 맞는 표현일 수도 있음)