Problem B: 以太网交换机的自学习算法

Problem Description
以太网交换机是一种即插即用的设备,其内部的帧交换表(又称为MAC地址表)是通过自学习算法自动地逐渐建立起来的。
自学习算法:
交换机收到一个帧之后,查找MAC地址表中与收到帧的源地址有无相匹配的项目。
如没有,就在MAC地址表中增加一个项目(源地址、进入的接口和时间);
如有,则更新原有的项目。
现假设有一台24端口的以太网交换机,在一开始,以太网交换机里面的MAC地址表是空的。你的任务是编写程序使用自学习算法建立以太网交换机的MAC地址表(最多24条项目)。
Input Description
输入有若干行,每行表示进入交换机的帧相关的信息。包括4个部分:目的MAC地址 源MAC地址 进入的端口号 进入的时间,相互之间以空格分隔,其中MAC地址用十六进制表示。
Output Description
当所有输入结束后,按照MAC地址从小到大的顺序输出以太网交换机的MAC地址表,具体格式详见样例输出。其中Mac Address占18位,左对齐;Ports占8位,左对齐;Time左对齐。
Sample Input
ffff.ffff.ffff 0001.4339.b5a9 12 8
0050.0fc3.7770 0001.4252.89e7 3 15
0009.7c7c.c95e 0001.422b.486b 12 25
0050.0fc3.7770 0001.4252.89e7 3 48
ffff.ffff.ffff 0001.4339.b5a9 8 112
Sample Output
Mac Address       Ports   Time
0001.422b.486b    12      25
0001.4252.89e7    3       48
0001.4339.b5a9    8       112

ac代码:
 1 def func():
 2     lines = []
 3     while True:
 4         try:
 5             #x作为中间量更新交换表的端口号
 6             x = input()
 7             if x ==' ':
 8                 break
 9             x = x.split(' ', 3)
10 
11             flag = 0
12             # 利用enumerate函数迭代数组,省去i++的操作
13             for i, element in enumerate(lines):
14                 if x[1] == element[1]:
15                     flag = 1
16                     lines[i] = x
17                     break
18             if flag == 0:
19                 lines.append(x)
20         except:
21             break
22 
23     lines = sorted(lines, key=lambda lines : lines[1], reverse=False)
24     print("Mac Address       Ports   Time")
25     for element in lines:
26         print( "%-18s%-8s%s" %(element[1],element[2],element[3]) )
27 
28 if __name__ == '__main__':
29     func()

 

 
 
posted @ 2023-04-24 16:31  hangsingplus  Views(114)  Comments(0Edit  收藏  举报