2013-02-22 2 views
23

Design логическое выражение эквивалентно следующему утверждению:Проверьте объект номер или булево

x представляет собой список из трех или пяти элементов, второй элемент которого строка 'Hip' и первый из которых не является числом или булевым.

Что у меня есть:

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

Мой вопрос: Как вы проверяете для того, является ли это логическое или номер?

ответ

30

Для ответа на конкретный вопрос:

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

Это проверяет, если x[0] является экземпляром любого из типов в кортеже (int, float).

Здесь вы можете добавить bool, но это необязательно, потому что bool сам по себе является подклассом int.

Doc ссылка:


Чтобы прокомментировать ваш текущий код, вы не должны полагаться на interning of short strings. Вы должны сравнивать строки с оператором ==:

x[1] == 'Hip' 
5
import types 
type(x) == types.BooleanType 
+0

'types.BooleanType' был удален из Python 3. Вместо этого используется' bool'. Источник: http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#types – KSR

16

Самый простой я бы сказал:

type(x) == type(True) 
+0

Немного взломанный, но нет импорта, поэтому +1 –

+9

Возможно, непосредственно 'type (x) is bool'? – lerner

3

В Python3 это было бы: type(x)==bool см example.

+0

Шахта работает в обоих. Логика в основном зависит от языка. – CurlyMo