Bug asking for input number

Christopher Welborn cjwelborn at live.com
Sat Nov 16 03:47:12 CET 2013

On 11/15/2013 08:15 PM, Arturo B wrote:> Hi! I hope you can help me.
 > I'm writting a simple piece of code.
 > I need to keep asking for a number until it has all this specifications:
 > - It is a number
 > - It's lenght is 3
 > - The hundred's digit differs from the one's digit by at least two
 > My problem is that I enter a valid number like: 123, 321, 159, 346... 
and it keeps asking for a valid number.
 > Here's mi code:
 > res = input('Give me a number --> ')
 > hundreds = int(res[0])
 > ones = int(res[2])
 > # checks if the user enters a valid number
 > while not res.isdigit() or not len(res) == 3 or abs(hundreds - ones) 
<= 2:
 >      res = input('Enter a valid number --> ')
 > Thanks for help!

You only set 'hundreds' and 'ones' the first time, when the loop goes 
around those values never change. Also, I don't see any .isdigit() 
before you call int(), which may make it error (maybe you just didn't 
post the full code?). Also, I think your <= is flipped the wrong way.
The difference should be greater than or equal to 2 right?
Try something like this:

def is_valid_input(s):
     """ Returns True if a number is a digit,
         is 3 digits long,
         and hundreds - ones is >= 2
     if not (s.isdigit() and (len(s) == 3)):
         return False
     hundreds = int(s[0])
     ones = int(s[2])
     return abs(hundreds - ones) >= 2

prompt = 'Give me a number --> '

res = input(prompt)
while not is_valid_input(res):
     print('\nInvalid number!: {}\n'.format(res))
     res = input(prompt)

...Of course you don't have to make it a function, I just did that 
because it was going to be used more than once. If you need to actually 
work with 'hundreds' and 'ones', you can rewrite it to suit your needs.


- Christopher Welborn <cjwelborn at live.com>

More information about the Python-list mailing list