2017-01-24 16 views
0

Я написал программу для преобразования целого числа в двоичный код без использования bin(). Однако при выполнении эта функция добавляет начальный ноль.Преобразование целых чисел в двоичные, необходимо удалить начальный нуль

def decimalToBinary(n): 
    def helper(n): 
     if n == 0: 
      return '0' 
     else: 
      if n%2 == 1: 
       binaryDigit = '1' 
      else: 
       binaryDigit = '0' 
      return helper(n//2) + binaryDigit 

    helper(n) 
    print(helper(n)) 

Выход:

>>> decimalToBinary(100) 
01100100 

Как я могу изменить это так, что, когда 100 вводится, выход 1100100, а не 01100100?

+0

вы должны были использовать пустую строку в 'если п == 0: возвращение«» 'и другое 'if', чтобы распознать, когда кто-то выполняет' decimalToBinary (0) ', потому что' 0' - это только значение, которое должно начинаться с нуля. – furas

ответ

-2

Что-то я нашел где-то, давным-давно в галактике далеко:

n = 100 
b = '' 
while n > 0: 
    b = str(n % 2) + b 
    n >>= 1 
print(b) # 1100100 
0

Мое предложение было бы

print(str(helper(n)).lstrip("0")) 

или

print(str(helper(n))[1:]) 

если хелперов (п) уже возвращает строку, в этом случае удалите str() в примерах.

+1

ваше первое предложение сработало для меня, спасибо – stephenjdp

+0

, он дает пустую строку для 'decimalToBinary (0)' :) – furas

0

Используйте функцию дифферента.

Я верю в питона вы найдете что-то похожее на это:

trimStart("0") // example from C# 

Это примитивный метод, но будет работать наверняка :)

+0

, она обрезает результат 'decimalToBinary (0)' на пустую строку. – furas

0

Используйте пустую строку в if n == 0: return "" пропустить этот ноль.

только 0 потребности «ведущие к нулю», так что вы должны использовать дополнительные if признать это значение и вернуть 0

def decimalToBinary(n): 

    def helper(n): 
     if n == 0: 
      return '' # <- empty string 
     else: 
      if n%2 == 1: 
       binaryDigit = '1' 
      else: 
       binaryDigit = '0' 
      return helper(n//2) + binaryDigit 

    if n == 0: 
     result = '0' # <- "leading zero" only for `n == 0` 
    else: 
     result = helper(n) 
    print(result) 

# --- test --- 

for x in range(16): 
    decimalToBinary(x)