题1 : 字符串的过滤和隔离度的判定

class Exam:
    def __init__(self):
        pass
  
    def SplitDigit4String(self, sour, lstDigit):
        '''=============================================================================
        Function        : SplitDigit4String
        Description     : 把数字从字符串中分解出来
        Input           :
            sour        : 输入只有数字和分号的字符串,e.g. "1;3;5;7"
        Output          :
            lstDigit    : 数字列表,如果没有数字,则应该为空
        Return          :
        Other           :
        ============================================================================='''
        #疑问:这里的为“空”是“空list->[]”还是为“None”,这里将两种情况全部考虑
        temp_list = map(lambda x:int(x),sour.split(";"))
        lstDigit = lstDigit and lstDigit.extend(temp_list) or temp_list
        return lstDigit
       
    def FilterDigit4List(self,lstDigit,notKeepOrder=False):
        '''=============================================================================
        Function        : FilterDigit4List
        Description     : 按以下要求过滤出数字 ==>
                        :
                        : a. 剔除不在属于不在下列范围的数字:[975,1024]、[1,124]、[512,885]
                        : b. 剔除掉字符串中重复数字
        Input/Output    :
            lstDigit    : 存储数字的链表
        Return          :
        Other           :
       
        notKeepOrder(增)   : 是否保留list原有顺序,默认保留
        ============================================================================='''
       
        if notKeepOrder:
            #方案1:利用set的hash算法,不考虑list原有顺序
            return list(set(lstDigit)-set(range(1,125))-set(range(512,886))-set(975,1025))
        else:
            #疑问:这里重复的数据剔除后保留的是哪一个,是最先一个?最后一个?这里保留最后一个
            #方案2:保留list原有顺序
            for i in lstDigit:
                if (i>1 and i <124) or (i>512 and i <885) or (i>975 and i <1024) or lstDigit.count(i)>1:
                    lstDigit.remove(i)
            return lstDigit
       
       
    def IsInsulated(self,lstDigit):
        '''=============================================================================
        Function        : IsInsulated
        Description     : 对数字的隔离度进行判断:4个数字的隔离(即绝对值)要求大于3
                        : e.g.“1;4;21;30;98;67”不满足要求,因为4-1=3,不大于3;
                        :“1;21;30,98,67,4”满足要求,因为以下组合都满足要求:
                        :“1;21;30,98” .......... 四个数字两两相隔都大于3
                        :“21;30,98,67”
                        :“30,98,67,4”
        Input/Output    :
            lstDigit    : 存储数字的链表
        Return          :
        Other
        ============================================================================='''
       
        for i in range(len(lstDigit)-3):
            temp_list = lstDigit[i:i+4]
            temp_list.sort()
            for j in range(len(temp_list)-1)
                if abs(temp_list[j]-temp_list[j+1]) <= 3:
                    return False
        return True
       

  
    def GetNeededDigits(self,lstDigit):
        '''=============================================================================
        Function        : GetNeededDigits
        Description     : 连续4个数字的隔离(即绝对值)要求大于3如果不满足要求,需要进
                        : 行重新排列,直到找到符合要求的排列
        Input/Output    :
            lstDigit    : 存储数字的链表
        Return          : 如果能找到符合要求的链表则返回true,否则返回false
        Other           :
        ============================================================================='''
       
        return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值