【问题标题】:What's wrong with my Python program that is supposed to convert from binary to decimal?我的 Python 程序应该从二进制转换为十进制有什么问题?
【发布时间】:2015-03-15 01:00:50
【问题描述】:

我们应该编写一个从二进制字符串转换的“简单”程序。当给定一个空字符串时,它也应该返回 0。我提前对我缺乏知识表示歉意。我对此完全陌生。

这是我的尝试:

def b(binaryString):
   if binaryString[0] !=0 or binaryString[1] !=1:
       return 0
   else:
       x = int(binaryString[1])
       a = (len(binaryString)) - 1
       return x * 2**a + b(binaryString[1:])

示例输入:b('1101')

预期输出:13

实际输出:IndexError: string index out of range

【问题讨论】:

  • 如果您向我们提供一些示例输入、实际输出和预期输出,您更有可能获得有用的帮助。
  • edit您的问题,而不是在cmets中回复。
  • 如果给定一个空字符串,它也应该返回 0。 呃,多么丑陋的要求。
  • 你也需要它是递归的吗?或者你正在试验的东西是什么?
  • 是的,它需要递归。对不起,应该提到这一点。我们还要假设我们不会收到错误的数据作为输入。

标签: python binary decimal


【解决方案1】:

可能不是最优雅的解决方案......但是,这是我的两分钱

def b(binaryString):
 if len(binaryString):
    try:
        return sum([int(num)*2**(idx) for idx,num in enumerate(reversed(binaryString))])
    except ValueError:
        return "Your input might be incorrect"
 else:
    return "0"



print(b("111")) #returns 7
print(b(""))    #returns 0
print (b("11111101111")) #returns 2031

【讨论】:

  • 不幸的是,我正处于 101 课程的前几周,所以你的解决方案太“难”了。到目前为止,我们主要使用递归函数、find、rfind、len 和索引,所以我希望能够以某种方式解决这些问题。
  • 虽然这个答案可能是正确且有用的,但最好在其中附上一些解释来解释它如何帮助解决问题。如果有更改(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。
  • @Kevin Brown,从我头像旁边的数字可以看出,我是 stackoverflow 的新手。感谢您的提示,我会记住这些。干杯:)!
【解决方案2】:
def b(binaryString):
    if len(binaryString) == 0: return 0
    rest, lsb = binaryString[:-1], binaryString[-1]
    lsb = 1 if lsb == '1' else 0      # Alternatively, lsb = int(lsb)
    return (b(rest) << 1) + lsb       # Alternatively, return b(rest) * 2 + lsb

地点:

print b('1101')      # 13
print b('')          # 0
print b('11111111')  # 255
print b('10')        # 2
print b('01')        # 1

代码将输入字符串拆分为两个变量restlsb

rest 包含输入字符串,直到但不包括最后一位。

lsb 包含最低有效位(字符串中的最后一位)。在下一行中它被转换为int

函数的返回值为b(rest)上移1位(= *2)加上lsb的整数值。

值得注意的是,您可以通过以下简单的方式“作弊”:

def b(binaryString):
    return int('0' + binaryString, base=2)

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2022-01-01
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多