Nim-Spiel in PYTHON programmieren

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

basler20 hat geschrieben:Danke für deine Antwort
Ich bin's gerade am Programmieren, aber mit Java :-), man braucht nur eine Klasse und eine TestKlasse..., in Python weiss ich nicht....
Du hast mein Posting wohl nicht wirklich verstanden ...

@lunar: Ich hatte das auch schon entdeckt und im ubuntu-forum hier her verlinkt ;-)
BlackJack

Im Mikrokontroller-Forum hat er auch gefragt:

http://www.mikrocontroller.net/topic/133030
http://www.mikrocontroller.net/topic/29458#1207366

Und ich frage mich, ob er nun Leo oder Patrick heisst, wie seine Java-Lösung aussieht, und ob Fachhochschullehrer in der Schweiz nicht auch ab und zu bei Hausaufgaben mal eine Suchmaschine bemühen um Plagiate zu finden. ;-)
basler20
User
Beiträge: 6
Registriert: Donnerstag 26. März 2009, 13:08

Vielen Danke für Ihre Antwort.

Es handelt sich nicht um "Plagiate", eher aber um Ideen-Sammeln, um das wissen zu vertiefen, vorallem wenn man das Spiel nicht kennt!!.

Plagiate für mich ist wenn ich etwas deklariere, das jemand geschrieben habt, als meine!!

viele Grüsse
lunar

Oha, das müsste man mal an der Uni ausprobieren: "Nein, Herr Professor, ich habe nicht abgeschrieben, nein, vielmehr habe ich Ideen gesammelt" ... ;)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

basler20 hat geschrieben:Plagiate für mich ist wenn ich etwas deklariere, das jemand geschrieben habt, als meine!!
Wie dem auch sei: Angesichts deines Postens quer durch verschiedene Foren scheint die Not ja groß zu sein.

Ein Weg, der dir hier sicher Hilfe bescheren würde, wäre:
Poste das, was du hast und erläutere, an welcher Stelle du aus welchem Grund nicht weiter kommst.

Wenn ich deine Postings richtig verstehe, ist die Java-Lösung, von der du sprichst, ja nicht deine, sondern Teil deiner "Ideensammlung". Und was die "nur zwei Klassen" der Java-Lösung angeht: In Python schaffst du es sogar mit Null Klassen! :)

Und dein Hinweis aus dem (vor)letzten Posting, dass du das Spiel nicht kennst, gibt mir Rätsel auf. Wenn es meine Hausaufgabe wäre, würde ich doch damit anfangen, das Spiel zunächst zu verstehen. Wikipedia ist da sehr hilfreich und beschreibt ganz ausführlich die Gewinnstrategien.

Und danach Programmieren ...
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Ich hab's eben programmiert. Ist 22 Zeilen lang.

Hier ein kurzer Ausschnitt als Demo:

Code: Alles auswählen

        else:
            exec(heap + "-=" + str(number))
            if player:
                player = 0
            else:
                player = 1
Der englische Wikipediaartikel ist übrigens weitaus besser.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:``exec``!? :shock:
Uhh, strange loop. :evil:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Code: Alles auswählen

player = not player
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

basler20 hat geschrieben:Ich bin's gerade am Programmieren, aber mit Java :-), man braucht nur eine Klasse und eine TestKlasse...,
Dann hast du aber Java falsch verstanden. In Java geht es doch darum, alles mit der größtmöglichen Anzahl an Klassen zu realisieren.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Ich könnte noch eine Turbo-C-Variante mit grafischer Oberfläche für den Atari-ST von 1991 anbieten. :lol:
Ach, ich sehe gerade: 1996 habe ich es auch für den PC mit Visual-C umgesetzt. Aber, ob 18 KB Source-Code erwünscht sind?
MfG
HWK
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

HWK hat geschrieben:Ich könnte noch eine Turbo-C-Variante mit grafischer Oberfläche für den Atari-ST von 1991 anbieten. :lol:
Ach, ich sehe gerade: 1996 habe ich es auch für den PC mit Visual-C umgesetzt. Aber, ob 18 KB Source-Code erwünscht sind?
Logisch (schließlich will der OP ja möglichst viele Lösungen zusammenkopie... ahem... inspirieren), ich biete eine nicht sonderlich elegante Scheme-Lösung (mit null Klassen). Funktioniert immerhin ausreichend gut, als das ich im Spiel gegen meine Schwester verliere.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Jetzt kann ich auch mal den Code posten.

Code: Alles auswählen

a, b, c, = 3, 4, 5
switch = True
players = {True: "1", False: "2"}
print("""Sizes of heaps:
A B C""")
while any((a, b, c)):
    print(a, b, c)
    print()
    print("Turn of player", players[switch] + ".")
    try:
        number = int(input("How many? "))
        heap = (input("Heap a, b or c? ")).lower()
        if not (0 < number <= eval(heap)) or (heap != "a" and heap != "b" and heap != "c"):
            raise ValueError
        else:
            exec(heap + "-=" + str(number))
            switch = not switch
    except (SyntaxError, ValueError):
        print("Not possible.")
switch = not switch
print("Player", players[switch], "is the winner.")
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ich hätte nicht gedacht dass soviele PHP Programmierer unter uns sind.
lunar

@bremer
Nutz doch bitte ein Wörterbuch ... exec und eval sind hier völlig überflüssig.
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Fixed.

Code: Alles auswählen

switch = True
players = {True: "1", False: "2"}
heaps = {"a": 3, "b": 4, "c": 5}
print("""Sizes of heaps:
A B C""")
while any((heaps["a"], heaps["b"], heaps["c"])):
    print(heaps["a"], heaps["b"], heaps["c"])
    print()
    print("Turn of player", players[switch] + ".")
    try:
        number = int(input("How many? "))
        heap = (input("Heap a, b or c? ")).lower()
        if not (0 < number <= heaps[heap]) or heap not in heaps:
            raise ValueError
        else:
            heaps[heap] -= number
            switch = not switch
    except (KeyError, ValueError):
        print("Not possible.")
switch = not switch
print("Player", players[switch], "is the winner.")

Aber antwortet lieber mal auf mein Posting im PyQT-Forum.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Zeile 13 sollte besser umgestellt werden:

Code: Alles auswählen

if heap not in heaps or not (0 < number <= heaps[heap]):
Und Zeile 6:

Code: Alles auswählen

while any(heaps.itervalues()):
Und wo bleibt die KI?
MfG
HWK
lunar

Es sollte wohl "raise ValueError()" heißen. Die ganze Ausnahmesache ist sowieso überkompliziert.

Anstelle die Bedingung umzustellen, kann man den zweiten Teil auch einfach weglassen, da der KeyError eh behandelt wird. Allerdings kann man auch einfach auf die Ausnahmebehandlung verzichten, wenn man die Bedingung intelligent stellt:

Code: Alles auswählen

switch = True
players = {True: "1", False: "2"}
heaps = {"a": 3, "b": 4, "c": 5}
print("Sizes of heaps:", "A B C", sep="\n")
while any(heaps.values()):
    print(*heaps.values())
    print()
    print("Turn of player", players[switch] + ".")
    number = int(input("How many? "))
    heap = input("Heap a, b or c? ").lower()
    if heap in heaps and 0 < number <= heaps[heap]:
        heaps[heap] -= number
        switch = not switch
    else:
        print("Not possible.")
switch = not switch
print("Player", players[switch], "is the winner.")
Das Fehlen "from __future__ import print_function" sowie die Verwendung von "input()" mit Typcast legt nahe, dass das 3k-Code ist, daher muss es "heaps.values()" heißen ...
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Was ist gegen Multilineprints einzuwenden?
Antworten