drei beliebige Zahlen doppelt

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
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist komplizierter, als du es brauchst.

Schau dir die genannten Datenstrukturen an. Da lernst du mehr, auch wenn du mal - Schockschwerenot - 7 Zahlen zu vergleichen hast. Oder 8.
Florian Jochum
User
Beiträge: 8
Registriert: Montag 15. Januar 2018, 16:28

Habe ein bisschen wegen Sortieralgorythmen recharchiert, und habe direkt einen einfachen Algorythmus gefunden, den ich nun in das Spiel implementieren werde.
Hier ist er:

Code: Alles auswählen

c = 6
d = 5
e = 4
f = 4
g = 5
h = 6
# Sortieralgorithmus
def Sortieren(L):
    n = len(L)
    i = 0
    while i < n - 1:
        minpos = i
        m = i + 1
        while m < n:
            if L[m] < L[minpos]:
                minpos = m
            m = m + 1
        h = L[i]
        L[i] = L[minpos]
        L[minpos] = h
        i = i + 1
    return L


L = [c, d, e, f, g, h]
L = Sortieren(L)
if L == [1, 2, 3, 4, 5, 6]:
    print("Ja")
else:
    if L == [1,1,2,2,3,3] or [1,1,2,2,4,4] or [1,1,2,2,5,5] or [1,1,2,2,6,6] or [1,1,3,3,4,4] or [1,1,3,3,5,5] or [1,1,3,3,6,6] or [1,1,4,4,5,5] or [1,1,4,4,6,6]  or [1,1,5,5,6,6] or [2,2,3,3,4,4] or [2,2,3,3,5,5] or [2,2,3,3,6,6] or[2,2,4,4,5,5] or [2,2,4,4,6,6] or [2,2,5,5,6,6] or [3,3,4,4,5,5] or [3,3,4,4,5,5] or [3,3,4,4,6,6] or [3,3,5,5,6,6] or [4,4,5,5,6,6]:
        print("YEAH")
Ist zwar immer noch ziemlich aufwendig, aber nur für die überprüfung. Kann aber das komplette Spiel deutlich kürzen.
Danke für eure Hilfe :D :D
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

L.sort() haette es auch getan.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Florian Jochum: jetzt benutzt Du ja doch schon Listen. Die if-Abfrage ist falsch, da `or` nicht einem umgangssprachlichen "oder" entspricht. Es ist also nicht "L ist entweder A oder B oder C" sondern der Computer interpretiert es als "L ist A, logisch oder verknüpft mit B ist wahr", wobei bei Dir B eine nicht-leere Liste immer wahr ist, so dass sich der Ausdruck zu "immer wahr" verkürzen läßt. Was Du suchst, ist der `in`-Operator:

Code: Alles auswählen

L = sorted([c, d, e, f, g, h])
if L == [1, 2, 3, 4, 5, 6]:
    print("Ja")
elif L in ([1,1,2,2,3,3], [1,1,2,2,4,4], [1,1,2,2,5,5], [1,1,2,2,6,6], [1,1,3,3,4,4], [1,1,3,3,5,5], [1,1,3,3,6,6], [1,1,4,4,5,5], [1,1,4,4,6,6], [1,1,5,5,6,6], [2,2,3,3,4,4], [2,2,3,3,5,5], [2,2,3,3,6,6], [2,2,4,4,5,5], [2,2,4,4,6,6], [2,2,5,5,6,6], [3,3,4,4,5,5], [3,3,4,4,5,5], [3,3,4,4,6,6], [3,3,5,5,6,6], [4,4,5,5,6,6]):
    print("YEAH")
oder eben ganz kurz:

Code: Alles auswählen

L = collections.Counter([c, d, e, f, g, h])
if set(L.values()) == {2}:
    print("YEAH")
Antworten