python:解析vlan資源池....


Vlan是一種為局域網設備進行邏輯划分的技術,為了標識不同的vlan 引入了vlan id 1~4094之間的整數,定義一個vlan id 的資源池

資源池中連續的vlan用開始vlan-結束vlan表示,不連續的用單個整數表示所有的vlan用英文逗號連接起來

現有一個vlan資源池,業務需要從資源池中申請一個vlan,需要你輸出從vlan資源池中移除申請的vlan后的資源池

輸入描述

第一行為字符串格式的vlan資源池,第二行為業務要申請的vlan vlan的取值范圍1~4094

輸出描述

從輸入vlan資源池中移除申請的vlan后字符串格式的vlan資源池,輸出要求滿足題目中要求的格式,

並且要求從小到大升序輸出,如果申請的vlan不在原資源池,輸出升序排序的原資源池的字符串即可

輸入池中vlan數量范圍為2~2094的整數,資源池中vlan不重復且合法1~2094的整數

輸入是亂序的

示例一

輸入
1-5
2

輸出
1,3-5
說明:原vlan資源池中有1 2 3 4 5 移除2后
剩下的1 3 4 5按照升序排列的方式為 1 3-5

示例二
輸入
20-21,15,18,30,5-10
15
輸出
5-10,18,20-21,30
說明:
原vlan資源池中有5 6 7 8 9 10 15 18 20 21 30
移除15后 剩下的為 5 6 7 8 9 10 18 20 21 30
按照題目描述格式並升序后的結果為5-10,18,20-21,30

示例三
輸入
5,1-3
10
輸出
1-3,5
資源池中有1 2 3 5
申請的資源不在資源池中
將原池升序輸出為1-3,5

 

 

 1 # coding:utf-8
 2 def appends(result, start, last):
 3     if start == last:
 4         result.append(str(last))
 5     else:
 6         result.append("-".join([str(start), str(last)]))
 7 
 8 
 9 if __name__ == '__main__':
10     input_str = input("input string:")
11     request = int(input("Remove:"))
12 
13     result = []
14     sets = set()
15     for string in input_str.split(','):
16         if "-" in string:
17             ss = string.split("-")
18             for i in range(int(ss[0]), int(ss[1])+1):
19                 sets.add(int(i))
20         else:
21             sets.add(int(string))
22     try:
23         sets.remove(request)
24     except NameError:
25         pass
26 
27     last = start = list(sets)[0]
28     for i in range(1, len(sets)):
29         cur = list(sets)[i]
30         if cur == last+1:
31             last = cur
32         else:
33             appends(result, start, last)
34             start = last = cur
35 
36     appends(result, start, last)
37     print(sorted(set(result)))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM