2017-03-04 43 views
2

对不起,如果我提出重复问题,但没有发现任何问题。如果问题可以以不同的方式提出,请随时提出建议或编辑。Python。是否有可能从变量值不断增加的循环中构建一个单线程?

目标是将任何基于n的整数转换为十进制整数。

from string import digits, ascii_uppercase 


def convert_n_to_10(number, n): 
    alphabet = digits + ascii_uppercase 
    result_10 = 0 
    for i in range(len(str(number))): 
     result_10 = result_10 * n + alphabet.index(str(number)[i]) 
    return result_10 

问题是关于在这个循环中做result_10变量的值不断增加的可能性。

for i in range(len(str(number))): 
    result_10 = result_10 * n + alphabet.index(str(number)[i]) 

谢谢。

+0

这里是'x'定义?为什么'数字'是一个未被使用的论点? – ODiogoSilva

+2

为什么不使用'int'函数代替'convert_n_to_10'?它已经做了你想做的事情。 –

+0

@JosephSible:不,** int **假定这些字符已经在基数10中。期望的例程也将基数作为参数。考虑将“21101”从三进制转换为十进制。 – Prune

回答

2

这是直着把你的

result_10 = 0 
    for i in range(len(str(number))): 
     result_10 = result_10 * n + alphabet.index(str(number)[i]) 
    return result_10 

成这样:

return reduce(lambda result_10, i: result_10 * n + alphabet.index(str(number)[i]), 
        range(len(str(number))), 
        0) 

请注意,我只是复制&粘贴主要部分(计算表达式,可迭代和初始值)甚至不读它们。

(在Python 3,您需要从functools模块导入reduce。)

+0

计算是100%正确的,谢谢你的通知。由于问题是关于使用先前计算结果的动态变量更改,所以您的答案是我需要的答案。谢谢。 – pyramidka

2
return sum([pow(n, len(x)-i) * alphabet.index(x[i]) 
      for i in range(len(x))]) 

计算的ñ在数每个位置的合适的电源(其如已经字符串;无需转换),并乘以数字值。

更妙的是,因为JosephSible提醒我们:

return int(x, n) 
+0

看来我们应该用'n'来划分'sum'来得到正确的答案。 – pyramidka

+0

'return int(x,n)'完美无缺。正如JosephSible所写的。 – pyramidka

相关问题