问题描述
小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。小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'`
解题思路
- 删除字符串前面无用的0;
- 把有小数和无小数的数字字符串进行分开讨论。
详细实现
def solution(s: str) -> str:
s = s.lstrip("0")
if "." in s:
if s.split(".")[0]:
int_part = int(s.split(".")[0])
decimal_part = s.split(".")[1]
new_str = "{:,}.{}".format(int_part,decimal_part)
return new_str
else:
int_part = 0
decimal_part = s.split(".")[1]
new_str = "{:,}.{}".format(int_part,decimal_part)
return new_str
else:
number = int(s)
new_str = "{:,}".format(number)
return new_str
if __name__ == '__main__':
print(solution("1294512.12412"))
print(solution("0000123456789.99"))
print(solution("987654321"))
print(solution("00000.05678"))
代码解释
- 利用字符串中的lstrip方法对数字字符串中前面的无用的0删除掉(在此要注意,原来的变量的值不变,如果要想让原来的s改变,可以直接赋值给s)
- 分类讨论"."在s中和不在s中。在这里我又在"."在s中的情况又进行了讨论,目的是为了防止出现整数部分全是0的情况,因为如果不加以说明的话,在执行
s = s.lstrip("0")后,再去执行int_part = int(s.split(".")[0])会报错。
心得体会
这个题目相对来说还是比较简单的,个人认为主要考察了关于对字符串进行的一些相关的操作,利用字符串中的一些方法还有格式化字符串,不同数据类型之间如何进行转换,除此之外,还要注意比如利用一些方法或进行其他操作后,它的返回结果是什么样的以及他返回的是什么类型,这样的话才能更好地写后面的代码,以防止类型不对而报错。
借鉴
如果大家感兴趣的话,可以把你们对这一题写的代码打在评论区,互相借鉴一下,让我这个小白学习一下哈哈哈哈哈!