Seite 1 von 1

Programmieren

Verfasst: Montag 11. November 2013, 21:24
von Jens_d_t
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!

Re: Programmieren

Verfasst: Montag 11. November 2013, 21:32
von 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.

Re: Programmieren

Verfasst: Montag 11. November 2013, 21:42
von av_jui
Wie BlackJack schon geschrieben hat ist ein dict besser dafür geignet

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
Ist ungetestet

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:10
von Jens_d_t
@Blackjack:
Wenn ich das auf "manuelle" Weise mit einem Blatt Papier lösen dürfte, würde mir das um einiges leichter fallen :D
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

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:11
von /me
av_jui hat geschrieben:Ist ungetestet
... und hässlich.

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.

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:14
von /me
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.
Dein Problem ist also, dass du im Kurs nicht mitbekommen hast wie auf einzelne Listenelemente zugegriffen 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

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:18
von 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.

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:27
von av_jui
/me hat geschrieben:
av_jui hat geschrieben:Ist ungetestet
... und hässlich.

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.
Da ich selber Anfänger bin nehme ich das als konstruktive Kritik auf :wink:

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:38
von Jens_d_t
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?!

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:44
von av_jui
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]))

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:51
von Jens_d_t
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...

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:53
von cofi
Wenn es nur an der Eingabe haengt, schau dir mal `input` (bzw `raw_input` in Python 2) an.

Re: Programmieren

Verfasst: Montag 11. November 2013, 22:59
von Jens_d_t
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 :D

Nach ca. 4 Stunden für diese Aufgabe habe ich heute nicht mehr damit gerechnet, dass ich fertig werde.
Ich danke euch