Python :: Aufgabe #101
3 Lösungen

Ermitteln der IP-Klasse
Anfänger - Python
von Energy
- 09.03.2016 um 14:48 Uhr
Schreibe ein Programm, was nach einer IP-Adresse fragt. Anschließend soll die IP-Klasse ermittelt und ausgegeben werden.
Lösungen:

#!/usr/bin/python3 # -*- encoding: utf-8 -*- # #>>>autor: Sebastian Müller #>>>licence: GPL #>>>contact: mypythonmueller@gmail.com # #Programm nach folgender Aufgabenstellung: #Schreibe ein Programm, was nach einer IP-Adresse fragt. Anschließend soll die #IP-Klasse ermittelt und ausgegeben werden. ok = 0 while not ok: ad = input("Bitte Netzwerkadresse eingeben:") if ":" in ad and len(ad) > 24 and len(ad) < 40: print("Bei der eingegebenen Netwerkadresse handelt es sich um eine IPv6-Adresse") ok = 1 elif "." in ad and len(ad) > 10 and len(ad) < 16: print("Bei der eingegebenen Netwerkadresse handelt es sich um eine IPv4-Adresse") ok = 1 else: print("Die Eingegebene Ip-Adresse ist nicht korreckt.")

# Bestimmung der Klasse einer IP Adresse klasse = (['Klasse A','Klasse B','Klasse C','Klasse D','Klasse E'], [127,191,223,239,255]) def klassencheck(addr): for i in range(5): if addr <= klasse[1][i]: print('Deine eingegebene Adresse',eingabeIP,'entspricht der',klasse[0][i]) break while True: try: print('Bitte gib eine IP Adresse in folgender Form ein(xxx.xxx.xxx.xxx)') eingabeIP = input('IP: ') addr = int(eingabeIP[0:3]) break except ValueError: print('Bitte eine gueltige Adresse wie folgt eingeben: 032.012.112.168') klassencheck(addr)
Hier meine Lösung. Es wurde Python 3 genutzt.
Habe ich die IP-Klasse als Netzklasse richtig verstanden?
https://de.wikipedia.org/wiki/Netzklasse
Python-Code
Habe ich die IP-Klasse als Netzklasse richtig verstanden?
https://de.wikipedia.org/wiki/Netzklasse

def Abfrage(x, adress_part, Adresse): if x[0] <= adress_part <= x[1]: print('\nDie Adresse', Adresse, 'ist in der Netzklasse', x[2]+'.') Adresse = input('Bitte geben Sie eine IP-Adresse der Form n.n.n.n ein:\n') parts = Adresse.split('.') #Die folgende if-Abfrage und Schleife dient zur Abfangung falscher Eingaben try: if Adresse.count('.') != 3: raise SyntaxError() for i in parts: if int(i) > 255: raise SyntaxError() #Dieser Teil ermittelt anhand des ersten Teils der Adresse die Klasse adress_part = int(Adresse[0:Adresse.index('.')]) tupel = ((0, 127, 'A'), (128, 191, 'B'), (192, 223, 'C'), (224, 239, 'D'), (240, 255, 'E')) for j in tupel: Abfrage(j, adress_part, Adresse) except: print('\nSie haben eine falsche Eingabe getätigt!\nDie Adresse darf nur aus Zahlen bestehen\nund muss durch drei "." aufgespalten sein!\n Z.B. 203.0.113.195' ) #Mir ist bewusst, dass es auch die unten stehende Möglichkeit gibt, die zudem performanter ist, als die obere, aber ich wollte das Ganze etwas verkürzen. # if 0 =< adress_part <= 127: # print('\nDie Adresse', Adresse, 'ist in der Netzklasse A.') # elif 128 =< adress_part <= 191: # print('\nDie Adresse', Adresse, 'ist in der Netzklasse B.') # elif 192 =< adress_part <= 223: # print('\nDie Adresse', Adresse, 'ist in der Netzklasse C.') # elif 224 =< adress_part <= 239: # print('\nDie Adresse', Adresse, 'ist in der Netzklasse D.') # elif 240 =< adress_part <= 255: # print('\nDie Adresse', Adresse, 'ist in der Netzklasse E.')