Python-字符串格式化操作

98 阅读2分钟

案例一


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

代码一

import re


def solution(s: str) -> str:
    secondStr = ""
    result = s
    if s.startswith('0'):
        result = s.strip('0')
    if result.find(".", 0, len(result)) != -1:
        fisrtStr = result.split(".")[0][::-1]
        secondStr = result.split(".")[1]
    else:
        fisrtStr = result[::-1]
    if secondStr != "":
        resultStr = addSymbol(fisrtStr) + "." + secondStr
    else:
        resultStr = addSymbol(fisrtStr)
    return resultStr


def addSymbol(fisrtStr):
    resultStr = ""
    for x in range(0, len(fisrtStr), 3):
        resultStr += fisrtStr[x:x + 3] + ","
    return resultStr[::-1].replace(",", "", 1)


def solution_2(s: str) -> str:
    # 去除前导零 正则表达式 re操作
    result = re.sub(r'^0+', '', s)

    # 分割整数和小数部分
    if '.' in result:
        fisrtStr, secondStr = result.split('.')
    else:
        fisrtStr, secondStr = result, ''

    # 添加千分位逗号
    fisrtStr = fisrtStr[::-1]
    resultStr = ''
    for x in range(0, len(fisrtStr), 3):
        resultStr += fisrtStr[x:x + 3] + ','
    resultStr = resultStr[::-1].replace(',', '', 1)

    # 拼接整数和小数部分
    if secondStr:
        resultStr += '.' + secondStr

    return resultStr


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')

案例一plus


import re


def solution(s):
    targetStr = re.sub(r'^0+', '', s)
    if '.' in targetStr:
        integer_str, decimal_str = targetStr.split('.')
    else:
        integer_str, decimal_str = targetStr, None
    integer_str = integer_str[::-1]
    qian_fen_str = ''
    for x in range(0, len(integer_str), 3):
        qian_fen_str += integer_str[x:x + 3] + ","
    resultStr = qian_fen_str[::-1].replace(",", "", 1)
    if decimal_str is not None:
        resultStr = resultStr + "." + decimal_str
    return resultStr


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')

案例一ultra


import re
from datetime import datetime


def solution(s):
    targetStr = re.sub(r'^0+','',s)
    if '.' in targetStr:
        firstStr,secondStr = targetStr.split(".")
    else:
        firstStr, secondStr = targetStr, None
    firstStr = "{:,}".format(int(firstStr))
    resultStr = firstStr
    if secondStr is not None:
        resultStr += "." + secondStr
    return resultStr


def formatTwoNum():
    value = 123.456789
    return  "The value is: {:.2f}".format(value)


def qianweifengefu():
    number = 1234567.56
    return "Formatted number: {:,}".format(number)


def baifenbigeshi():
    percentage = 0.25
    return "Formatted percentage: {:.2%}".format(percentage)


def fromatdate():
    now = datetime.now()
    return "Current date and time: {:%Y-%m-%d %H:%M:%S}".format(now)


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')
    """格式化常用"""
    print(formatTwoNum())
    print(qianweifengefu())
    print(baifenbigeshi())
    print(fromatdate())