Как я могу сделать оператор if/else, где if проверяет, является ли переменная 8-разрядная переменная двоичной? Я знаю, как сделать 8-значную часть (len()), но я не могу решить, как ограничить ее 1s и 0s.Python: проверка переменной в двоичном формате
ответ
Является ли переменная кодируемой как строка или массив целых чисел? Вы можете просто просмотреть список, чтобы проверить каждый элемент, другие решения также возможны.
isBinary=[x==1 or x==2 for x in variable]
isBinary=False in isBinary
Вы могли бы попытаться разобрать их int
при прохождении десятичную как это:
>>> x = int("10010", 2)
>>> print x
18
Для подтверждения строка содержит ровно восемь единиц и нулей, проверить его для регулярного выражения
^[01]{8}$
Пример использования:
import re
isBin = re.compile('^[01]{8}$')
s1 = "00110101"
if(s1.match(isBin)):
print "it is a match"
else:
print "it is not a match"
Вы можете использовать generator expression и all
*:
if len(var) == 8 and all(x in "01" for x in var):
...
Ниже демонстрация:
>>> var = "01010101"
>>> len(var) == 8 and all(x in "01" for x in var)
True
>>> var = "0101010"
>>> len(var) == 8 and all(x in "01" for x in var)
False
>>> var = "01010102"
>>> len(var) == 8 and all(x in "01" for x in var)
False
>>>
* Примечание: Приведенный выше код предполагает, что var
является строкой.
Вы можете использовать all()
function для проверки каждого символа:
len(var) == 8 and all(c in '01' for c in var)
или использовать set:
binary_digits = set('01')
len(var) == 8 and binary_digits.issuperset(var)
или использовать regular expression:
import re
binary_digits = re.compile('^[01]{8}$')
binary_digits.match(, var) is not None
из этих трех вариантов, параметр регулярного выражения является самым быстрым, за которым следует набор:
>>> import re
>>> import timeit
>>> def use_all(v): return len(v) == 8 and all(c in '01' for c in v)
...
>>> def use_set(v, b=set('01')): return len(v) == 8 and b.issuperset(v)
...
>>> def use_re(v, b=re.compile('^[01]{8}$')): return b.match(v) is not None
...
>>> binary, nonbinary = '01010101', '01010108'
>>> timeit.timeit('f(binary); f(nonbinary)', 'from __main__ import binary, nonbinary, use_all as f')
4.871071815490723
>>> timeit.timeit('f(binary); f(nonbinary)', 'from __main__ import binary, nonbinary, use_set as f')
2.558954954147339
>>> timeit.timeit('f(binary); f(nonbinary)', 'from __main__ import binary, nonbinary, use_re as f')
2.036846160888672
Я предполагаю, что вы также захотите преобразовать строку в целое число в какой-то момент. Если это не так, пожалуйста, исправьте меня.
В Python обычно считается, что лучше попытаться что-то сделать, и обработать сбой, если это произойдет; а не проверять, возможно ли что-то, и только потом делать это. Это называется принципом EAFP (проще просить прощения, чем разрешения).
В этом случае, вы должны использовать try
except
:
s = '01100011'
if len(s) == 8:
try:
n = int(s, 2)
except ValueError:
handle_exception_here()
- 1. Прыжки в двоичном формате
- 2. Программирование в двоичном формате
- 3. Юникод в двоичном формате?
- 4. Подсчет в двоичном формате
- 5. Представление Float в двоичном формате
- 6. Представление NULL в двоичном формате
- 7. Сохранить массив в двоичном формате
- 8. Установить разрешения в двоичном формате
- 9. Порядок функций в двоичном формате
- 10. Удалить 0b в двоичном формате
- 11. Показать файл в двоичном формате
- 12. Обратный номер в двоичном формате
- 13. Изменение OBJC_IVAR_ $ в двоичном формате
- 14. печать двойная в двоичном формате
- 15. Строка, закодированная в Python, все еще находится в двоичном формате
- 16. Работа с файлами в двоичном формате
- 17. Проверка переменной Python
- 18. Разбор больших файлов НЕ в двоичном формате (Python или C++)
- 19. Размер массива Python удваивается после сохранения в двоичном формате
- 20. Python найти максимальное количество комбинаций в двоичном формате
- 21. NSString для печати в двоичном формате в
- 22. Сохранение строки в двоичном формате в MySQL
- 23. Можно ли программировать в двоичном формате?
- 24. Почему 23 равно 10111 в двоичном формате?
- 25. Ошибка GCC: недопустимые операнды в двоичном формате +
- 26. Получить битмап из Redis в двоичном формате
- 27. Выполнять компьютерные инструкции непосредственно в двоичном формате
- 28. Как регистрируются регистры ARM в двоичном формате
- 29. C#, не может сериализоваться в двоичном формате
- 30. сохранение текстового файла в двоичном формате
вы имеете в виду _string_ переменная содержит только нули и единицы, не так ли? Потому что «внутреннее представление» как единицы и нули задано ... – Floris