Verplante Anfängerin ;-)

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
Benutzeravatar
muc
User
Beiträge: 2
Registriert: Mittwoch 27. März 2013, 09:16
Wohnort: München

Guten Morgen,

ich habe vorher angefangen mir ein bisschen Python anzueignen (Naja ich versuch es gezwungenermaßen zumindestens mal ;)).
Ich soll es anhand einem Skript mit dazugehörigen Übungsaufgaben lernen, aber bei einer Aufgabe komme ich irgendwie einfach nicht weiter bzw. habe einfach keinen Plan wie ich das machen soll..

Die Aufgabe lautet:
Schreiben Sie eine Funktion menge(1), welche eine Liste bekommt und diese ohne Duplikate zurückgibt.
Beispiel umdrehen([1,2,4,2,3,1,4]) -> [1,2,4,3]

Ich weiß, dass das für euch vielleicht ein Witz ist, aber ich habe trotzdem keinen Plan :roll:

Wäre echt super wenn sich einer von euch mir annehmen könnte und mir da mal was schreiben könnte und besten Falls auch noch kurz erklären kann :)

Schon mal vielen Dank an euch!

Lg
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Die einfachste Lösung wäre es die Liste zu nehmen, ein Set daraus zu erstellen (zur Erinnerung: Sets sind sozusagen Mengen, sie beinhalten keine Duplikate) und dieses Set zu einer Liste zu machen. Alternativ erstellst du eine neue Liste, gehst durch die alte und fügst der neuen Elemente der alten hinzu falls sie nicht schon in der neuen vorhanden sind (dafür ist eine Bedingung mit if und der in-Operator hilfreich).

Beide Ansätze sollten einfach umsetzbar sein. Ich vermute die Musterlösung wäre die zweite Variante.
BlackJack

Ich würde noch eine Mischform vorschlagen: Sich in einem `set()` laufend merken welche Elemente man schon gesehen hat und deshalb dem Ergebnis nicht mehr hinzufügen. Das hat dann nicht das ungünstige Laufzeitverhalten als wenn man immer linear in der Ergebnisliste sucht ob ein Element schon drin ist.

Ansonsten Beschreibe doch mal was Du Schritt für Schritt tun würdest/müsstest und setze das in so weit Du kommst in Quelltext um.
Benutzeravatar
muc
User
Beiträge: 2
Registriert: Mittwoch 27. März 2013, 09:16
Wohnort: München

Danke für eure schnellen Antworten!

Leider ist noch nichts mit sets in meinem Skript vorgekommen, es ist für mich als wie ihr chinesisch sprecht ;)
Und ich habe auch leider irgendwie keine Ahnung wie ich überhaupt anfangen soll..

Danke für eure Hilfe, ich versuch mal meinem Chef zu erklären, dass Python nichts für mich ist :roll:
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

muc hat geschrieben:Leider ist noch nichts mit sets in meinem Skript vorgekommen, es ist für mich als wie ihr chinesisch sprecht ;)
Man muss ja auch kein set verwenden. Die von webspider beschriebene Alternative arbeitet anders.

Die Frage ist jetzt eher, welche Sprachelemente du kennst (und verwenden darfst).

Schleifen wird es ja sicher schon gegeben haben.

Code: Alles auswählen

data = [1,2,4,2,3,1,4]
for element in data:
    print element
Bedingungen auch.

Code: Alles auswählen

if 21 * 2 == 42:
    print 'Antwort!'
Das Prüfen auf das Vorhandensein von Werten in einer Liste sollte doch auch gehen, oder?

Code: Alles auswählen

if 23 in [1, 2, 4, 8, 16, 32]:
    print 'Something went wrong'

Damit hast du nahezu alles, was du für dein Programm brauchst.
muc hat geschrieben:Danke für eure Hilfe, ich versuch mal meinem Chef zu erklären, dass Python nichts für mich ist :roll:
Du bewegst dich hier auf Grundlagenniveau. Ich meine das jetzt überhaupt nicht böse, aber wenn du das Problem hier nicht lösen kannst, dann ist nicht Python nichts für dich, dann ist Programmierung egal in welcher Sprache nichts für dich.
BlackJack

@muc: Dann lass `set()` weg und arbeite wie webspider im zweiten Ansatz beschrieben hat, nur mit Listen. Wo liegen denn konkret die Probleme? Weist Du was eine Liste ist? Eine Funktion? Argumente und Rückgabewert einer Funktion? Eine ``for``-Schleife? Bedingte Ausführung von Code mittels ``if``? Kennst Du die `append()`-Methode auf Listen? Den ``in``-Operator auf Listen?

Beschreibe doch mal in Worten was Schritt für Schritt passieren muss um das gewünschte Ergebnis zu erhalten. Wie würdest Du jemandem erklären der ziemlich beschränkt ist, was er machen muss wenn er einen Zettel mit der Zahlenfolge 1,2,4,2,3,1,4 hat, und einen weiteren Zettel erstellen soll wo die Zahlen ohne Duplikate drauf stehen‽
Faule Socke
User
Beiträge: 11
Registriert: Mittwoch 27. März 2013, 10:57

Ich mache zwar eigentlich nicht die Hausaufgaben von anderen Studenten, aber...

Die Asskick-Lösung sieht so aus:

Code: Alles auswählen

menge = set
Wenn du deine Hausaufgaben etwas gewissenhafter angehen willst (obwohl obiger Ansatz korrekt und Fehlerfrei ist), darfst du auch das hier machen:

Code: Alles auswählen

def menge(iterable):
    return list(set(iterable))
So wird tatsächlich eine Liste statt eines Sets zurückgegeben. In der Aufgabenstellung wird allerdings vermutlich gefordert werden, dass ihr selbst einen unique-Algorithmus entwickelt. Wie das geht habt ihr sicher in der Vorlesung gelernt. Ist aber nicht so schwer, Grundlegender Ansatz ist:
Liste Elementweise durchgehen, wenn Element bereits in Ergebnisliste (if element in list), mit nächstem fortfahren (continue), ansonsten hinzufügen (list.append)

Da ich wie gesagt nicht deine Hausaufgaben mache, darfst du dir über die Implementierung mal selbst Gedanken machen :)

Gruß Socke

P.S. Programmieren lernen ist nie einfach und erfordert harte Arbeit und durchhaltevermögen. Aber es lohnt sich. Es hat mich in meiner Laufbahn bisher sowohl aus sozialer, als auch aus finanzieller Sicht sehr viel weitergebracht.

// Edit: Liste sortieren war nicht korrekt, ich sollte genauer lesen... (gibt es kein strike-tag?)
Antworten