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.')
