Seite 1 von 1

Vertändnisproblem eines kurzen Programms

Verfasst: Freitag 16. Dezember 2011, 17:38
von Montypython
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

Re: Vertändnisproblem eines kurzen Programms

Verfasst: Freitag 16. Dezember 2011, 17:51
von 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))

Re: Vertändnisproblem eines kurzen Programms

Verfasst: Freitag 16. Dezember 2011, 18:36
von /me
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 ...

Re: Vertändnisproblem eines kurzen Programms

Verfasst: Freitag 16. Dezember 2011, 21:01
von nomnom
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

Re: Vertändnisproblem eines kurzen Programms

Verfasst: Samstag 17. Dezember 2011, 12:57
von Leonidas
/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.

Re: Vertändnisproblem eines kurzen Programms

Verfasst: Samstag 17. Dezember 2011, 15:36
von 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…