面试题:公交车灯坏了,让我们猜一猜它是哪一路车?(python)

数字LED亮条对应的数字集合
设计思路:根据亮条的tag值[0,1,2,3,4,5,6,7] (0代表没有亮条)取出对应的数组,然后求交集,就是对应的可能的数字

#-*-coding:utf-8-*-
#__author__='maxh'
import time
from functools import wraps

def timefn(fn):
    """计算性能的修饰器"""
    @wraps(fn)
    def measure_time(*args, **kwargs):
        t1 = time.time()
        result = fn(*args, **kwargs)
        t2 = time.time()
        print("@timefn:" + fn.__name__ + "took" + str(t2 - t1) + "second")
        return result
    return measure_time

class brokenLed(object):
    led0=[0,1,2,3,4,5,6,7,8,9]
    led1=[0,4,5,6,8,9]
    led2=[0,2,3,5,6,7,8,9]
    led3=[0,1,2,3,4,7,8,9]
    led4=[0,1,3,4,5,6,7,8,9]
    led5=[0,2,6,8]
    led6=[0,2,3,5,6,8,9]
    led7=[2,3,4,5,6,8,9]
    leds=[led0,led1,led2,led3,led4,led5,led6,led7]
    ledtag=[0,1,2,3,4,5,6,7]
    ledDict=dict(zip(ledtag,leds))

    # 构造一个bus车灯显示数字, n1=[0] 没有灯亮  n2=[6,7] 显示第六个和第七个灯
    def __init__(self,ledImage1,ledImage2,ledImage3):
        self.ledImage1=ledImage1 #第一个数字显示的笔画 [2,3,4]
        self.ledImage2=ledImage2 #第二个数字显示的笔画 [2,3,4]
        self.ledImage3=ledImage3 #第三个数字显示的笔画 [2,3,4]

    def getOneLedList(self,ledImage):
        imageList=[]
        for i in ledImage:
            imageList.append(brokenLed.ledDict[i])
        return imageList

    def getSameFromLists(self,numberList):  #args = [[1,2,3],[4,5,3]]  列表去重
        temp=numberList[0]
        if len(numberList)==1:
            return numberList[0]
        elif len(numberList)>1:
            for i in range(1,len(numberList)):
                temp=self.getSameFrom2List(temp,numberList[i])
            return temp

    def getSameFrom2List(self,list1,list2):  #两个列表求合集
       # same=[]          列表就交集用时:0.009999513626098633
       #  for i in list1:
       #      if i in list2:
       #          same.append(i)
        same=list(set(list1)&set(list2))   #集合求交集用时:0.0009949207305908203
        return same

    @timefn
    def getBusNumber(self):
        busNumber=[]
        def getOne(ledImage):
            ledList=self.getOneLedList(ledImage)
            return self.getSameFromLists(ledList)
        n1=getOne(self.ledImage1)
        n2=getOne(self.ledImage2)
        n3=getOne(self.ledImage3)
        for i in n1:
            for j in n2:
                for k in n3:
                    busNumber.append(i*100+j*10+k)
        print("当前车牌号可能是:")
        print(busNumber)
        print("共有%d趟车"%len(busNumber))
        return busNumber,len(busNumber)

if __name__ == "__main__":
    b=brokenLed([0],[0],[0])
    b.getBusNumber()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值