Hallo alle zusammen!
Ich arbeit erst seit einigen Wochen mit Python und muss zugeben, dass ich auf diesem Gebiet leider nicht sonderlich talentiert bin.
Ich muss eine Hausaufgabe abgeben und habe bereits bei dem Ansatz schwierigkeiten. Ich beschreibe am besten mal das Problem:
Es geht um 3 Listen. In der ersten Liste sind ca. 60 Namen angegeben und in den anderen beiden sind zu den Personen die dazugehörigen Wohnorte als Koordinaten angegeben. Die 2. Liste mit dem Breitengrad und die 3. mit dem Längengrad.
Ich soll ein Programm verfassen, welches einen beliebigen Namen aus der 1. Liste aufnimmt und die dazugehörigen Koordinaten aus den beiden anderen Listen angibt.
Ich würde mich über ein paar Tipps freuen. Danke im vorraus!
Programmieren
-
BlackJack
@Jens_d_t: Beschreib doch mal was Du machen musst. Also was würdest *Du* machen wenn Du ein Blatt Papier mit diesen drei Listen hast und Dir jemand einen Namen sagt. Und dann schau Dir mal die Methoden auf Listen an was es da alles gibt und was die jeweils machen.
Die Daten sind für diese Anfrage übrigens sehr schlecht organisiert. Zusammengehörige Daten sollte man nicht in verschiedenen „parallelen” Datenstrukturen speichern. Hier würde sich für diese Anfrage ein Wörterbuch (`dict`) anbieten dass jeden Namen auf ein Tupel mit den zugehörigen Koordinaten abbildet.
Die Daten sind für diese Anfrage übrigens sehr schlecht organisiert. Zusammengehörige Daten sollte man nicht in verschiedenen „parallelen” Datenstrukturen speichern. Hier würde sich für diese Anfrage ein Wörterbuch (`dict`) anbieten dass jeden Namen auf ein Tupel mit den zugehörigen Koordinaten abbildet.
Wie BlackJack schon geschrieben hat ist ein dict besser dafür geignet
Aber hier mal ein kleines Beispiel mit 3 Listen.
Ist ungetestet
Aber hier mal ein kleines Beispiel mit 3 Listen.
Code: Alles auswählen
#!/usr/bin/env python
#
# -*- coding: <utf-8> -*-
name_list = ['Hans','Franz','Karl']
longitude_list = ['23','56','76']
latitude_list = ['58','123','67']
x = len(name_list)
y = 0
for name in name_list:
print("Name: %s Laengengrad: %s Breitengrad: %s" % (name, longitude_list[y], latitude_list[y]))
if y <= x:
y=+1
else:
break@Blackjack:
Wenn ich das auf "manuelle" Weise mit einem Blatt Papier lösen dürfte, würde mir das um einiges leichter fallen
Natürlich würde ich dann nachzählen an wievielter Stelle sich die Person in der Liste befindet und das mit den anderen beiden Listen abgleichen.
Methoden von Listen habe ich auch schon nachgeschlagen. Der Befehl Liste.index(Elelemt) erscheint mir ganz hilfreich. Nur sehe ich dann nur an wievielter Stelle sich der von mir eingegebene Name in der 1 Liste befindet. Da fehlt mir dann immer noch der Zusammenhang zu den anderen Listen und wie ich es ausdrücken kann, dass zum Beispiel der Name an Stelle 21 mit der passenden 21. Stelle in den anderen Listen in Verbindung gebracht und von dem Programm ausgegeben wird.
Den Vorschlag mit "dict" probiere ich mal aus. Dieser Befehl ist mir zwar noch fremd und wir haben damit noch nicht gearbeitet, aber vielleicht bekomme ich das ja hin. Danke für dein Kommentar!
@au_jui: Das Programm läuft und ist für mich schon hilfreich gewesen. Ich tüftel mal etwas herum. Danke
Wenn ich das auf "manuelle" Weise mit einem Blatt Papier lösen dürfte, würde mir das um einiges leichter fallen
Natürlich würde ich dann nachzählen an wievielter Stelle sich die Person in der Liste befindet und das mit den anderen beiden Listen abgleichen.
Methoden von Listen habe ich auch schon nachgeschlagen. Der Befehl Liste.index(Elelemt) erscheint mir ganz hilfreich. Nur sehe ich dann nur an wievielter Stelle sich der von mir eingegebene Name in der 1 Liste befindet. Da fehlt mir dann immer noch der Zusammenhang zu den anderen Listen und wie ich es ausdrücken kann, dass zum Beispiel der Name an Stelle 21 mit der passenden 21. Stelle in den anderen Listen in Verbindung gebracht und von dem Programm ausgegeben wird.
Den Vorschlag mit "dict" probiere ich mal aus. Dieser Befehl ist mir zwar noch fremd und wir haben damit noch nicht gearbeitet, aber vielleicht bekomme ich das ja hin. Danke für dein Kommentar!
@au_jui: Das Programm läuft und ist für mich schon hilfreich gewesen. Ich tüftel mal etwas herum. Danke
... und hässlich.av_jui hat geschrieben:Ist ungetestet
Der else-Zweig ist überflüssig und die Bezeichnernamen nichtssagend.
Hier sollte man entweder eine while-Schleife mit Erhöhung des Zählers wählen oder eine for-Schleife mit enumerate, aber keinen Mix aus beidem.
Dein Problem ist also, dass du im Kurs nicht mitbekommen hast wie auf einzelne Listenelemente zugegriffen wird.Jens_d_t hat geschrieben:Da fehlt mir dann immer noch der Zusammenhang zu den anderen Listen und wie ich es ausdrücken kann, dass zum Beispiel der Name an Stelle 21 mit der passenden 21. Stelle in den anderen Listen in Verbindung gebracht und von dem Programm ausgegeben wird.
Vielleicht hilft das Beispiel ja.
Code: Alles auswählen
>>> data = ['Eric', 'Graham', 'Terry']
>>> print(len(data))
3
>>> print(data[0])
Eric
>>> position = 2
>>> print(data[position])
Terry-
BlackJack
@Jens_d_t: Die zusammengehörenden Werte stehen doch in jeder Liste am selben Index. Wenn Du also den Index vom Namen kennst, dann hast Du doch auch den Index vom Längen- und vom Breitengrad in den anderen Listen. Du musst den Index doch nur an einen Namen binden und kannst den dann als Index in die anderen Listen verwenden.
Eine Schleife wie im Programm von av_jui brauchst Du nicht. Die Schleife um den richtigen Index zu finden hat ja schon jemand programmiert — in der `index()`-Methode. So eine Schleife mit einer Laufvariablen die dann nur verwendet wird um als Index in eine Liste verwendet zu werden ist auch kein besonders guter Stil in Python. Man kann in Python *direkt* über Elemente einer Liste iterieren, ohne den Umweg über einen Index. Und wenn man über mehrere Listen ”parallel” iterieren möchte, gibt es die `zip()` beziehungsweise die `itertools.izip()`-Funktion.
Eine Schleife wie im Programm von av_jui brauchst Du nicht. Die Schleife um den richtigen Index zu finden hat ja schon jemand programmiert — in der `index()`-Methode. So eine Schleife mit einer Laufvariablen die dann nur verwendet wird um als Index in eine Liste verwendet zu werden ist auch kein besonders guter Stil in Python. Man kann in Python *direkt* über Elemente einer Liste iterieren, ohne den Umweg über einen Index. Und wenn man über mehrere Listen ”parallel” iterieren möchte, gibt es die `zip()` beziehungsweise die `itertools.izip()`-Funktion.
Da ich selber Anfänger bin nehme ich das als konstruktive Kritik auf/me hat geschrieben:... und hässlich.av_jui hat geschrieben:Ist ungetestet
Der else-Zweig ist überflüssig und die Bezeichnernamen nichtssagend.
Hier sollte man entweder eine while-Schleife mit Erhöhung des Zählers wählen oder eine for-Schleife mit enumerate, aber keinen Mix aus beidem.
Name=["Daniel", "Danny", "Kim",]
Länge = [5.024561, 3.918812, 6.3383891]
Breite = [41.4525132, 21.888345, 31.6831191]
for N, L, B in zip(Name, Länge, Breite):
print(N,L,B)
Ich habe das mal mit dem zip() ausprobiert. Damit komme ich dem Ziel glaube ich schon näher.
Jetzt muss ich nur noch bewerkstelligen, dass ich einen speziellen Namen eingebe, z.B. Danny, und nur für diesen Namen die einzelne Koordinate rausbekomme. Mit dem zip() werden direkt alle Namen und Koordinaten ausgegeben.
Und genau dadran scheiter ich die ganze Zeit.
@/me: Das habe ich schon verstanden, aber ich glaube mit dieser Methode lässt sich das oben genannte Probelm nicht lösen, oder?!
Länge = [5.024561, 3.918812, 6.3383891]
Breite = [41.4525132, 21.888345, 31.6831191]
for N, L, B in zip(Name, Länge, Breite):
print(N,L,B)
Ich habe das mal mit dem zip() ausprobiert. Damit komme ich dem Ziel glaube ich schon näher.
Jetzt muss ich nur noch bewerkstelligen, dass ich einen speziellen Namen eingebe, z.B. Danny, und nur für diesen Namen die einzelne Koordinate rausbekomme. Mit dem zip() werden direkt alle Namen und Koordinaten ausgegeben.
Und genau dadran scheiter ich die ganze Zeit.
@/me: Das habe ich schon verstanden, aber ich glaube mit dieser Methode lässt sich das oben genannte Probelm nicht lösen, oder?!
Probier mal
Code: Alles auswählen
Name=["Daniel", "Danny", "Kim",]
Laenge = [5.024561, 3.918812, 6.3383891]
Breite = [41.4525132, 21.888345, 31.6831191]
i = Name.index('Danny')
print('Danny - Laenge: %s Breite: %s'% (Laenge[i],Breite[i]))
Sorry, ich habe mich wohl etwas missverständlich ausgedrückt.
Also das Programm soll mich auffordern eine Eingabe zu machen. Die Eingabe soll irgendein Name sein, welcher in der Liste vorkommt, z.B. Danny.
Das soll ungefähr so aussehen:
"Bitte geben Sie einen Namen an"
--->Danny
"Die Koordinaten von Danny betragen 3.918812, 21.88345"
Ich bekomme den Schritt mit dem vom Nuter einzugebenden Namen nicht hin...
Also das Programm soll mich auffordern eine Eingabe zu machen. Die Eingabe soll irgendein Name sein, welcher in der Liste vorkommt, z.B. Danny.
Das soll ungefähr so aussehen:
"Bitte geben Sie einen Namen an"
--->Danny
"Die Koordinaten von Danny betragen 3.918812, 21.88345"
Ich bekomme den Schritt mit dem vom Nuter einzugebenden Namen nicht hin...
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wenn es nur an der Eingabe haengt, schau dir mal `input` (bzw `raw_input` in Python 2) an.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Name=["Daniel", "Danny", "Kim",]
Laenge = [5.024561, 3.918812, 6.3383891]
Breite = [41.4525132, 21.888345, 31.6831191]
i = Name.index(input())
print( (Laenge,Breite))
@au_jui: Danke, ich habe dein Programm etwas verändert und jetzt ist es genau so wie es die Aufgabenstellung verlangt!
@cofi: Der Befehl input() ist mir bekannt, ich wusste nur nicht an welcher Stelle genau ich diesen Befehl zu platzieren habe. Durch ausprobieren habe ich jetzt anscheinend die richtige Stelle gefunden
Nach ca. 4 Stunden für diese Aufgabe habe ich heute nicht mehr damit gerechnet, dass ich fertig werde.
Ich danke euch
Laenge = [5.024561, 3.918812, 6.3383891]
Breite = [41.4525132, 21.888345, 31.6831191]
i = Name.index(input())
print( (Laenge,Breite))
@au_jui: Danke, ich habe dein Programm etwas verändert und jetzt ist es genau so wie es die Aufgabenstellung verlangt!
@cofi: Der Befehl input() ist mir bekannt, ich wusste nur nicht an welcher Stelle genau ich diesen Befehl zu platzieren habe. Durch ausprobieren habe ich jetzt anscheinend die richtige Stelle gefunden
Nach ca. 4 Stunden für diese Aufgabe habe ich heute nicht mehr damit gerechnet, dass ich fertig werde.
Ich danke euch
