Browse Source

Programm aufgeräumt, nun mehr kleinere Funktionen

stguegen 5 years ago
parent
commit
3986d1a2dc
1 changed files with 145 additions and 108 deletions
  1. 145 108
      pvl2gunnar.py

+ 145 - 108
pvl2gunnar.py

@@ -1,108 +1,145 @@
-#Entfernungen berechnen
-#Python 2.7
-#Author Gunnar Egenolff
-#letzte Bearbeitung 21.5.19
-import re
-import math as m
-debug = 0
-#2x fuer Start und Ziel
-
-    #Eingabe Ort
-x1 = []
-x2 = []
-
-def EINGABE(SZ, x):
-    
-    eingabe = raw_input(SZ)
-    s = list(eingabe)
-    
-    if debug == 1: print "Eingabe als Liste: ", (s)
-    laenge = len(s)
-    if debug == 1: print "Anzahl der Listenelemente / Laenge der Eingabe: ", (laenge)
-
-    #Umwandlung Ortsname in Suchbegriff mit Toleranz
-
-    
-    i = 0
-    while i <= laenge - 1: #legt Liste mit regulaeren Ausdruecken an
-        if debug == 1: print "Position des ersetzten Buchstaben: ", s[i]
-        t = s[:] #Originalliste soll erhalten bleiben, gearbeitet wird mit modifizierter Liste
-        t.insert(i,".?.?") #je ein Buchstabe wird durch Punkt ersetzt
-        del t[i+1]
-        mod = "".join(t)
-        x.append("\t" + mod + "\s") #stellt sicher, dass Name nicht Teil eines laengeren Namens
-        if debug == 1: print "geaenderte Liste: ", t
-        if debug == 1: print "originale Liste: ", s
-        if debug == 1: print "Liste der Suchbegriffe: ", x
-    
-        i = i + 1
-   
-    #zeilenweises Auslesen der Ortedatei, Abgleich mit Suchbegriff
-
-    linenr = 0
-    j = 0
-    k = 1
-    brt = []
-    lag = []
-    ort = []
-    schonmalgesehen = []
-    while j <= len(x) - 1: #fragt nacheinander alle Versionen des Ortsnamens ab
-        linenr = 0
-        input = open("DE.tab")
-        Suchbegriff = str(x[j])
-        while True: # liest Datenbank zeilenweise aus
-            line = input.readline()
-            if not line: break
-            linenr += 1
-            if re.search(Suchbegriff, line) and not linenr in schonmalgesehen: #findet Ortsname
-                Liste = line.split("\t")
-                print k, Liste[7], Liste[3], Liste[4], Liste[5] #Ausgabe Plz, Ortsname, Breite, Laenge
-                ort.append(Liste[3])
-                brt.append(Liste[4])
-                lag.append(Liste[5])
-                k += 1
-                schonmalgesehen.append(linenr)
-                if debug == 2: print schonmalgesehen
-                if debug == 2: print lon, lat
-        if debug == 1: print "Suchbegriff: ", str(x[j])
-        j+=1
-        line = True
-
-    #Aufforderung zur Auswahl
-    auswahl = 1000
-    while auswahl - 1 > len(lag):
-        while True:
-            try:  
-                auswahl = raw_input("Bitte geben Sie die Nummer des gewuenschten Orts ein: ")
-                auswahl = int(auswahl)
-                break
-            except ValueError:
-                print "Bitte natuerliche Zahl eingeben!"
-    Ort = ort [auswahl - 1]
-    Laengengrad = lag [auswahl - 1]
-    Breitengrad = brt [auswahl - 1]
-    Koordinaten = []
-    Koordinaten.append(Laengengrad)
-    Koordinaten.append(Breitengrad)
-    Koordinaten.append(Ort)
-    return Koordinaten
-  
-K1 = EINGABE("Start eingeben: ", x1)
-
-L1 = m.radians(float(K1[0]))
-B1 = m.radians(float(K1[1]))
-O1 = K1[2]
-#print lon1
-K2 = EINGABE("Ziel eingeben: ", x2)
-L2 = m.radians(float(K2[0]))
-B2 = m.radians(float(K2[1]))
-O2 = K2[2]
-
-#Berechnung der Entfernung
-if debug == 3: print "laenge1", L1, K1[0]
-if debug == 3: print "breite1", B1, K1[1]
-if debug == 3: print "laenge2", L2, K2[0]
-if debug == 3: print "breite2", B2, K2[1]
-
-distanz = 6371.0 * m.acos( m.cos(B1) * m.cos(B2) * m.cos(L2 - L1) + m.sin(B1) * m.sin(B2) )
-print "Die Entfernung zwischen", O1,"und", O2,"betraegt: ", distanz, "km."
+#Entfernungen berechnen
+#Python 2.7
+#Author Gunnar Egenolff
+#letzte Bearbeitung 22.5.19
+
+
+
+import re
+import math as m
+debug = 0
+
+
+
+
+def EINGABE(startoderziel):#Funktion fuer Eingabe
+    
+    eingabe = raw_input(startoderziel)#Eingabeaufforderung
+    eingabealsliste = list(eingabe)#Umwandlung der Eingabe in Liste
+    laenge = len(eingabealsliste)#Laenge der Liste
+    if debug == 1: print "Eingabe als Liste: ", (eingabealsliste)
+    
+    if debug == 1: print "Anzahl der Listenelemente / Laenge der Eingabe: ", (laenge)
+    return eingabealsliste
+
+    
+
+def SUCHBEGRIFF(eingabealsliste, suchbegriffealsliste):#Funktion zur Erstellung der regulaeren Ausdruecke
+    laenge = len(eingabealsliste)#Laenge der Liste
+    i = 0#Zaehlvariable fuer Schleife
+    while i <= laenge - 1: #legt Liste mit regulaeren Ausdruecken an
+        if debug == 1: print "Ersetzter Buchstabe: ", eingabealsliste[i]
+        t = eingabealsliste[:] #Originalliste soll erhalten bleiben, gearbeitet wird mit modifizierter Liste
+        t.insert(i,".?.?") #je ein Buchstabe wird durch 2x Punkt Fragezeichen ersetzt. So koennen an dieser Stelle bis zu 2 beliebige Zeichen vorkommen.
+        del t[i+1]#ersetzter Buchstabe wird geloescht
+        mod = "".join(t)#regulaerer Ausdruck als String
+        suchbegriffealsliste.append("\t" + mod + "\s") #Whitespaces stellen sicher, dass Suchbegriff nicht Teil eines laengeren Namens
+        if debug == 1: print "geaenderte Liste: ", t
+        if debug == 1: print "originale Liste: ", eingabealsliste
+        if debug == 1: print "Liste der Suchbegriffe: ", suchbegriffealsliste
+    
+        i = i + 1
+    return suchbegriffealsliste
+
+
+    
+
+def AUSLESE(x):#Funktion fuer zeilenweises Auslesen der Ortedatei, Abgleich mit Suchbegriff
+
+    
+    j = 0#Zaehlvariable fuer Liste mit regulaeren Ausdruecken
+    k = 1#Nummer fuer Trefferanzeige
+    brt = []#Liste fuer Breitengrade
+    lag = []#Liste fuer Laengengrade
+    ort = []#Liste fuer Ortsnamen
+    schonmalgesehen = []#Liste fuer Treffer, verhindert Mehrfachtreffer
+    while j <= len(x) - 1: #fragt nacheinander alle Versionen des Ortsnamens ab
+        linenr = 0#Startwert und Reset fuer Zaehlvariable fuer Dateizeilen
+        detab = open("DE.tab")#oeffnet Datei
+        Suchbegriff = str(x[j])
+        while True: # liest Datenbank zeilenweise aus
+            line = detab.readline()
+            if not line: break
+            linenr += 1
+            if re.search(Suchbegriff, line) and not linenr in schonmalgesehen: #findet Ortsname, Abgleich mit Trefferliste
+                Liste = line.split("\t")#wandelt Dateizeile in Liste um
+                print k, Liste[7], Liste[3], Liste[4], Liste[5] #Ausgabe Nummer, Plz, Ortsname, Breite, Laenge
+                ort.append(Liste[3])#Trefferlisten
+                brt.append(Liste[4])
+                lag.append(Liste[5])
+                k += 1
+                schonmalgesehen.append(linenr)
+                if debug == 2: print schonmalgesehen
+                if debug == 2: print lon, lat
+        if debug == 1: print "Suchbegriff: ", str(x[j])
+        j+=1
+        line = True
+        detab.close()
+    vorschlag = [ort, brt, lag]#Zusammenfassung der Trefferlisten fuer return
+    return vorschlag
+    
+    
+
+def AUSWAHL(vorschlag):#Funktion fuer Aufforderung zur Auswahl eines Treffers
+    auswahl = 1000#Startwert fuer Abbruchbedingung
+    while auswahl - 1 > len(vorschlag[1]):#Eingabefehler abfangen
+        while True:
+            try:  
+                auswahl = raw_input("Bitte geben Sie die Nummer des gewuenschten Orts ein: ")
+                auswahl = int(auswahl)
+                break
+            except ValueError:
+                print "Bitte natuerliche Zahl eingeben!"
+    Orte = vorschlag[0]#zweistufiges Verfahren zur Isolierung der Werte fuer Ortsname und Koordinaten
+    Ort = Orte[auswahl - 1]#umgeht Syntaxprobleme bei vorschlag[0[auswahl - 1]]
+    Laengengrade = vorschlag[1]
+    Laengengrad = Laengengrade [auswahl - 1]
+    Breitengrade = vorschlag[2]
+    Breitengrad = Breitengrade [auswahl - 1]
+    Koordinaten = []#Zusammenfassung von Ortsname und Koordinaten in Liste fuer return
+    Koordinaten.append(Laengengrad)
+    Koordinaten.append(Breitengrad)
+    Koordinaten.append(Ort)
+    return Koordinaten
+
+
+#Start
+suchbegriffealsliste1 = []
+suchbegriffealsliste2 = []
+treffer1 = []
+treffer2 = []
+while len(treffer1) == 0:#1. Schleife fuer Start, erneute Suche wenn Suche ohne Treffer
+    eingabealsliste1 = EINGABE("Start eingeben: ")#Funktionen GROSS geschrieben
+    suchbegriffealsliste1 = SUCHBEGRIFF(eingabealsliste1, suchbegriffealsliste1)
+    vorschlag1 = AUSLESE(suchbegriffealsliste1)
+    treffer1 = vorschlag1 [0]#Abbruchbedingung fuer Schleife
+    if len(treffer1) == 0:
+        print "Nichts gefunden :("
+Koordinaten1 = AUSWAHL(vorschlag1)
+
+L1 = m.radians(float(Koordinaten1[0]))#Koordinaten in Bogenmass umwandeln
+B1 = m.radians(float(Koordinaten1[1]))
+O1 = Koordinaten1[2]#Ortsname fuer Ausgabe
+
+while len(treffer2) == 0:#2. Schleife fuer Ziel
+    eingabealsliste2 = EINGABE("Ziel eingeben: ")
+    suchbegriffealsliste2 = SUCHBEGRIFF(eingabealsliste2, suchbegriffealsliste2)
+    vorschlag2 = AUSLESE(suchbegriffealsliste2)
+    treffer2 = vorschlag2 [0]
+    if len(treffer2) == 0:
+        print "Nichts gefunden :("
+Koordinaten2 = AUSWAHL(vorschlag2)
+
+
+L2 = m.radians(float(Koordinaten2[0]))
+B2 = m.radians(float(Koordinaten2[1]))
+O2 = Koordinaten2[2]
+
+#Berechnung der Entfernung
+if debug == 1: print "laenge1", L1, K1[0]
+if debug == 1: print "breite1", B1, K1[1]
+if debug == 1: print "laenge2", L2, K2[0]
+if debug == 1: print "breite2", B2, K2[1]
+
+distanz = 6371.0 * m.acos( m.cos(B1) * m.cos(B2) * m.cos(L2 - L1) + m.sin(B1) * m.sin(B2) )
+print "Die Entfernung zwischen", O1,"und", O2,"betraegt: ", distanz, "km."