Преобразование двоичного числа в десятичное с использованием строки - PullRequest
0 голосов
/ 15 января 2020

Я попытался написать простую функцию, которая вводит двоичное число в строковом формате и преобразует двоичное в десятичное. Но в выходных данных я всегда получаю неправильную информацию: значение res в строке 3, независимо от того, какой ввод (1010, 10010111010 и т. Д. c.). Кроме того, я попытался отладить код, и функция даже не запускает l oop, как будто его там не было ... Итак, я просто не вижу своей ошибки

def bin_to_dec(bin):

    bin = bin[::-1]
    res = 0

    for i in range(len(bin)):
        if bin[i] == 0:
            res += 2**i

    return res

Ответы [ 3 ]

2 голосов
/ 15 января 2020

Вы сравниваете строку "0" с числом 0, и они, как правило, неравны.

Таким образом, вопреки тому, что вы говорите, l oop на самом деле циклично; но оператор if никогда не будет истинным.

Конечно, вы также должны, вероятно, добавлять, когда число равно 1, а не когда оно равно 0.

def bin_to_dec(bin):
    bin = bin[::-1]
    res = 0
    for i in range(len(bin)):
        if int(bin[i]) == 1:
            res += 2**i
    return res

Обратите внимание на добавление int().

1 голос
/ 15 января 2020
if bin[i] == '1'

Это исправит проблему. bin[i] - это символ, и вы сравниваете его с числом, которое всегда приводит к значению false.

0 голосов
/ 15 января 2020

Вы можете просто использовать встроенную функцию int:

def binaryToDecimal(n): 
    return int(n,2) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...