【问题标题】:Remove trailing zeros from binary result in python从python中的二进制结果中删除尾随零
【发布时间】:2021-09-23 18:58:06
【问题描述】:

我们有一个程序可以将小数转换为二进制。
目标是运行程序,输入一个值,输出二进制值。

我的代码的问题是它在输出二进制文件时有尾随零。
我需要在不使用诸如“数学”之类的外部库的情况下实现这一点,所以请坚持使用内置函数。

当前输出:

插入一个值: 5 该数字适合 1 个字节并且是二进制的: 00000101 插入一个值: 100 该数字适合 1 个字节并且是二进制的: 01100100 插入一个值: 280 该数字适合 16 位并且是二进制的: 0000000100011000

预期输出:

插入一个值: 5 该数字适合 1 个字节并且是二进制的: 101 插入一个值: 100 该数字适合 1 个字节并且是二进制的: 1100100 插入一个值: 280 该数字适合 16 位并且是二进制的: 100011000

当前代码:

def dec2bin(value, number_bits):
    result = ''
    while number_bits > 0:
        bit_value = 2 ** (number_bits - 1)
        if value >= bit_value:
            result = result + '1'
            value = value - bit_value
        else:
            result = result + '0'
        number_bits = number_bits - 1
    print(result)

input_ok = False
userinput = 0
while not input_ok:
    print('Insert a value:')
    userinput = int(input())
    if userinput > 65535:
        print('invalid, cant handle that big numbers, try again')
    else:
        input_ok = True
    if userinput < 256:
        print('The number fits in 1 byte and is in binary:')
        dec2bin(userinput, 8)
    else:
        print('The number fits in 16 bits and is in binary:')
        dec2bin(userinput, 16)

【问题讨论】:

标签: python


【解决方案1】:

由于您将值存储为可以使用的字符串

result.lstrip('0')

从答案中删除前导零。

【讨论】:

【解决方案2】:

使用字符串格式化函数很容易(参见 Pranav 的评论)。但也许在这种情况下,您希望算法处理它,并认为将其视为字符串是作弊。

def dec2bin(value, number_bits):
    result = ''
    starting = True
    while number_bits > 0:
        bit_value = 2 ** (number_bits - 1)
        if value >= bit_value:
            result = result + '1'
            value = value - bit_value
            starting = False
        elif not starting:
            result = result + '0'
        number_bits = number_bits - 1
    print(result)

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2012-06-28
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多