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

122 阅读4分钟

一、题目简述

将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分,且要精简掉数字字符串前无用的零。

二、题目精解

思路概述:

思路

  1. 去除前导零

    • 由题目可知需要去除字符串中无意义的前导零。
    • 使用 lstrip('0') 方法去除字符串开头的所有零。使用这个方法如果字符串全是零,则会返回一个空的字符串。
    • 如果去除零后字符串为空,则将其重置为 '0'
  2. 分离整数和小数部分

    • 字符串可能包含小数部分,也可能不包含。
    • 使用 split('.') 方法根据小数点将字符串分割为整数部分和小数部分(如果存在)。
    • 如果不存在小数点,则整数部分是整个字符串,小数部分为空字符串。
  3. 添加千分位逗号

    • 整数部分需要添加千分位逗号以提高可读性。
    • 为了方便地添加逗号,先将整数部分字符串反转。
    • 使用列表推导式和字符串切片,每三个字符分割一次,并在每个分割后添加逗号(除了最后一个分割)。
    • 将添加了逗号的字符串再次反转回来,恢复正确的顺序。

代码详解:

def solution(s: str) -> str:
    s = s.lstrip('0')
    if s == '':
        s = '0'

这段代码定义了一个函数solution用于去除数字字符串中前导零。首先用户输入一个数字字符串对象存储在S中,随后通过调用lstrip()方法去除前面无用的零,通过if条件语句进行判断去除无用字符后字符串是否为空,若为空则将其重置为0

 if '.' in s:
        integer_part, decimal_part = s.split('.')
    else:
        integer_part, decimal_part = s, ''

遍历s分离数字字符串的整数部分和小数部分,对整数部分添加千分位分隔符

    integer_part = integer_part[::-1]  
    integer_part = ','.join([integer_part[i:i+3] for i in range(0, len(integer_part), 3)])
    integer_part = integer_part[::-1]  

反转整数部分字符串,然后使用列表推导式和字符串切片,每三个字符添加一个逗号(除了最后一个分割),再将字符串反转回来,恢复字符串正确次序

 if decimal_part:
        return f"{integer_part}.{decimal_part}"
    else:
        return integer_part

这一小段代码意在重新组合整数部分和小数部分,if判断是否存在小数部分,如果存在,则组合整数部分和小数部分,如果不存在,则只返回整数部分,最后将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')

if name=="main":

1. 理解 __name__ 变量
  • 在Python脚本中,__name__ 是一个内置变量。
  • 当脚本被直接运行时,__name__ 的值会被设置为 '__main__'
  • 然而,如果脚本是被其他脚本作为模块导入的,__name__ 的值则会被设置为该脚本(模块)的名称。
2. if __name__ == '__main__': 的作用
  • 这个条件判断语句用于确定脚本是被直接运行还是被导入为模块。
  • 如果脚本被直接运行,那么紧随其后的代码块将会被执行。
  • 如果脚本是作为模块被导入的,那么这部分代码块将不会执行,从而避免了在导入时可能产生的副作用(例如,不必要的函数执行或变量修改)。
3. 实际用途
  • 模块测试:开发者经常在模块的末尾添加这样的代码块,用于测试模块的功能。当模块被直接运行时,这些测试代码会执行;而当模块被导入时,它们则不会执行。
  • 脚本入口:对于大型项目,通常会有一个主脚本(例如 main.py),其中包含 if __name__ == '__main__': 语句,用于调用其他模块中的函数,作为整个程序的入口点。
4. 小总结
  • if __name__ == '__main__': 语句在Python编程中非常重要,它使得开发者能够控制代码块在模块被直接运行或导入时的执行行为。
  • 合理利用这一特性,可以提升代码的可维护性和重用性。

总结:

  • 该函数接受一个包含数字的字符串,并返回格式化后的字符串,其中整数部分包含千分位逗号,而小数部分保持不变(如果存在)。
  • 函数首先去除前导零,然后分离整数和小数部分。
  • 整数部分通过反转、添加逗号和再次反转的过程来添加千分位逗号。
  • 最后,根据是否存在小数部分,将整数部分和小数部分组合起来返回最终结果。