Почему в массив записывается не число, а знаки?

n = int(input())
 
b = ''
 
while n > 0:  # переход в двоичную систему счисления
    b = str(n % 2) + b
    n = n // 2
 
print(b)  # проверка на четность N
if n % 2 == 0:
    print('Четное число')
    a=(list("1" + str(b))) # плюс 1 если четное
    print(a)
else:
    print('Нечентное число')
    a=(list(str(b) + "0")) # плюс 0 еслр не четное
    print(a)
nones = a.count("1")
print(nones)
if nones % 2 == 0:
    print('Четное число')
    nones=(list("1" + str(a))) # плюс 1 если четное
    print(nones)
else:
    print('Нечентное число')
    nones=(list(str(a) + "0")) # плюс 0 еслр не четное
    print(nones)

К конце кода в массив передаются не числа, а знаки. Как исправить, и можно ли не использоваться int?

['[', "'", '1', "'", ',', ' ', "'", '1', "'", ',', ' ', "'", '1', "'", ',', ' ', "'", '0', "'", ',', ' ', "'", '0', "'", ']', '0' - Вывод в консоле


Ответы (2 шт):

Автор решения: Сергей

Теперь вывод только 0 и 1. Но переделка очень грубая.

n = int(input())

b = ''

while n > 0:  # переход в двоичную систему счисления
    b = str(n % 2) + b
    n = n // 2

print(b)  # проверка на четность N
if n % 2 == 0:
    print('Четное число')
    a=(list("1" + str(b))) # плюс 1 если четное
    print(a)
else:
    print('Нечентное число')
    a=(list(str(b) + "0")) # плюс 0 еслр не четное
    print(a)
nones = a.count("1")
print(nones)
# Ввели дополнительную строковую переменную и перевели в неё список
a_str=''
for i in a:
    a_str += str (i)
if nones % 2 == 0:
    print('Четное число')
    # Упростили переменную для вывода
    nones="1" + a_str # плюс 1 если четное
    print(nones)
else:
    print('Нечентное число')
    # Упростили переменную для вывода
    nones=a_str + "0" # плюс 0 еслр не четное
    print(nones)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Всё было хорошо, пока вы не стали применять str к массиву.

@>>> str(['0', '1'])
"['0', '1']"

В получившейся строке мусора (восемь символов) больше чем данных (два символа).

Не надо работать с массивами. Строки решают вашу задачу. В конец нужно добавить код, который из строки с двоичным представлением числа строит само число:

n = int(input())
 
b = ''
while n > 0:  # переход в двоичную систему счисления
    b = str(n % 2) + b
    n = n // 2
 
print(b)  # проверка на четность N
if b[-1] == '0':
    print('Четное число')
    b = '1' + b
    print(b)
else:
    print('Нечетное число')
    b = b + '0'
    print(b)

nones = b.count("1")
print(nones)

if nones % 2 == 0:
    print('Четное число')
    b = b + '1'
    print(b)
else:
    print('Нечетное число')
    b = b + '0'
    print(b)

m = 0
for d in b:
    m = 2 * m
    if d == '1':
        m = m + 1

print(m)

Если у вас модный Питон 3.10, то задачу можно решить без строк:

n = int(input())
 
print(bin(n))
if n % 2 == 0:
    print('Четное число')
    n += 1 << n.bit_length()
    print(bin(n))
else:
    print('Нечетное число')
    n <<= 1
    print(bin(n))

if n.bit_count() % 2 == 0:
    print('Четное число')
    n = n << 1 + 1
    print(bin(n))
else:
    print('Нечетное число')
    n <<= 1
    print(bin(n))

print(n)
→ Ссылка