Почему в массив записывается не число, а знаки?
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)