Vertändnisproblem eines kurzen Programms

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
Montypython
User
Beiträge: 1
Registriert: Freitag 16. Dezember 2011, 17:22

Hallo,

ich verstehe die Vorgehensweise des Programms nicht. Was mir klar ist, dass n als Zähler fungiert und i und j jeweils "Hochzählvariablen" sind, wobei i sich der Länge der Liste und j i annähert.

Code: Alles auswählen

def Verschiedene(L):
    n=1
    i = 1
    while i<len(L):
        j = 0
        while j<i:
            if L[j]==L[i]: break
            j = j+1
        if j == i:
            n = n+1
        i = i+1
    return n
L1 = ["Anton","Bert","Conny","Det","Emil"]
L2 = ["Anton","Det", "Conny","Det","Det" ]
L3 = ["Det", "Det", "Det", "Det","Det" ]
print L1,"enthaelt",Verschiedene(L1),"verschiedene"
print L2,"enthaelt",Verschiedene(L2),"verschiedene"
print L3,"enthaelt",Verschiedene(L3),"verschiedene"
Mein Ansatz war:

Code: Alles auswählen

def Verschiedene(L):
    n=0
    i = 0
    while i<len(L):
        m=1
        while m<len(L):
            if L[i]==L[m]:
                n=n+1
            m=m+1
        i=i+1
    return n
1. Ist dass das richtige Forum?
2. Sind Probleme dieser Art zu banal um sie zu posten?
3. Wenn nein, würde es mich freuen, wenn mir jemand die Lösung näher bringt.

Gruss
BlackJack

@Montypython: Ad 1) Es ist das richtige Forum.

Ad 2) Im Grunde ja. Du musst Dir das selber erklären können, das kann kein anderer für Dich machen, denn bei so trivialem Code kann man eigentlich nur erzählen was da sowieso schon als Quelltext steht. Geh die Beispiele doch mal Schritt für Schritt durch. Also spiel selber Python-Interpreter und exerziere das Programm auf dem Papier mit einem Stift mal durch. Welcher Name zu welchem Zeitpunkt an welchen Wert gebunden ist. Wann `n` erhöht wird, usw.

Ich weiss das es um das Verständnis von einem Algorithmus gehen soll, aber ich möchte trotzdem Anmerken, dass man Quelltext in dieser Art in Python eigentlich nicht schreibt. Das konkrete Problem würde man eher so lösen:

Code: Alles auswählen

def count_different(items):
    return len(set(items))
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BlackJack hat geschrieben:Ich weiss das es um das Verständnis von einem Algorithmus gehen soll, aber ich möchte trotzdem Anmerken, dass man Quelltext in dieser Art in Python eigentlich nicht schreibt.
Mal abgesehen davon sollte man zumindest wenigstens einigermaßen deskriptive Namen wählen.

Code: Alles auswählen

def verschiedene(sequence):
    counter = 1
    outer_index = 1
    while outer_index < len(sequence):
        inner_index = 0
        while inner_index < outer_index:
            if sequence[inner_index] == sequence[outer_index]:
                break
            inner_index += 1
        if inner_index == outer_index:
            counter += 1
        outer_index += 1
    return counter
Das Problem mit der leeren Liste wäre übrigens auch noch zu lösen ...
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Das Problem könnte man IMHO schöner mit for-Schleifen lösen.

Code: Alles auswählen

def count_different(items):
    counter = 1
    for i in range(len(items)):
        for j in range(i):
            if items[j] == items[i]:
                break

        if j == i:
            counter += 1

    return counter
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

/me hat geschrieben:Mal abgesehen davon sollte man zumindest wenigstens einigermaßen deskriptive Namen wählen.
Aber das ist generell ein Problem aller Algorithmen-Doku. Wenn ich mich richtig erinnere hat sogar der "Cormen" (CLRS), wie ich finde eines der besten Bücher die man in seiner Informatikerkarriere zu Gesicht bekommt so blödsinnige Variablennamen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

@/me: "i" und "j" sind doch völlig gewöhnliche Namen für Indexvariablen, und "n" als Zählvariable ist jetzt auch nicht exotisch. Ich finde "i", "j" und "n" sogar schöner, weil die kürzeren Namen den Algorithmus klarer machen. Man muss ganz einfach nicht so viel lesen…
Antworten