Reputation: 865
Design a logical expression equivalent to the following statement:
x
is a list of three or five elements, the second element of which is the string'Hip'
and the first of which is not a number or Boolean.
What I have:
x = ['Head', 'Hip', 10]
print x[1] is 'Hip'
My question: How do you check for whether or not it is a Boolean or a number?
Upvotes: 76
Views: 183835
Reputation: 915
Python 3:
Use assert
to check is some statement is True or False. If False, it will raise an AssertionError
.
assert(isinstance(x[0], (int, float)))
You can then catch the error like that:
except AssertionError as error:
print(error)
# do stuff...
Upvotes: 0
Reputation: 402
I like to keep it simple to read.. This will accept bool, string, number and read it to a bool
def var2bool(v):
if type(v) == type(True):
res = v
elif type(v) == type(0):
if v == 0:
res = False
else:
res = True
elif v.lower() in ("yes", "true", "t", "1"):
res = True
else:
res = False
return res
Upvotes: -1
Reputation: 345
Python 2
import types
x = False
print(type(x) == types.BooleanType) # True
Python 3
# No need to import types module
x = False
print(type(x) == bool) # True
Upvotes: 20
Reputation: 1203
I follow the recent answer who tell to use type
and it seems to be the incorrect way according to pylint
validation:
I got the message:
C0123: Using type() instead of isinstance() for a typecheck. (unidiomatic-typecheck)
Even if it's an old answer, the correct one is the accepted answer of @Lev Levitsky:
isinstance(x[0], (int, float))
Upvotes: 1
Reputation: 69
You should compare the type of x
to the bool
class:
type(x) == bool
or:
type(x) == type(True)
Here is more on the type method
From Data model docs:
Booleans (bool)
These represent the truth values False and True. The two objects representing the values False and True are the only Boolean objects. The Boolean type is a subtype of the integer type, and Boolean values behave like the values 0 and 1, respectively, in almost all contexts, the exception being that when converted to a string, the strings "False" or "True" are returned, respectively.
Upvotes: 6
Reputation: 65791
To answer the specific question:
isinstance(x[0], (int, float))
This checks if x[0]
is an instance of any of the types in the tuple (int, float)
.
You can add bool
in there, too, but it's not necessary, because bool
is itself a subclass of int
.
Doc reference:
To comment on your current code, you shouldn't rely on interning of short strings. You are supposed to compare strings with the ==
operator:
x[1] == 'Hip'
Upvotes: 95