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

Python自定义分割函数问题:小数部分最后一位无法正确存入?

问题分析与修复:分割数字的整数和小数部分

问题描述

我是Python编程新手,目前有课堂作业需要完成:编写一个无需切片或其他内置函数的程序,将数字(如12.5)分割为整数部分(12)和小数部分(5)。我编写了如下decoupage函数,但该函数仅能正确处理整数部分,小数部分的最后一位无法存入对应变量。逐行调试后发现,整数部分12能正确存入partie_entiere,但小数部分的5无法存入partie_decimale,请问这是什么原因?

原代码:

def decoupage(nombre:str)->(str,str):
    partie_entiere = ''
    partie_decimale = ''
    delimiteurs = [',','.']
    compte = 0
    for lettre in nombre:
        if lettre not in delimiteurs:
            if compte != 1:
                partie_entiere += lettre
        elif compte == 1:
                partie_decimale += lettre
        else:
            compte += 1
    return partie_entiere, partie_decimale


assert decoupage("12.5") == ('12', '5')
assert decoupage("12,5") == ('12', '5')
assert decoupage("0.5") == ('0', '5')
assert decoupage("12") == ('12', '0')

问题原因

你的代码逻辑存在两处关键漏洞:

  • 当遇到分隔符(.或,)时,compte会被设为1,标记进入小数部分处理阶段,但接下来的小数位字符(比如示例中的5)不属于分隔符,会进入第一个if分支,此时compte == 1,导致if compte !=1条件不成立,既不会把字符加到整数部分,也没有逻辑把它加到小数部分,最终小数位字符被直接忽略
  • 原代码未处理无小数部分的情况,此时partie_decimale会是空字符串,无法满足('12', '0')的断言要求

修复后的代码

调整逻辑,在非分隔符分支里根据compte的值决定添加到整数还是小数部分,同时处理无小数部分的情况:

def decoupage(nombre: str) -> (str, str):
    partie_entiere = ''
    partie_decimale = ''
    delimiteurs = [',', '.']
    compte = 0  # 0表示处理整数部分,1表示处理小数部分
    for lettre in nombre:
        if lettre not in delimiteurs:
            if compte == 0:
                partie_entiere += lettre
            else:
                partie_decimale += lettre
        else:
            # 遇到分隔符,仅在当前处于整数部分时切换状态
            if compte == 0:
                compte = 1
    # 无小数部分时,返回'0'而非空字符串
    if not partie_decimale:
        partie_decimale = '0'
    return partie_entiere, partie_decimale


# 验证断言
assert decoupage("12.5") == ('12', '5')
assert decoupage("12,5") == ('12', '5')
assert decoupage("0.5") == ('0', '5')
assert decoupage("12") == ('12', '0')
assert decoupage("3.1415") == ('3', '1415')  # 额外验证多位小数场景

修复说明

  1. 当字符不是分隔符时,直接根据compte的状态(0或1)将字符追加到对应部分,彻底避免小数位遗漏
  2. 遇到分隔符时,仅在当前处于整数部分时切换状态,避免多次切换导致逻辑混乱
  3. 最后判断如果小数部分为空,自动设置为'0',满足无小数位的断言要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:55:21