Python теплое / холодное объявление переменной вне цикла while

#python #while-loop

#python #цикл while

Вопрос:

Я пишу простую игру в угадывание чисел теплее / холоднее на Python.

У меня это работает, но у меня есть дублированный код, который вызывает несколько проблем, и я не уверен, как это исправить.

 from __future__ import print_function
import random

secretAnswer = random.randint(1, 10)

gameOver = False
attempts = 0
currentGuess = int(input("Please enter a guess between 1 and 10: "))
 originalGuess = currentGuess

while gameOver == False and attempts <= 6:
    currentGuess = int(input("Please enter a guess between 1 and 10: "))
    attempts  = 1

originalDistance = abs(originalGuess - secretAnswer)
currentDistance = abs(currentGuess - secretAnswer)

if currentDistance < originalDistance and currentGuess != secretAnswer:
    print("Getting warmer")

elif currentDistance > originalDistance:
    print("Getting colder")

if currentDistance == originalDistance:
    print("You were wrong, try again")

if currentGuess == secretAnswer or originalGuess == secretAnswer:
    print("Congratulations! You are a winner!")
    gameOver = True

if attempts >= 6 and currentGuess != secretAnswer:
    print("You lose, you have ran out of attempts.")
    gameOver = True

print("Secret Answer: ", secretAnswer)
print("Original Dist: ", originalDistance)
print("Current Dist: ", currentDistance)
  

Он запрашивает ввод перед тем, как я войду в цикл, что позволит мне установить исходную переменную guess, помогающую мне определить расстояние от моего секретного ответа.

Однако, поскольку для этого требуется ввод перед циклом, он аннулирует любую имеющуюся у меня проверку / логику, такую как операторы if, а затем требует ввода непосредственно после этого предположения, теперь внутри цикла.

Есть ли у меня способ объявить originalGuess внутри цикла без его обновления до пользовательского ввода на каждой итерации или наоборот без дублирования currentGuess?

Спасибо

Ответ №1:

Кажется, нет необходимости спрашивать пользователя перед входом в цикл… Вы можете просто проверить, если guesses = 1 для первого предположения…

 gameOver=False
guesses = 0
while not gameOver:
    guesses  = 1
    getUserInput
    if guesses = 1 and userInput != correctAnswer:
      print "try again!"  
    checkUserInput
print "good job!, it took you {} guesses!".format(guesses)
  

Комментарии:

1. Однако, если я это сделаю, как я смогу отличить originalDistance и currentDistance, поскольку они полагаются на сохранение originalGuess? Который, если я объявлю внутри цикла, будет обновляться с каждой итерацией пользовательского ввода