<p><code>^</code>是<a href="https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations" rel="nofollow">bitwise XOR operator</a>,不是幂运算符。在Python中,<a href="https://docs.python.org/3/reference/expressions.html#the-power-operator" rel="nofollow">power operator is ^{<cd2>}</a>:</p>
<pre><code>s = number[i] * (int(base) ** length)
</code></pre>
<p>还有其他错误;<code>s += s</code>只是<code>s *= 2</code>,你在那里把数字翻了一番。您可能需要从<code>s = 0</code><em>开始,然后将循环求和为:</p>
^{pr2}$
<p>但是您还没有将<code>number[i]</code>转换为实际的数值。在</p>
<p>您需要从“数字”到数值的映射:</p>
<pre><code>digits = {c: i for i, c in enumerate('0123456789abcdefghijklmnopqrstuvwxyz')}
</code></pre>
<p>这将创建一个从字符串数字到数值的字典映射,因此<code>'7'</code>映射到<code>7</code>,而{<cd9>}映射到15,等等,这样就可以得到一个一直到基36的映射。在</p>
<p>现在可以使用<code>digits</code>将字符串数字映射为数值:</p>
<pre><code>s = 0
base = int(base)
for i, digit in enumerate(reversed(number.lower())):
s += digits[digit] * (base ** i)
</code></pre>
<p>我在这里颠倒了对数字的处理;从小到大更容易。<code>enumerate()</code>为我们提供了一个索引计数,您可以直接在<code>number</code>上循环<em>以生成字符,而不是使用<code>range()</code>和索引到{<cd12>}。我把<code>number</code>小写,这样<code>a</code>和{<cd17>}都是{<cd18>}的意思。在</p>
<p>然后可以将其转换为函数中的一个线性函数:</p>
<pre><code>digits = {c: i for i, c in enumerate('0123456789abcdefghijklmnopqrstuvwxyz')}
def parse_number(number, base):
return sum(digits[digit] * (base ** i)
for i, digit in enumerate(reversed(number.lower())))
print(parse_number(number, int(base)))
</code></pre>