Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

User input Exit to break while loop

Tags:

I'm doing an assignment for the computer to generate a random number and have the user input their guess. The problem is I'm supposed to give the user an option to input 'Exit' and it will break the While loop. What am I doing wrong? I'm running it and it says there's something wrong with the line guess = int(input("Guess a number from 1 to 9: "))

import random

num = random.randint(1,10)
tries = 1
guess = 0

guess = int(input("Guess a number from 1 to 9: "))

while guess != num:
    if guess == num:
        tries = tries + 1
        break
    elif guess == str('Exit'):
        break
    elif guess > num:
        guess = int(input("Too high! Guess again: "))
        tries = tries + 1
        continue
    else:
        guess = int(input("Too low! Guess again: "))
        tries = tries + 1
        continue

print("Exactly right!")
print("You guessed " + str(tries) + " times.")
like image 990
Sherry Lin Avatar asked Feb 14 '18 22:02

Sherry Lin


2 Answers

The easiest solution is probably to create a function that gets the displayed message as an input and returns the user input after testing that it fulfils your criteria:

def guess_input(input_message):
    flag = False
    #endless loop until we are satisfied with the input
    while True:
        #asking for user input
        guess = input(input_message)
        #testing, if input was x or exit no matter if upper or lower case
        if guess.lower() == "x" or guess.lower() == "exit":
            #return string "x" as a sign that the user wants to quit
            return "x"
        #try to convert the input into a number
        try:
            guess = int(guess)
            #it was a number, but not between 1 and 9
            if guess > 9 or guess < 1:
                #flag showing an illegal input
                flag = True
            else:
                #yes input as expected a number, break out of while loop
                break
        except:
            #input is not an integer number
            flag = True

        #not the input, we would like to see
        if flag:
            #give feedback
            print("Sorry, I didn't get that.")
            #and change the message displayed during the input routine
            input_message = "I can only accept numbers from 1 to 9 (or X for eXit): "
            continue
    #give back the guessed number
    return guess

You can call this from within your main program like

#the first guess
guess = guess_input("Guess a number from 1 to 9: ")

or

#giving feedback from previous input and asking for the next guess
guess = guess_input("Too high! Guess again (or X to eXit): ")
like image 99
Mr. T Avatar answered Dec 11 '22 16:12

Mr. T


You are trying the parse the string 'Exit' to an integer. You can add a try/except around the casting line and handle invalid input.

import random

num = random.randint(1,9)
tries = 1
guess = 0

guess = input("Guess a number from 1 to 9: ")

try:
  guess = int(guess) // try to cast the guess to a int
  while guess != num:
    if guess == num:
        tries = tries + 1
        break
    elif guess > num:
        guess = int(input("Too high! Guess again: "))
        tries = tries + 1
        continue
    else:
        guess = int(input("Too low! Guess again: "))
        tries = tries + 1
        continue

  print("Exactly right!")
  print("You guessed " + str(tries) + " times.")    

except ValueError: 
    if guess == str('Exit'):
      print("Good bye")
    else:  
      print("Invalid input")
like image 36
unicorn2 Avatar answered Dec 11 '22 15:12

unicorn2