简体   繁体   中英

Try Except in 'for' loop - Python

I made a 'guess the number'game, but I wanted to add input validation so the user can only guess an integer. Here is my code, I appreciate any suggestions. I am using python 3.

import random
print('Hello, what is your name?')
name = input()
print('It is nice to meet you ' + name + '.')
secretNumber = random.randint(1, 20)
print('Well ' + name + ', I am thinking of a number between 1 and 20')
for guessTaken in range(1, 7):
    print('Take a guess.')
    guess = int(input())
    if guess < secretNumber:
        print('Your guess is too low.')
    elif guess > secretNumber:
        print('Your guess is too high.')
    else:
        break
if guess == secretNumber:
    print('Good job ' + name + '. You guessed my number in %d guesses' %(guessTaken))
else:
    print('Nope. My number was ' + str(secretNumber) + '.')
def input_int(prompt=">",error_msg="That is not an int!"):
    while True:
         try:
             return int(input(prompt))
         except ValueError:
              print(error_msg)

x = input_int("Please Enter an Int:","Wrong Answer!")
print x,x**2

you can abstract this further

def input_type(typeClass=str,prompt="?",error_msg="Wrong Padawan"):
     while True:
          try:
             return typeClass(input(prompt))
          except ValueError:
             print(error_msg)

input_type(int,"Enter an int:","Thats not an int!")
input_type(float,"Enter a float:","Thats not a float!")
input_type(FunkyChickenClass,"Enter a name for your chicken:","Thats wrong!")

or

def  input_int(prompt="Enter Int:",error_msg="Not an int!"):
     return input_type(int,prompt,error_msg)

Here is a better way to do this with input validation

import random
name = raw_input('Hello, what is your name?')
print('It is nice to meet you ' + name + '.')
secretNumber = random.randint(1, 20)
print('Well ' + name + ', I am thinking of a number between 1 and 20')
for guessTaken in range(1, 7):
    guess = 0
    invalid = True
    while invalid:
        try:
            guess = int(raw_input('Take a guess'))
            invalid = False
        except ValueError:
            print 'You must enter an integer'
    if guess < secretNumber:
        print('Your guess is too low.')
    elif guess > secretNumber:
        print('Your guess is too high.')
    else:
        break
if guess == secretNumber:
    print('Good job ' + name + '. You guessed my number in %d guesses' %(guessTaken))
else:
    print('Nope. My number was ' + str(secretNumber) + '.')
for guessTaken in range(1, 7):
    guess = 0
    while guess < 1 or guess > 20:
        print('Take a guess.')
        try:
           guess = int(input())
        except ValueError:
           print("Guess must be a number.")
        else:
           if guess < 1 or guess > 20:
               print("Guess must be between 1 and 20.")
           else:
               print("Your guess is:", guess)
    if guess < secretNumber:
        # continue your code

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM