Compruebe si el objeto es un número o booleano

Diseñe una expresión lógica equivalente a la siguiente statement:

x es una lista de tres o cinco elementos, cuyo segundo elemento es la cadena 'Hip' y el primero de los cuales no es un número o Booleano.

Lo que tengo:

 x = ['Head', 'Hip', 10] print x[1] is 'Hip' 

Mi pregunta: ¿Cómo verifica si es o no un valor booleano o un número?

Para responder a la pregunta específica:

 isinstance(x[0], (int, float)) 

Esto comprueba si x[0] es una instancia de cualquiera de los tipos en la tupla (int, float) .

También puede agregar bool allí, pero no es necesario, porque bool es en sí mismo una subclase de int .

Referencia del documento:

  • isinstance()
  • tipos numéricos incorporados

Para comentar sobre su código actual, no debe confiar en el internado de cadenas cortas . Se supone que debes comparar cadenas con el operador == :

 x[1] == 'Hip' 

Más fácil diría:

 type(x) == type(True) 

En Python3 esto sería: type(x)==bool ver ejemplo .

 import types type(x) == types.BooleanType 

Debes comparar el tipo de x con la clase bool :

 type(x) == bool 

o:

 type(x) == type(True) 

Aquí hay más sobre el método de tipo

De los documentos del modelo de datos :

Booleanos

Estos representan los valores de verdad Falso y Verdadero. Los dos objetos que representan los valores False y True son los únicos objetos booleanos. El tipo booleano es un subtipo del tipo entero, y los valores booleanos se comportan como los valores 0 y 1, respectivamente, en casi todos los contextos, con la excepción de que cuando se convierten a una cadena, se devuelven las cadenas “Falso” o “Verdadero” , respectivamente.