数字字符串格式化 | 豆包MarsCode AI 刷题

38 阅读3分钟

问题描述

小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。

测试样例

样例1:

输入:s = "1294512.12412"
输出:'1,294,512.12412'

样例2:

输入:s = "0000123456789.99"
输出:'123,456,789.99'

样例3:

输入:s = "987654321"
输出:'987,654,321'

完整代码

def solution(s: str) -> str:
    # 去除前导零
    s = s.lstrip('0')

    # 分离整数部分和小数部分
    if '.' in s:
        integer_part, decimal_part = s.split('.')
    else:
        integer_part, decimal_part = s, ''

    # 添加千分位逗号
    if integer_part:
        # 从右向左每三位添加一个逗号
        integer_part = ''.join(reversed(integer_part))
        integer_part = ','.join(integer_part[i:i+3]
                                for i in range(0, len(integer_part), 3))
        integer_part = ''.join(reversed(integer_part))

    # 合并整数部分和小数部分
    result = integer_part
    if decimal_part:
        result += '.' + decimal_part

    return result


if __name__ == '__main__':
    print(solution("1294512.12412") == '1,294,512.12412')
    print(solution("0000123456789.99") == '123,456,789.99')
    print(solution("987654321") == '987,654,321')

在帮助小M编写程序的过程中,我学到了很多关于字符串处理和格式化的重要知识点。这个任务不仅涉及到基本的字符串操作,如去除前导零、分离整数和小数部分,还包括了对数字进行格式化,即添加千分位逗号。下面是我对这个任务的一些心得体会:

  1. 字符串操作的重要性:在编程中,字符串操作是非常常见的,它涉及到数据的清洗和格式化。在这个任务中,去除前导零是一个关键步骤,因为它可以确保数字的正确性和美观性。通过使用lstrip('0')方法,我们可以轻松地去除字符串前面的所有零。

  2. 字符串分割:通过使用split('.')方法,我们可以将字符串分割成整数部分和小数部分。这个方法非常简单,但却是处理数字字符串时的一个重要步骤。

  3. 字符串反转和切片:为了在整数部分添加千分位逗号,我们需要从右向左每三位添加一个逗号。这可以通过先将字符串反转,然后使用切片操作来实现。这种方法虽然有点绕,但是非常有效。

  4. 字符串连接:在完成千分位逗号的添加后,我们需要将整数部分和小数部分重新连接起来。这可以通过简单的字符串连接操作来完成。

  5. 代码的可读性和可维护性:在编写代码时,我尽量保持代码的简洁和可读性。例如,我使用了清晰的变量名和注释,这有助于其他人理解代码的功能和逻辑。

  6. 测试的重要性:在完成代码编写后,我进行了多次测试,以确保代码在各种情况下都能正常工作。这包括了对不同长度的数字字符串、带有小数部分的字符串以及前导零的字符串的测试。

  7. 学习和应用新知识:在解决这个问题的过程中,我有机会学习和应用了一些新的编程技巧和方法。这不仅提高了我的编程技能,也增强了我解决实际问题的能力。

总的来说,这个任务不仅让我更加熟练地掌握了字符串操作和格式化技巧,还让我意识到了编写可读性强、可维护性高的代码的重要性。通过这个任务,我也更加明白了测试在确保代码质量中的关键作用。这些经验对于我未来在编程领域的发展是非常宝贵的。