python3 week4

1 实现四舍五入,禁止使用python内建函数。
func(soure_num, precise),source_num为需要处理的数据,precise为需要保留的位数

"""
File: 01四舍五入.py
Author: chde_wang
Date: 2020-08-09 12:14:59
Description:实现四舍五入,禁止使用python内建函数。
func(soure_num, precise),source_num为需要处理的数据,precise为需要保留的位数

1.判断输入的是否为数字
2.是否为浮点数
3.
"""


def func(source_num, precise_num):
    source_num_str = str(source_num)
    source_num_list = source_num_str.split('.')
    print("四舍五入后数值为:", end='')
    float_str = ''
    # 对保留位数进行判断
    if precise_num < 0:
        print("保留位数没意义!")
    elif precise_num == 0:
        if int(source_num_list[-1]) == 0:
            float_str = int(source_num_str)
        else:
            if int(source_num_list[-1][-1]) >= 5:
                float_list = list(source_num_list[-1])
                float_list[-1] = str(int(float_list[-1]) + 1)
                float_str = ''.join(float_list)
            else:
                float_str = source_num_list[0]
        print(float_str)
    # 保留位数有意义,且是整数
    else:
        # 整数补零
        if source_num_list[-1] == '0':
            if precise_num != 0:
                float_len = len(source_num_list[-1])
                float_list = list(source_num_list[-1])
                num_zero = precise_num - float_len
                for i in range(num_zero):
                    float_list.append('0')
                float_str = ''.join(float_list)
        # 是小数
        else:
            # 保留位数等于小数位数
            if len(source_num_list[-1]) == precise_num:
                float_str = source_num_list[-1]
            # 保留位数小于小数位数 补零
            elif len(source_num_list[-1]) < precise_num:
                float_len = len(source_num_list[-1])
                float_list = list(source_num_list[-1])
                num_zero = precise_num - float_len
                for i in range(num_zero):
                    float_list.append('0')
                float_str = ''.join(float_list)
            # 保留位数大于小数位数
            else:
                # 保留位后一位大于等于5 进位
                if int(source_num_list[-1][precise_num]) >= 5:
                    float_list = list(source_num_list[-1])
                    float_list[precise_num-1] = str(int(float_list[precise_num-1])+1)
                    float_str = ''.join(float_list)
                    if precise_num == 1:
                        float_str = float_str[0]
                    else:
                        float_str = float_str[0:precise_num]
                else:
                    float_str = source_num_list[-1][0:precise_num]
        str_list = [source_num_list[0], '.', float_str]
        str_list = ''.join(str_list)
        print(str_list)


source_num = input("请输入数据:")  # 12.3434345
precise_num = input("请输入保留位数:")
try:
    source_num = float(source_num)
    precise_num = int(precise_num)
    func(source_num, precise_num)
except ValueError:
    print("您输入的不是数字!")

没有实现保留0位小数的进制问题。

修改 参考梦园:

"""
File: 03四舍五入参考梦园.py
Author: chde_wang
Date: 2020-08-17 22:57:09
Description:
"""


def func_round_me(num=0, precision=0):
    digit = 10**precision
    int_num = float(int(num * digit))
    flag = str(num).find('.')
    flag_tag = str(num)[flag+precision+1]
    if num >= 0:
        if int(flag_tag) >= 5:
            int_num = (int_num + 1) / digit
        else:
            int_num = int_num / digit
    else:
        if int(flag_tag) >= 5:
            int_num = (int_num - 1) / digit
        else:
            int_num = int_num / digit
    return int_num


try:
    num = float(input("请输入数值:"))
    precision = int(input("请输入保留位数:"))
except ValueError:
    print("输入错误!")
print("{}保留{}位小数,四舍五入后的结果为{}".format(num, precision, func_round_me(num, precision)))

2实现reduce的功能,请自行百度内建函数reduce的功能

"""
File: reduce实现.py
Author: chde_wang
Date: 2020-08-09 19:57:55
Description:实现reduce的功能,请自行百度内建函数reduce的功能
"""


def foo(*args):
    if len(args) <= 2:
        # 判断第一个参数为可迭代类型
        try:
            if isinstance(args[0], (list,tuple)):
                # 第一个参数不为空
                if args[0]:
                    # 第二个参数不为空
                    if args[1]:
                        # 两个参数类型一致
                        if type(args[0][0]) == type(args[1]):
                            if len(str(args[0])) == 1:
                                    return args[0] + args[1]
                            else:
                                sum = args[1]
                                for i in range(len(args[0])):
                                    sum += args[0][i]
                                return sum
                        else:
                            print("类型不一致!")
                    # 第二个参数为空
                    else:
                        if type(args[0][0] == 'str'):
                            sum = ''
                        elif type(args[0][0] == 'int'):
                            sum = 0
                        for i in range(len(args[0])):
                            sum += args[0][i]
                        return sum
                # 第一个参数为空 第二个参数不为空
                elif args[1]:
                    return args[1]
                else:
                    print("参数为空")
        except TypeError:
            print("类型不一致")


def my_reduce(fun_name, arg1, arg2=0):
    if fun_name(arg1, arg2):
        print(fun_name(arg1,arg2))


my_reduce(foo, ['1', '2'], '1')

修改(参考梦园):

from collections import Iterable
def my_reduce(fun_name, arg1, arg2=None):
    if arg2:
        if isinstance(arg1, Iterable):
            value = arg2
            for i in arg1:
                value=fun_name(value,i)
    return value
print(my_reduce(add,[1,2,3,4],5))

 

如何替换字符串中指定位置的字符呢?

字符串转换列表替换并转换解决:

def replace_char(string,char,index):
     string = list(string)
     string[index] = char
     return ''.join(string)

参考自https://www.cnblogs.com/bingoTest/p/10449941.html

你可能感兴趣的:(python基础学习)