You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串进制转换输出异常:旧进制转新进制结果不符合预期

问题分析与修复

你遇到的问题核心出在base10toN函数中处理余数转字符的条件判断上,导致余数10被错误转换成了:而不是预期的A。

错误原因

看这段关键代码:

converted_string = chr(48 + mod + 7*(mod > 10)) + converted_string

当余数mod等于10时,mod > 10的结果是False,所以计算时加的是7*0=0,最终得到的ASCII码是48+10=58,对应的字符就是:。但我们需要余数10对应A(ASCII码65),这时候条件应该是余数大于等于10,这样mod=10时会触发7*1=7,48+10+7=65刚好是A的ASCII码。

修复后的代码

只需要修改base10toN函数里的条件判断即可:

import math
def base_encode(number, base):
    # sanitize inputs
    number = str(number).lower()
    base = int(base)
    # legal characters
    known_digits = '0123456789abcdefghijklmnopqrstuvwxyz'
    value = { ch:val for val,ch in enumerate(known_digits) if val<base }
    # handle negative values
    if number[0]=='-':
        sign = -1
        number = number[1:]
    else:
        sign = 1
    # do conversion
    total = 0
    for d in number:
        try:
            total = total*base + value[d]
        except KeyError:
            if d in known_digits:
                raise ValueError("invalid digit '{0}' in base {1}".format(d, base))
            else:
                raise ValueError("value of digit {0} is unknown".format(d))
    return sign*total

def base10toN(num, base):
    """Change ``num'' to given base Upto base 36 is supported."""
    converted_string, modstring = "", ""
    currentnum = num
    if not 1 < base < 37:
        raise ValueError("base must be between 2 and 36")
    if not num:
        return '0'
    while currentnum:
        mod = currentnum % base
        currentnum = currentnum // base
        # 修正条件为 mod >=10
        converted_string = chr(48 + mod + 7*(mod >= 10)) + converted_string
    return converted_string

number='a126'
oldbase=12
newbase=14
print(base10toN(base_encode(number,oldbase),newbase))

验证结果

运行修改后的代码,输出结果为650A,和你的预期完全一致。

如果需要输出小写字母(比如650a),可以把字符计算部分改成chr(48 + mod + 39*(mod >= 10)),不过你的需求是大写字母,当前修改就足够了。

内容的提问来源于stack exchange,提问作者Yashaswini Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:04:03