useR
useR

Reputation: 3082

Checking non-negative even integer in Python

I'm new to programming and currently learning Python. I would like to write a program that :

  1. request user to input a non-negative even integer.
  2. request the user to input again if not fulfil non-negative even integer.
N = input("Please enter an non-negative even integer: ") #request user to input

And the criteria checking code is:

N == int(N) #it is integer
N % 2 == 0 #it is even number
N >=0 # it is non-negative number

But how should I combine them?

Upvotes: 4

Views: 24183

Answers (5)

ray_linn
ray_linn

Reputation: 1392

code for fun:

  result=[ x for x in [input("Please enter a number:")] if isinstance(x,int) and x>0 and x%2 ==0]

Excuting this list comprehension ,will get you an empty list if occurs any illegal key-in like 0.1, 'abc',999.

code for best practice:

There is quite popular to take all validation expression into lambda for python, for example, like django so :

isPositiveEvenNum=lambda x: x if isinstance(x,int) and x>0 and x%2 ==0 else None

while not isPositiveEvenNum(input("please enter a number:")):
    print "None Positive Even Number!"

this can also be writen as

isPositiveEvenNum=lambda x: (isinstance(x,int) and x>0 and x%2 ==0) or False

while not isPositiveEvenNum(input("please enter a number:")):
    print "None Positive Even Number!"

to solve the input and raw_input difference between 2.x and 3.x:

import sys
eval_input =lambda str: input(str) if sys.version_info<(3,0,0) else eval(input(str))

then just call eval_input

Upvotes: -2

phihag
phihag

Reputation: 287755

You can use the and operator:

while True:
    s = input("Please enter an non-negative even integer: ")
    # Use raw_input instead of input in Python 2
    try:
        N = int(s)
    except ValueError:
        continue  # Not an integer, try again

    if N % 2 == 0 and N >= 0:
        break  # Abort the infinite loop

Upvotes: 2

James Sapam
James Sapam

Reputation: 16930

Just another solution:

>>> def non_neg(n):
...     try:
...         if n & 1 == 0 and n > 0:
...             return 'Even Positive Number'
...     except:
...         pass
...     return 'Wrong Number'
...
>>> for i in [-1,-2,2,3,4,0.5,'a']:
...     print i, non_neg(i)
...
-1 Wrong Number
-2 Wrong Number
2 Even Positive Number
3 Wrong Number
4 Even Positive Number
0.5 Wrong Number
a Wrong Number
>>>

Upvotes: 0

Maxime Lorant
Maxime Lorant

Reputation: 36141

Compared to other versions presented here, I prefer to loop without using the break keyboard. You can loop until the number entered is positive AND even, with an initial value set to -1:

n = -1
while n < 0 or n % 2 != 0:
    try:
        n = int(input("Please enter an non-negative even integer: ")) 
    except ValueError:
        print("Please enter a integer value")


print("Ok, %s is even" % n)

Upvotes: 1

zhangxaochen
zhangxaochen

Reputation: 34007

  1. since the question is tagged python-2.7, use raw_input instead of input (which is used in python-3.x).
  2. Use str.isdigit to check if a string is an positive integer, int(N) would raise ValueError if the input couldn't be converted into integer.

  3. Use a while loop to request user input if condition not fulfilled, break when you get a valid input.

e.g.,

while True:
    N = raw_input("Please enter an non-negative even integer: ") #request user to input
    if N.isdigit(): # accepts a string of positive integer, filter out floats, negative ints
        N = int(N)
        if N % 2 == 0: #no need to test N>=0 here
            break
print 'Your input is: ', N

Upvotes: 5

Related Questions