[Tutor] Help with Python

Steven D'Aprano steve at pearwood.info
Sat May 17 05:55:10 CEST 2014


Hi Glen, and welcome! My responses below.

On Thu, May 15, 2014 at 09:58:07PM -0400, Glen Chan wrote:

> Hello, I am student trying to fugure out why when I enter any number 
> it says error. It's only suppose to do that if it's out the 1-10 
> range. Please help. Thank you.

You've made an mistake in your logic below. You print an error for 
*every* number:

> number = input('Enter a number between 1 and 10: ')
> while number < 1 or number > 10:
>       print 'Please enter a number between 1 and 10'
>       number = input('Enter a number between 1 and 10: ')

This part is okay. You check that if number is out of range, and if it 
is, it prints a message. Check for yourself:

    "Suppose I choose 5. Is 5 less than 1? No. Is it larger than 
    10? No. So the while loop immediately ends, and I move on."


So at this stage, you have now successfully asked the user for a number 
between 1 and 10. But here you make the mistake:

> number = input('Enter a number between 1 and 10: ')      

Hmmm. You've already asked the user for a number. But then you ignore 
it, and ask for another one. But even that's not really the mistake:

> while number > 1 or number < 10:
>       print 'Error'
>       number = input('Enter a number between 1 and 10: ')      

And this is where you get the logic backwards. This while loop runs 
forever, or until you manually cancel it. Check for yourself:

    "Suppose I choose 5. Is 5 larger than 1? Yes. So the while 
    loop continues, and 'Error' is printed. Suppose I choose 0.
    Is 0 larger than 1? No. Is 0 less than 10? Yes. So again, 
    the while loop continues, and 'Error' is printed.

    Are there *any* numbers *smaller* than 1 AND *larger* than
    10 at the same time? No, of course not. So the while loop 
    condition is always true, and the while loop will always 
    run no matter what number I choose."

This second while loop has the logic backwards. You should compare this 
one, the faulty one, with the first one, the correct one. Can you see 
the difference?

A couple of other comments about your code:

* In a few places, you use "input", but in other places, you 
  use "raw_input". You should never use "input". It was a 
  mistake, and has been removed from newer versions of Python.

  Instead, you should write int(raw_input("Enter a number...")).

* You check that number is in range like this:

    number < 1 or number > 10

  There's an easier way:

    1 <= number <= 10

  which is not only less typing, but makes it more obvious what
  you are trying to do. You want number to be in the range 1 
  through 10 inclusive. That makes it harder to screw up the
  logic:

    1 >= number >= 10  # Wrong!

  "What do you mean, 1 is BIGGER than number, which is bigger
  than 10? That's impossible!"




-- 
Steven


More information about the Tutor mailing list