加载中...

int强转面向对象分析

int强转面向对象分析

import math


class MyInt():
    def __call__(self, num):
        # 针对bool
        if isinstance(num, bool):
            if num == False:
                return 0
            else:
                return 1
            # 针对int
        elif isinstance(num, int):
            return num
        # 针对float
        elif isinstance(num, float):
            # 方法一
            # a,b = str(num).split(".")
            # return eval(a) 执行字符串按代码

            # 方法二 按负数取高 整数取底
            return math.floor(num) if num >= 0 else math.ceil(num)

        elif isinstance(num, str):
            #  如果是字符串且有符号的情况
            if (num[0] == "+" or num[0] == "-") and num[1:].isdecimal():
                # 检测是否是 +999999 这种情况
                # 获取当前字符串的正负值
                if num[0] == "+":
                    sign = 1
                elif num[0] == "-":
                    sign = -1
                # 截取符号后面的字符串传递
                return self.calc(num[1:], sign)

            elif num.isdecimal():
                # 无符号归于正数
                return self.calc(num)
            else:
                # 检测是否是 +999999abc 这种情况
                return "这个算不了兄弟~"

    # 计算最后的数值
    def calc(self, num, sign=1):
        # 去掉前面的"0"字符串
        num = num.lstrip("0")
        # print(num , type(num) , "<==============>")
        if num == "":
            #  0全去掉的情况是空字符串
            return 0
        # eval将str按照python解析为int 如果正常有符号位的eval无法识别为py代码 不可解析
        return eval(num) * sign

posted @ 2024-03-17 14:26  江寒雨  阅读(25)  评论(0)    收藏  举报