我试图编写一个函数bin_to_dec(s)
,它接收一个二进制数的字符串并将其转换为相应的十进制数/整数。Python中的封闭函数
我知道有可能建立在这种转换方式,但我试图通过递归来实现它。这是我迄今编程的内容
我不断收到内存错误。我如何编辑我的最后陈述来完成这项工作?
我试图编写一个函数bin_to_dec(s)
,它接收一个二进制数的字符串并将其转换为相应的十进制数/整数。Python中的封闭函数
我知道有可能建立在这种转换方式,但我试图通过递归来实现它。这是我迄今编程的内容
我不断收到内存错误。我如何编辑我的最后陈述来完成这项工作?
我会避免递归,它不是你想要做的事情所必需的。我的东西去像
def binToDec(s):
total = 0
for index, value in enumerate(s[::-1]):
total += int(value) * 2**index
return total
>>> binToDec('1100')
12
同样的想法,用列表比较:
def binToDec(s):
return sum(int(value) * 2**index for index,value in enumerate(s[::-1]))
如果你真的想递归地做到这一点
def binToDec(s):
if len(s) == 1:
return int(s)
else:
return binToDec(s[-1]) + 2*binToDec(s[:-1])
无论如何,您可以通过检查它是否为零来节省昂贵的''**''。 – aruisdante 2014-10-10 16:40:28
嘿,我使用python,从来没有见过这种语法'[: - 1]',你会介意点一些源?谢谢。 – joaoricardo000 2014-10-10 16:41:39
它被称为[切片](https://docs.python.org/2/tutorial/introduction.html)。语法是''[start:stop:step]'',其中一个空值被假定为''[0:len(list):1]''。请注意,* stop *是排他性的,因此''[0:2]''会让您获得前两个元素,而不是前三个元素。 – aruisdante 2014-10-10 16:42:48
import math
def bin_to_dec(s):
if s == '0':
return 0
elif s == '1':
return 1
elif s[0] == '0':
return bin_to_dec(s[1:])
else:
return int(math.pow(2, len(s) - 1)) + (bin_to_dec(s[1:]))
我不确定。这工作,但需要数学库。 – gregpaton08 2014-10-10 17:07:56
这里有一个较短(按行)基于@PeterPeiGuo的递归版本:
def bin_to_dec(s):
return int(s[-1]) + (len(s)>1 and 2*(bin_to_dec(s[:-1])))
我觉得他在这里弄得有些变量名.... – aruisdante 2014-10-10 16:37:42
递归通常意味着你从什么地方调用函数内部本身 – 2014-10-10 16:37:44
我不知道为什么你认为你需要成倍的单曲结果[0] '在这里2点;最低有效位是0或1,而不是0或2. – 2014-10-10 16:38:02