小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 add_commas(s):
# 去除前面无用的0
s = s.lstrip('0')
if not s:
return '0'
# 判断是否有小数部分
if '.' in s:
integer_part, decimal_part = s.split('.')
else:
integer_part, decimal_part = s, ''
result = []
while integer_part:
result.insert(0, integer_part[-3:])
integer_part = integer_part[:-3]
integer_part_with_commas = ','.join(result)
if decimal_part:
return integer_part_with_commas + '.' + decimal_part
else:
return integer_part_with_commas
# 测试
test_cases = ["1294512.12412", "0000123456789.99", "987654321"]
for s in test_cases:
print(add_commas(s))
代码解释:
去除前导零:
s = s.lstrip('0')
if not s:
return '0'
使用 lstrip('0') 方法去除字符串开头的所有零。如果去除零后字符串为空,则返回 '0' 。
分离整数部分和小数部分:
if '.' in s:
integer_part, decimal_part = s.split('.')
else:
integer_part, decimal_part = s, ''
判断字符串中是否有小数点。如果有,则使用 split('.') 方法将字符串分为整数部分和小数部分;如果没有,则小数部分为空字符串。
添加千分位逗号:
result = []
while integer_part:
result.insert(0, integer_part[-3:])
integer_part = integer_part[:-3]
integer_part_with_commas = ','.join(result)
使用循环,每次从整数部分的末尾截取3个字符,并将其插入到 result 列表的开头。循环结束后,使用 join 方法将 result 列表中的元素用逗号连接起来。
组合结果:
if decimal_part:
return integer_part_with_commas + '.' + decimal_part
else:
return integer_part_with_commas
如果有小数部分,则将带逗号的整数部分和小数部分用小数点连接起来返回;如果没有小数部分,则直接返回带逗号的整数部分。
测试部分:
test_cases = ["1294512.12412", "0000123456789.99", "987654321"]
for s in test_cases:
print(add_commas(s))
定义测试用例列表,并对每个测试用例调用 add_commas 函数并打印结果。
②
def add_commas(s):
# 去除前面无用的0
s = s.lstrip('0')
if not s:
return '0'
if '.' in s:
integer_part, decimal_part = s.split('.')
else:
integer_part, decimal_part = s, ''
result = []
while integer_part:
result.append(integer_part[-3:])
integer_part = integer_part[:-3]
integer_part_with_commas = ','.join(reversed(result))
if decimal_part:
return integer_part_with_commas + '.' + decimal_part
else:
return integer_part_with_commas
你可以使用以下方式调用这个函数:
s = "1294512.12412"
print(add_commas(s))
s = "0000123456789.99"
print(add_commas(s))
s = "987654321"
print(add_commas(s))
代码说明
去除前导零:使用 lstrip('0') 方法去除字符串前面无用的 0 。如果去除后字符串为空,则返回 '0' 。
分离整数部分和小数部分:检查字符串中是否包含小数点 '.' ,如果包含则使用 split('.') 方法将字符串拆分为整数部分和小数部分;如果不包含,则整数部分就是整个字符串,小数部分为空字符串。
处理整数部分添加千分位逗号:
- 使用一个循环,每次从整数部分的末尾取出 3 位,并将其添加到一个列表 result 中。
- 循环结束后,将 result 列表反转并使用 join 方法用逗号连接起来,形成带千分位逗号的整数部分。
组合结果:如果存在小数部分,则将带千分位逗号的整数部分和小数部分用小数点连接起来返回;如果不存在小数部分,则直接返回带千分位逗号的整数部分。