bestimmte Elemente einer Liste anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
geli56
User
Beiträge: 4
Registriert: Dienstag 23. Juni 2015, 16:35

Hallo Liebe Python-Experten!

ich habe im moment einen kurs auf der uni, in dem wir mit python programmieren.
das heißt ich bin relativ neu auf diesem gebiet und wollte euch fragen ob ihr mir bei zwei aufgaben
helfen könntet! hab schon alles mögliche probiert nur komm ich einfach nicht dahinter.
ich bin euch soo dankbar wenn ihr mir helfen könntet ;)
die aufgabe1 lautet folgendermaßen:

Erstellen sie eine Funktion ausgabe die einen Parameter erhält und keinen Rückgabewert liefert.
Parameter: liste die Liste die in der Funktion ausgegeben werden soll.
Die Funktion ausgabe soll einen Teil der Listen ausgeben. Es soll nicht jedes Element ausgegeben werden, sondern jedes 4. Element.
Überprüfen sie die Funktionsfähigkeit mit der gegebenen Liste.
Hinweis:
Denken sie daran die Indizierung der Listen ist 0 basiert.
Verwenden sie den Modulo Operator und Range.
folgende Liste ist gegeben: frequenz = [100, 110, 115, 125, 140, 130, 135, 145, 155, 160, 152, 158, 172, 180, 156, 196, 151]


ich weiß zwar dass man mit "range" eine schrittweite angeben kann aber nicht wie ich auf die liste dann zugreifen kann....


hier ist auch noch eine 2. aufgabe die relativ ähnlich ist und ich daher absolut nicht weiter komme:

Erstellen sie eine Funktion ausgabe_2 die einen Parameter erhält und keinen Rückgabewert liefert.
Parameter: liste die Liste die in der Funktion ausgegeben werden soll.
Die Funktion ausgabe_2 soll jedes Listenelement abwechselnd um einen gewissen Betrag erhöht bzw. erniedrigt ausgeben. Die Höhe der Veränderung ist im ersten Block oben ersichtlich.
Beispiel: Falls der Wert 3 ist soll folgendes ausgegeben werden: 103, 107, 118, 122, 143, 127, ...
Überprüfen sie die Funktionsfähigkeit durch den Aufruf der Funktion mit verschiedenen Parametern.
Hinweis: Der Inhalt der Liste soll (und muss) nicht verändert werden.



VIELEN VIELEN DANK SCHON MAL!!!!
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

geli56 hat geschrieben:ich weiß zwar dass man mit "range" eine schrittweite angeben kann aber nicht wie ich auf die liste dann zugreifen kann....
Welche Probleme hast du konkret mit der Dokumentation von range und wie weit kann das Tutorial zum Thema range die Probleme nicht lösen?
geli56
User
Beiträge: 4
Registriert: Dienstag 23. Juni 2015, 16:35

@BlackJack:
mir ist schon klar dass es nicht darum gehen soll meine hausübungen zu lösen,
es geht eher darum mir bei einem problem zu helfen, bei dem ich mich nicht hinaussehe trotz
allen möglichen tutorials etc.! wie gesagt ich bin kein programmier genie und bin etwas am verzweifeln
da die klausur auch positiv verlaufen sollte aber naja...
hatte halt gedacht es wäre jemand so nett im forum und würde mir helfen!

@/me:
danke für deine links, leider hab ich keine lösung damit gefunden :(
naja wenn ich eine liste hätte von z.B. range(11) also mit zahlen von 0-10,
dann wüsste ich dass ich einfach: print range(0,11,4)
eintippen brauche um die zahlen 0, 4 und 8 zu erhalten. da
es sich aber bei diesem beispiel um eine liste mit irgendwelchen zahlen handelt, weiß ich nicht so
recht wie man die funktion aufstellt; zumindest glaub ich dass ich eine for schleife benötige...
aber mich verwirrt die angabe mit dem modulo operator. der gibt doch nur den restwert bei einer division an!?
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@geli56: Du einfachste und schönste Lösung darfst Du nicht verwenden und auch Deine range-Lösung mit einer Schrittweite ist ja laut Aufgabenstellung nicht gewollt, sondern Du sollst über den Modula-Operatoren alle durch 4 teilbare Zahlen ermitteln. for-Schleifen sind auf jeden Fall schonmal ein guter Ansatz.
geli56
User
Beiträge: 4
Registriert: Dienstag 23. Juni 2015, 16:35

ja genau dass die lösung nicht so einfach ist war mir schon klar ;)
naja ich soll nicht jede zahl die durch 4 teilbar ist ermitteln sonder jedes 4. element der liste.
bin aber jetzt glaub ich darauf gekommen dass ich in die for schleife integrieren muss dass alle
indizes die sich durch vier teilen lassen angezeigt werden müssten...
hänge aber jetzt noch in der umsetzung ;)
BlackJack

@geli56: Lass Dir doch mal den Rest vom Teilen durch 4 von jeder Zahl von 1 bis sagen wir mal 20 ausgeben. Dann sollte Dir ein Muster auffallen.
geli56
User
Beiträge: 4
Registriert: Dienstag 23. Juni 2015, 16:35

dank für den tipp blackjack aber leider
trifft das muster nicht auf meine frequenz liste zu :(

bin mal bis hier hergekommen aber bin mir ganz unsicher ob ich überhaupt am richtigen weg bin:

def ausgabe(liste):
for element in liste:
if liste.index(element)%4==0:
print element
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, die `index` Methode hilft dir nicht. Mit folgender Liste siehst du mehr als die zwei gewuenschten 4er ausgegeben: [0, 1, 2, 3, 4, 4, 4, 4, 4, 4]

Es gibt eine `enumerate` Funktion: https://docs.python.org/3/library/funct ... #enumerate
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

... dann kommen irgendwelche seltsamen Programme raus, weil der Aufgabensteller in einer unpassenden Situation den Modulo-Operator anwenden will, statt einfach "liste[::4]" zuzulassen. Wahrscheinlich kennt er bei Aufgabe zwei weder zip noch cycle.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Da, ich keine Informatik- oder vergleichbare Ausbildung erhalten habe, kann ich nur mutmaßen, dass der Aufgabensteller versucht, die Lösungen so herbeizuführen, dass diese relativ einfach auch in andere (imperative) Programmiersprachen zu übertragen sind. Slices, zip und itertools.cycle sind schon sehr python-spezifisch. Und wenn ich dann an die Zeit zurück denke, zu der mir LCs noch kryptisch vorkamen ... ;)
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
BlackJack

@bwbg: Man könnte es auch anders herum vermuten: Die Kenntnisse sollen nicht einfach auf nicht so ausdrucksstarke Sprachen übertragen werden können, sondern viele Dozenten und Lehrer haben die Aufgaben mit solchen Sprachen entwickelt oder auch schon so übernommen, und übertragen die jetzt 1:1 auf Python. :-)
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Vielleicht sollte man eine "ideale" Python-Lösung für die Aufgabenstellung vorgeben. Zu 1 ist dies ja bereits geschehen (Sirius3). Zu 2 wäre dies auch nicht mehr, als eine Zeile in eine Funktion gepresst:

Code: Alles auswählen

[x + y for x, y in zip(frequenz, itertools.cycle([z, -z]))]
Die Aufgabe bestünde nun darin, zu erklären, was genau diese Zeile bewirkt - hiernach wäre man eine ganze Ecke weiter und wesentlich besser gerüstet für eine Prüfung. Meiner Meinung nach sollte man die listenverarbeitenden Sprachmittel (LC, ggf.: DC) und Funktionen (map, filter, itertools, ggf. all, any, ggf. ggf. reduce) auf jeden Fall behandeln. Listen sind nunmal ein elementarer Sprachbestandteil von Python.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Antworten