Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #59588

Re: Bug asking for input number

From Christopher Welborn <cjwelborn@live.com>
Subject Re: Bug asking for input number
Date 2013-11-15 20:47 -0600
References <94e9901a-82e4-43a4-81e1-c2a0f8e96fc8@googlegroups.com>
Newsgroups comp.lang.python
Message-ID <mailman.2699.1384574240.18130.python-list@python.org> (permalink)

Show all headers | View raw


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@live.com>
   http://welbornprod.com

Back to comp.lang.python | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Bug asking for input number Arturo B <a7xrturodev@gmail.com> - 2013-11-15 18:15 -0800
  Re: Bug asking for input number MRAB <python@mrabarnett.plus.com> - 2013-11-16 02:33 +0000
  Re: Bug asking for input number Terry Reedy <tjreedy@udel.edu> - 2013-11-15 21:37 -0500
  Re: Bug asking for input number Arturo B <a7xrturodev@gmail.com> - 2013-11-15 19:03 -0800
  Re: Bug asking for input number Christopher Welborn <cjwelborn@live.com> - 2013-11-15 21:15 -0600
  Re: Bug asking for input number Christopher Welborn <cjwelborn@live.com> - 2013-11-15 20:47 -0600

csiph-web