python3求和小工具:给定开始结尾数字及步长,以步长为间隔,计算区间内所有数字的和(拓展sum()功能)

这篇博客介绍了一个Python3小工具,它扩展了内置的`sum()`函数,允许用户指定起始数、结束数、步长以及结果的保留小数位数,以计算特定区间的数字之和。源码和测试结果也在文中展示。
说明

给定起始数,结尾数及步长,计算从起始数开始,以步长为间隔,到结尾数为止的所有数字的和,可以指定保留结果小数位数
startNum:起始数字
endNum:结尾数字
step:步长,必须为大于等于0的实数,否则默认为1
decimalLen:结果中保留的小数位数,只能设置0或正整数,否则默认使用startNum, endNum, step三者中最大的小数位数

源码
# 给定起始数,结尾数及步长,计算从起始数开始,以步长为间隔,到结尾数为止的所有数字的和,可以指定保留结果小数位数
def mySum(startNum, endNum, step, decimalLen=-1):
    # 传参类型不对时直接返回false
    if not isinstance(startNum, (int, float)) or not isinstance(endNum, (int, float)) or not isinstance(step, (
    int, float)):
        return False

    # 保留小数位数decimalLen如果设置的不是0或者正整数,默认都使用startNum, endNum, step三个参数中最大的小数位数
    if not isinstance(decimalLen, int) or decimalLen < 0:
        decimalLen_startNum, decimalLen_endNum, decimalLen_step = 0, 0, 0
        decimalLen_startNum_list = str(startNum).split('.')
        decimalLen_endNum_list = str(endNum).split('.')
        decimalLen_step_list = str(step).split('.')
        if len(decimalLen_startNum_list) == 2:
            decimalLen_startNum = len(decimalLen_startNum_list[1])
        if len(decimalLen_endNum_list) == 2:
            decimalLen_endNum = len(decimalLen_endNum_list[1])
        if len(decimalLen_step_list) == 2:
            decimalLen_step = len(decimalLen_step_list[1])
        decimalLen = max([decimalLen_startNum, decimalLen_endNum, decimalLen_step])
    
    # 步长为0或者开始的数字大于等于结尾的数字时,返回开始数和结尾数的和
    if step == 0 or startNum >= endNum:
        sum = startNum + endNum
        if decimalLen == 0:
            sum = int(sum)
        else:
            sum = round(sum, decimalLen)
        return sum
    
    # 步长不能小于0,否则设置为默认值1
    if step < 0:
        step = 1
    sum = 0
    while True:
        sum = sum + startNum
        startNum = startNum + step
        if startNum >= endNum:
            startNum = endNum
            sum = sum + startNum
            break
    if decimalLen == 0:
        sum = int(sum)
    else:
        sum = round(sum, decimalLen)
    return sum
测试结果
# 引用
if __name__ == '__main__':
    print('结果1:',mySum(1, 10, 2))
    print('结果2:',mySum(-10, 10, 4, 3))
    print('结果3:',mySum(-10, 10, -1))
    print('结果4:',mySum(-101, 10, -1))
    print('结果5:',mySum(1, 10, 1.443))
    print('结果6:',mySum(1, 10, 1.443, 2))
    print('结果7:',mySum(1, 10, 0, 0))
    print('结果8:',mySum(4.342, 10.41221, 0))
    print('结果9:',mySum(4.342, 10.41221, 0, 2))
    print('结果10:',mySum(4.342, 10.41221, 0, 0))

# 结果
结果135
结果20
结果30
结果4-5096
结果547.303
结果647.3
结果711
结果814.75421
结果914.75
结果1014

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值