Aufgabe ist es, ein Programm zu erstellen, welches nach fehlertoleranter Abfrage zweier deutscher Städte die Luftlinie, unter Berücksichtigung der Erdkrümmung, berechnet.

LuftlinienberechnungDE.py 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # That's the programm file of Michelle Piras, Malte Staerker and Alexander Teubert for PVL Programmierung@hs-anhalt 2017
  2. # Please don't copy any of this!
  3. # Thank you!
  4. # Created: 19:31 01.06.2017 [/AT]
  5. # Last edit: 22:14 07.06.2017 [/AT]
  6. import sys
  7. import math
  8. import os
  9. import re
  10. import time as t
  11. os.system("clear")
  12. #FUNKTIONEN:
  13. def begruessung():
  14. print "{1}{0}{2}{0}{3}{0}{4}".format("\n ","Hallo und herzlich willkommen zum Luftlinienberechner fuer Deutschland!","1) Starte das Programm","2) Rufe die Hilfe auf!","3) Schliesse das Programm!")
  15. def Auswahl():
  16. try:
  17. global option
  18. option = int(raw_input("Bitte treffen Sie eine Auswahl! "))
  19. except ValueError:
  20. print "Ungueltige Eingabe!"
  21. t.sleep(3)
  22. def hilfe():
  23. hilfetxt = open("readme.txt","r") # ruft readme.txt auf und liest sie aus
  24. txt = hilfetxt.read()
  25. print txt
  26. hilfetxt.close()
  27. def abfrage():
  28. ergebnisse = [] #alle vorschlaege landen in dieser liste
  29. share = [] #Matrix aller Treffer
  30. while True:
  31. AV = 0 #Anzahl der Vorschlaege
  32. Daten = open("/data/share/sstudent/py_pgm1/DE.tab","r").readlines() #Dokument wird in Programm ueberfuehrt
  33. eingabe = str(raw_input("Name der Ausgangsstadt?"))
  34. for line in Daten: #Zeilen werden nach uebereinstimmung untersucht
  35. if re.search(r"%s"%eingabe,line,re.IGNORECASE):
  36. ergebnisse.append(Daten[AV]) #aktuelle zeile wird bei treffer in ergebnisse ueberfuehrt
  37. AV = AV + 1
  38. if len(ergebnisse) != 0:
  39. break
  40. else:
  41. print "Zu diesem Ort haben wir keine Daten. Tut uns leid!"
  42. for AV in range(len(ergebnisse)): #Ausgabe einer list an Vorschlaegen, die spaeter nach hinzugefuegter Nummerierung angesteuert werden koennen
  43. print "%i. Vorschlag:%s"%(AV+1,ergebnisse[AV])
  44. bed = False
  45. while bed==False:
  46. stadt1 = raw_input("Bitte waehlen Sie aus der Liste eine Option!")
  47. try:
  48. int(stadt1)
  49. bed = True
  50. if int(stadt1) > AV+1:
  51. print "{0} ist keine Option!".format(int(stadt1))
  52. bed = False
  53. except ValueError:
  54. print "Ungueltige Eingabe!"
  55. s1 = int(stadt1)-1
  56. share.append(ergebnisse[s1].split("\t"))
  57. #Ausgabevariablen/Daten:
  58. global latitude
  59. global longitude
  60. global name
  61. global plz
  62. latitude = share [0] [4] #aus share-matrix werden gewuenschte werte ausgelesen
  63. latitude = float(latitude)
  64. longitude = share [0] [5]
  65. longitude = float(longitude)
  66. name = share [0] [3]
  67. plz = share [0] [7]
  68. def berechnung(a,b,c,d):
  69. a = math.radians(a)
  70. b = math.radians(b)
  71. c = math.radians(c)
  72. d = math.radians(d)
  73. r = 6371
  74. part1 = (math.sin((a-b)/2))**2
  75. part2 = (math.cos(a))*(math.cos(b))*(math.sin((c-d)/2))**2
  76. distance = 2 * r * math.asin(math.sqrt(part1+part2))
  77. O1 = list1[2]
  78. O2 = list2[2]
  79. P1 = list1[3]
  80. P2 = list2[3]
  81. print "{0}({1}) liegt ca. {4} Kilometer entfernt von {2}({3}).".format(O1,P1,O2,P2,distance)
  82. #MENU:
  83. while True:
  84. list1 = []
  85. list2 = []
  86. begruessung()
  87. Auswahl()
  88. if option == 1:
  89. abfrage()
  90. list1 = [latitude,longitude,name,plz]
  91. abfrage()
  92. list2 = [latitude,longitude,name,plz]
  93. berechnung(list1[0],list2[0],list1[1],list2[1])
  94. print "Ich starte das Programm!"
  95. elif option == 2:
  96. hilfe()
  97. elif option == 3:
  98. print "Auf Wiedersehen!"
  99. break
  100. #BERECHNUNG