2016-08-27 6 views
-7

zu schätzen, wenn mir jemand helfen kann, Anfänger in Python.Finden Sie Zahlen nicht im Bereich

Ich bin aufgefordert, Benutzer für Ports zu reservieren, d. H. 20-25, 80, 90-100.

Die erwartete Ausgabe sollte im Bereich 1-19, 26-79, 81-89,101-65335 liegen.

Vielen Dank im Voraus.

+6

Können Sie zeigen, was Sie bisher versucht haben? Bitte geben Sie einen [mcve] Ihres letzten Versuchs an. – idjaw

Antwort

0

Hier ist ein funktionierendes Beispiel mit fest codierten Werte:

from itertools import groupby 

ranges = ["20 - 25", "80", "90 - 100"] 
out = [0] * 200 

for r in ranges: 
    tokens = r.split() 
    if len(tokens) == 3: 
     a = int(tokens[0]) 
     b = int(tokens[2]) 
     out[a:b + 1] = [1] * (b - a + 1) 
    elif len(tokens) == 1: 
     a = int(tokens[0]) 
     out[a] = 1 

index = 0 
free_ports = [] 
busy_ports = [] 
for k, g in groupby(out): 
    lg = list(g) 
    a = 1 if index == 0 else index 
    index += len(lg) 
    b = index 
    port_range = [a, b - 1] if a != (b - 1) else [a] 

    if k == 1: 
     busy_ports.append(port_range) 
     continue 
    free_ports.append(port_range) 

print "Ports in use:", busy_ports 
print "Ports not used:", free_ports 

Ein Rat aber das nächste Mal versuchen einen mcve mit einem Versuch von Ihnen zur Verfügung zu stellen, sonst werden die Leute Sie schlecht downvote, wie Sie in sehen können diese Frage ;-)

+0

Danke, @BPL, schier genial :) – user1619524

1
def is_good(num, bad_ranges): 
    return all(x not in range(elem[0], elem[1] + 1) for elem in bad_ranges) 

bad_ranges = [[20, 25], [80, 80], [90, 100]] 
print(is_good(19, bad_ranges)) # returns True 
print(is_good(21, bad_ranges)) # returns False 
Verwandte Themen