刷题#数字字符串格式化|豆包Marscode Al 刷题

43 阅读4分钟

问题解析

这个问题要求将一个数字字符串格式化为带千分位逗号的格式,并且处理如下几种情况:

  1. 处理前导零:输入的数字字符串可能包含无用的前导零,需要去除。
  2. 保留小数部分:如果输入数字包含小数部分,则在格式化时需要保留这一部分。
  3. 添加千分位分隔符:整数部分需要按照每三位加一个逗号进行分隔。

我们可以通过以下步骤来实现:

  1. 去除前导零:使用 Python 的字符串方法去除输入字符串中的无用的前导零。
  2. 分离整数和小数部分:通过 . 分割数字字符串,将整数部分和小数部分分开处理。
  3. 格式化整数部分:利用 Python 的字符串格式化方法,在整数部分添加千分位逗号。
  4. 合并整数和小数部分:最后将格式化后的整数部分和小数部分合并起来。

思路

  1. 去除前导零

    • 可以通过 lstrip('0') 方法去除字符串中的前导零。
  2. 处理小数部分

    • 如果数字字符串中有小数部分,可以通过 split('.') 来分割。
    • 小数部分保留原样。
  3. 格式化整数部分

    • 使用 Python 格式化字符串(format() 或 f-string)来给整数部分添加千分位逗号。
  4. 合并结果

    • 将格式化后的整数部分和小数部分(如果存在)合并。

代码实现

pythonCopy Code
def format_number(s):
    # 去除前导零
    s = s.lstrip('0')
    
    # 如果去除前导零后为空字符串,说明原本的输入是"0"或类似的,返回"0"
    if s == '' or s == '.':
        return '0'
    
    # 如果输入中有小数点,分离整数部分和小数部分
    if '.' in s:
        integer_part, decimal_part = s.split('.')
    else:
        integer_part, decimal_part = s, ''
    
    # 格式化整数部分,添加千分位逗号
    integer_part = f"{int(integer_part):,}"
    
    # 如果有小数部分,拼接回来
    if decimal_part:
        return f"{integer_part}.{decimal_part}"
    else:
        return integer_part

# 测试样例
print(format_number("1294512.12412"))  # 输出: '1,294,512.12412'
print(format_number("0000123456789.99"))  # 输出: '123,456,789.99'
print(format_number("987654321"))  # 输出: '987,654,321'
print(format_number("0000000000"))  # 输出: '0'

代码解析

  1. 去除前导零

    • s.lstrip('0'):去掉字符串 s 开头的所有零。如果 s 全部是零,则结果会变为空字符串。
    • 为了避免空字符串,我们在处理后加了一段代码,若结果为空字符串或仅为小数点(即"0."),我们返回 '0'
  2. 分离整数部分和小数部分

    • 使用 split('.') 来分割整数部分和小数部分。如果输入字符串中没有小数点,decimal_part 会为空字符串。
  3. 格式化整数部分

    • 使用 f"{int(integer_part):,}" 格式化整数部分,使其按照千分位添加逗号。int() 确保我们处理的是一个有效的整数。
  4. 返回最终结果

    • 如果存在小数部分,则将格式化后的整数部分和小数部分合并后返回。如果没有小数部分,则仅返回格式化后的整数部分。

测试样例

  1. 样例1

    • 输入:"1294512.12412"
    • 输出:'1,294,512.12412'
    • 解析:数字格式正确地加上了千分位分隔符。
  2. 样例2

    • 输入:"0000123456789.99"
    • 输出:'123,456,789.99'
    • 解析:前导零被去除,数字被正确格式化。
  3. 样例3

    • 输入:"987654321"
    • 输出:'987,654,321'
    • 解析:没有小数部分,仅格式化整数部分。
  4. 样例4

    • 输入:"0000000000"
    • 输出:'0'
    • 解析:所有数字都是零,返回 '0'

知识总结

  1. 字符串操作

    • lstrip('0') 可以去除字符串中的前导零。
    • split('.') 用来分割整数部分和小数部分。
    • f"{value:,}" 是 Python 格式化字符串的一种方式,可以轻松地为数字添加千分位逗号。
  2. 数字格式化

    • 使用 Python 提供的格式化方法(int(value):,)来为整数部分添加千分位分隔符。
  3. 异常处理

    • 在处理输入时,考虑到空字符串的特殊情况(例如 "0000000000"),需要进行额外的判断和处理。

学习计划

  1. 巩固字符串操作

    • 练习字符串的各种操作,包括去除前导零、分割、拼接等。
  2. 学习数字格式化

    • 熟练掌握数字格式化技巧,尤其是如何使用 format() 和 f-string 进行复杂的格式化。
  3. 刷题与总结

    • 每次做题后,分析和总结思路,并在代码实现中加以应用,逐步提升算法与编程能力。

工具运用

利用豆包MarsCode AI等刷题平台,可以高效地获取各种编程题目的解法和相关技巧,帮助快速提升编码能力。在平台上,可以通过题解分析和交流,进一步优化代码并积累经验。