Как поменять местами 0 и 1 в строке
Решил написать свою функцию для перевода числа из десятичной системы счисления в двоичную. На положительных числах все норм, но чтобы разобраться с отрицательными нужно после деления поменять местами нули и единицы в полученной строке, но я не знаю как (пробовал метод replace, но он заменяет только что то одно, то есть либо нули на единицы либо наоборот)
Вот код:
def decimal_to_binary(number):
final = ''
number_positive = abs(number)
while number_positive not in (0, -1):
final += str(number_positive % 2)
number_positive //= 2
return (final.replace('0', '1'))[::-1] + '1' if number < 0 else final[::-1]
Ответы (2 шт):
Можно проще сделать:
print(bin(42))
Своя функция:
def decimal_to_binary(number):
return bin(number)
print(decimal_to_binary(42))
final.translate({ord("0"): "1",
ord("1"): "0"})
or
final.translate(str.maketrans("01", "10"))
Объяснение:
В первом случае мы прямо задаваем переводную таблицу-словарь, ключами которого должны быть порядковые номера символов (в системе Юникод), которые мы хотим заменить.
Во втором случае мы переводную таблицу создаем методом .maketrans() с двумя параметрами-строками одинаковой длины, что значит графически вот что:
"01"
↓↓
"10"
т.е. все нули заменить на единицы и все единицы заменить на нули.