Перебрать 4-битное число. Python
Допустим, есть переменная bits с числом и answer.
bits = 4
answer = 1111
Нужно перебрать значения (0000, 0001...1111) а потом сравнивать с answer, а если переменная равна answer, вывести ее на экран. Еще одна задача - чтобы если переменная bits менялась (допустим она становилось цифрой 8), перебираемые значения тоже должны изменяться (00000000, 00000001...11111111)
Я пытался это сделать так:
bits = 4
answer = "1111"
x = bits*bits
y = []
for n in range(len(answer)):
y.insert(n, 0)
for i in range(x):
ans = ""
for j in range(len(answer)):
if y[j] == 0:
ans += "0"
y[j] = n
else:
ans += "1"
print(ans)
Но при этом, выдавало 0000, а на следующий раз 1111
Ответы (3 шт):
можно использовать модуль itertools
import itertools
for i in itertools.product("01", repeat = 4):
print("".join(i))
если не использовать строки (с ними все быстрее) и библиотеки, то:
value = 0
while value != 11111111111111:
tmp = value + 1
value = 0
overflow = 0
index = 0
finish = False
while finish is False:
if tmp == 0:
finish = True
digit = tmp % 10 + overflow
tmp //= 10
overflow = digit > 1
digit %= 2
value += digit * 10**index
index += 1
print(value)
answer = '1111'
for i in range(0b1111 + 1):
if f'{i:04b}' == answer:
print(answer)
Еще одна задача - чтобы если переменная bits менялась (допустим она становилось цифрой 8), перебираемые значения тоже должны изменяться (00000000, 00000001...11111111)
bits = 8
for i in range(2**bits):
print(f'{i:0{bits}b}')
В строке форматирования f'{i:04b}':
b- переводить в двоичный (binary) вид04- дополнять до 4 символов нулями слева (если оставить просто 4 без нуля, то будет дополняться пробелами)
В варианте с задаваемым переменной количеством бит вместо 4 из первого примера просто подставляется количество символов.
Вообще, лучше обойтись без строкового представления, перебирать и сравнивать целые числа, а в виде набора бит выводить только результат:
answer = 0b1111
for i in range(0b1111 + 1):
if i == answer:
print(f'{i:04b}')