I'm looking to create code which requires an integer greater than 2 to be input by a user before continuing. I'm using python 3.3. Here's what I have so far:
def is_integer(x):
try:
int(x)
return False
except ValueError:
print('Please enter an integer above 2')
return True
maximum_number_input = input("Maximum Number: ")
while is_integer(maximum_number_input):
maximum_number_input = input("Maximum Number: ")
print('You have successfully entered a valid number')
What I'm not sure about is how best to put in the condition that the integer must be greater than 2. I've only just started learning python but want to get into good habits.
This should do the job:
def valid_user_input(x):
try:
return int(x) > 2
except ValueError:
return False
maximum_number_input = input("Maximum Number: ")
while valid_user_input(maximum_number_input):
maximum_number_input = input("Maximum Number: ")
print("You have successfully entered a valid number")
Or even shorter:
def valid_user_input():
try:
return int(input("Maximum Number: ")) > 2
except ValueError:
return False
while valid_user_input():
print('You have successfully entered a valid number')
def take_user_in():
try:
return int(raw_input("Enter a value greater than 2 -> ")) # Taking user input and converting to string
except ValueError as e: # Catching the exception, that possibly, a inconvertible string could be given
print "Please enter a number as" + str(e) + " as a number"
return None
if __name__ == '__main__': # Somethign akin to having a main function in Python
# Structure like a do-whole loop
# func()
# while()
# func()
var = take_user_in() # Taking user data
while not isinstance(var, int) or var < 2: # Making sure that data is an int and more than 2
var = take_user_in() # Taking user input again for invalid input
print "Thank you" # Success
My take:
from itertools import dropwhile
from numbers import Integral
from functools import partial
from ast import literal_eval
def value_if_type(obj, of_type=(Integral,)):
try:
value = literal_eval(obj)
if isinstance(value, of_type):
return value
except ValueError:
return None
inputs = map(partial(value_if_type), iter(lambda: input('Input int > 2'), object()))
gt2 = next(dropwhile(lambda L: L <= 2, inputs))
def check_value(some_value):
try:
y = int(some_value)
except ValueError:
return False
return y > 2
This verifies that the input is an integer, but does reject values that look like integers (like 3.0
):
def is_valid(x):
return isinstance(x,int) and x > 2
x = 0
while not is_valid(x):
# In Python 2.x, use raw_input() instead of input()
x = input("Please enter an integer greater than 2: ")
try:
x = int(x)
except ValueError:
continue
Hope this helps
import str
def validate(s):
return str.isdigit(s) and int(s) > 2
The problem with using the int()
built-in shown in other answers is that it will convert float and booleans to integers, so it's not really a check that your argument was an integer.
It's tempting to use the built-in isinstance(value, int)
method on its own, but unfortunately, it will return True if passed a boolean. So here's my short and sweet Python 3.7 solution if you want strict type checking:
def is_integer(value):
if isinstance(value, bool):
return False
else:
return isinstance(value, int)
Results:
is_integer(True) --> False
is_integer(False) --> False
is_integer(0.0) --> False
is_integer(0) --> True
is_integer((12)) --> True
is_integer((12,)) --> False
is_integer([0]) --> False
etc...
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.