Seite 1 von 1

drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 16:45
von Florian Jochum
Hey Leute nachdem ich mich im Forum angemeldet habe, habe ich nun auch direkt meine erste Frage:
Ich programmiere grade ein Wüefelspiel, und möchte dort überprüfen, ob 3 beliebige Zahlen zwischen 1 und 6 doppelt vorkommen. Als Variablen habe ich die Buchstaben c, d, e, f, g, und h vorgesehen. Als möglichkeiten habe ich if und while zur verfügung. Über eine Rückmeldung eurerseits würde ich mich freuen.

P.S.: Falls das Thema im falschen Bereich ist, bitte ich um Verzeihung, und es möge dann doch verschoben werden

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 17:12
von __deets__
Na dann zeig doch mal was du hast. Hausaufgabenhilfe geben wir, fertige Loesungen werden hier eher ungerne verteilt.

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 17:56
von narpfel
Moin,

eine Möglichkeit, wie man das Problem einfach lösen könnte, wäre, die richtige Datenstruktur für das Problem zu wählen. Sechs verschiedene Variablen sind im Gegensatz zu einer einzelnen, die alle sechs Werte umfasst und bestenfalls noch sinnvolle Operationen auf den Werten bereitstellt, doch schon recht unhandlich.

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 19:48
von Florian Jochum

Code: Alles auswählen

c = 1
d = 1
e = 2
f = 2
g = 3
h = 3

if c == d or c == e or c == f or c == g or c == h and d == e or d == f or d == g or d == h and e == f or e == g or e == h:
    j = 1000
else:
    j = 0

print(j)
Das ist das was ich habe. Prinzipiell müste es funktionieren, ändere ich jedoch eine 3 in eine 2, so gibt er trotzdem die 1000 aus, und nicht die 0, welche ausgegeben werden sollen.
Es soll einfach nur überprüfen, ob 3 beliebige zahlen doppelt vorkommen. Mehr muss es nicht können.

P.S.: Ist nur der Auszug. Sonst wären es ca. 120 Zeilen Quellcode

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 19:55
von Sirius3
@Florian Jochum: ok, so langsam verstehe ich die Frage. Du hast also nicht drei beliebige Zahlen, sondern sechs und es sollen 3 Paare darin vorkommen. Auch wenn die Bedingung nicht stimmt, merkst Du bestimmt schon selbst, dass das mit sechs Variablen und alles in einer Zeile ziemlich lang wird. Einfacher wird es, wenn Du das Problem in einfache Teilproblem aufteilst, z.B. in einer Liste mit sechs Zahlen jeweils die Häufigkeit jeder Ziffer zählen um dann zu prüfen, ob jede Ziffer genau 0 oder 2 mal vorkommt.

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 19:57
von Florian Jochum
narpfel hat geschrieben:Moin,

eine Möglichkeit, wie man das Problem einfach lösen könnte, wäre, die richtige Datenstruktur für das Problem zu wählen. Sechs verschiedene Variablen sind im Gegensatz zu einer einzelnen, die alle sechs Werte umfasst und bestenfalls noch sinnvolle Operationen auf den Werten bereitstellt, doch schon recht unhandlich.
Ist halt ein Würfelspiel mit 6 Würfeln

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 19:59
von Florian Jochum
Sirius3 hat geschrieben:@Florian Jochum: ok, so langsam verstehe ich die Frage. Du hast also nicht drei beliebige Zahlen, sondern sechs und es sollen 3 Paare darin vorkommen. Auch wenn die Bedingung nicht stimmt, merkst Du bestimmt schon selbst, dass das mit sechs Variablen und alles in einer Zeile ziemlich lang wird. Einfacher wird es, wenn Du das Problem in einfache Teilproblem aufteilst, z.B. in einer Liste mit sechs Zahlen jeweils die Häufigkeit jeder Ziffer zählen um dann zu prüfen, ob jede Ziffer genau 0 oder 2 mal vorkommt.
Problem ist, dass wir in der Schule bis jetzt nur if und while hatten. :cry:

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 20:15
von Sirius3
@Florian Jochum: ich wüßte nicht, wie man das nur mit `if` programmieren sollte. Das wären dann 120 if-Bedingungen, wenn ich mich nicht verrechnet habe.

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 20:20
von Florian Jochum
Sirius3 hat geschrieben:@Florian Jochum: ich wüßte nicht, wie man das nur mit `if` programmieren sollte. Das wären dann 120 if-Bedingungen, wenn ich mich nicht verrechnet habe.
Heilige Sch.... Wie würdest du es sonst machen? Vielleicht kannst du es mir erklären, oder ein Tut empfehlen, wo das gut erklärt wird, so das ich das dann für mein Spiel anwenden kann.
:K :K :K

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 21:14
von __deets__
Das hier wäre eine geeignete Datenstruktur: https://docs.python.org/2/library/colle ... er-objects

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 22:00
von DasIch
Das es 120 if-Bedingungen sind spielt keine Rolle mehr wenn man einfach den Code generiert ;)

Re: drei beliebige Zahlen doppelt

Verfasst: Montag 15. Januar 2018, 22:04
von EyDu
Sirius3 hat geschrieben:@Florian Jochum: ich wüßte nicht, wie man das nur mit `if` programmieren sollte. Das wären dann 120 if-Bedingungen, wenn ich mich nicht verrechnet habe.
Geht deutlich kürzer. Zum Beispiel die Variablen vorher mit einem ausgerolltem Bubblesort sortieren. Dann lässt sich anschließend leicht auf Paare testen. Sind dann 15 Kleiner-Vergleiche zum Sortieren, drei Tests auf Gleichheit für Paare und drei Tests auf Ungleichheit, falls alle Paare unterschiedlich sein sollen. Also "überschaubare" 21 ifs.

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 03:06
von pillmuncher
@Florian Jochum: hattet ihr schon Listen und Dictionaries/Wörterbücher?

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 14:44
von Florian Jochum
pillmuncher hat geschrieben:@Florian Jochum: hattet ihr schon Listen und Dictionaries/Wörterbücher?
Nein, hatten wir noch nicht

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 14:47
von Florian Jochum
EyDu hat geschrieben:
Sirius3 hat geschrieben:@Florian Jochum: ich wüßte nicht, wie man das nur mit `if` programmieren sollte. Das wären dann 120 if-Bedingungen, wenn ich mich nicht verrechnet habe.
Geht deutlich kürzer. Zum Beispiel die Variablen vorher mit einem ausgerolltem Bubblesort sortieren. Dann lässt sich anschließend leicht auf Paare testen. Sind dann 15 Kleiner-Vergleiche zum Sortieren, drei Tests auf Gleichheit für Paare und drei Tests auf Ungleichheit, falls alle Paare unterschiedlich sein sollen. Also "überschaubare" 21 ifs.
Was sind diese ausgerollten Bubblesorts?
Und wie funktioieren die?

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 15:29
von __deets__
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.

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 15:47
von Florian Jochum
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

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 15:49
von __deets__
L.sort() haette es auch getan.

Re: drei beliebige Zahlen doppelt

Verfasst: Dienstag 16. Januar 2018, 16:13
von Sirius3
@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")