@whoareyoutofuckinglecture
Python developer

Python3. Почему не работает код?

Всем привет!
Есть функция:
def binary_symmetry(sieve):
    a = []
    for num in sieve:
        x = format(num, 'b')  # переводим num в двоичную систему
        if len(x) % 2 == 0:  # если длина двоичного числа - чётное число
            half = (len(x) // 2)  # то half равняется половине длины этого числа
            one = ('1' * half)
            zeroes = ('0' * half)
            if len(x) == 2 and (x[0] == '1' and x[1] == '0'):  #  ВОТ ЭТО УСЛОВИЕ РАБОТАЕТ
                a.append('{}:{}'.format(num, x))
            elif x[0:half] == one and x[half:] == zeroes:  #  А ЭТО НЕ РАБОТАЕТ :( 
                a.append('{}:{}'.format(num, x))
    return a


sieve является списком, который содержит в себе простые числа.
Данной функцией я пытаюсь решить учебную задачу по нахождению простых чисел, у которых в двоичном виде первая половина будет являться единицами, а вторая половина нулями.

Почему-то не работает условие elif x[0:half] == one and x[half:] == zeroes:
В чём моя ошибка?
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
@AWEme
Retard Soft Inc.
>>> int('10', 2)
2
>>> int('1100', 2)
12
>>> int('111000', 2)
56
>>> int('11110000', 2)
240
>>> int('1111100000', 2)
992


Судя по условиям в вашем коде, в результирующий список попадут числа, приведённые мной выше и им подобные, и простых (кроме двойки) среди них нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
for d in [x[0:half],one,x[half:],zeroes]
    print(d, type(d))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы