Seite 2 von 2
Verfasst: Donnerstag 26. März 2009, 18:42
von numerix
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 ...
Verfasst: Donnerstag 26. März 2009, 20:34
von bremer
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.
Verfasst: Donnerstag 26. März 2009, 22:13
von BlackJack
``exec``!?

Verfasst: Donnerstag 26. März 2009, 23:25
von Leonidas
BlackJack hat geschrieben:``exec``!?

Uhh, strange loop.

Verfasst: Donnerstag 26. März 2009, 23:38
von str1442
Verfasst: Freitag 27. März 2009, 09:17
von Darii
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.
Verfasst: Freitag 27. März 2009, 14:33
von HWK
Ich könnte noch eine Turbo-C-Variante mit grafischer Oberfläche für den Atari-ST von 1991 anbieten.
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
Verfasst: Freitag 27. März 2009, 15:19
von Leonidas
HWK hat geschrieben:Ich könnte noch eine Turbo-C-Variante mit grafischer Oberfläche für den Atari-ST von 1991 anbieten.
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.
Verfasst: Sonntag 12. April 2009, 17:29
von bremer
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.")
Verfasst: Sonntag 12. April 2009, 17:33
von DasIch
Ich hätte nicht gedacht dass soviele PHP Programmierer unter uns sind.
Verfasst: Montag 13. April 2009, 11:21
von lunar
@bremer
Nutz doch bitte ein Wörterbuch ... exec und eval sind hier völlig überflüssig.
Verfasst: Montag 13. April 2009, 14:05
von bremer
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.
Verfasst: Montag 13. April 2009, 14:40
von HWK
Zeile 13 sollte besser umgestellt werden:
Code: Alles auswählen
if heap not in heaps or not (0 < number <= heaps[heap]):
Und Zeile 6:
Und wo bleibt die KI?
MfG
HWK
Verfasst: Montag 13. April 2009, 15:00
von 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 ...
Verfasst: Montag 13. April 2009, 18:06
von bremer
Was ist gegen Multilineprints einzuwenden?
Verfasst: Montag 13. April 2009, 21:36
von lunar
Da sie zumindest optisch die Einrückung zerstören, verringern sie die Lesbarkeit des Codes. Für längere, allein stehende Texte sind sie die richtige Wahl, aber für einen einfachen Zeilenumbruch, den man mit anderen Mitteln ebenso einfach erreichen kann, würde ich sie nicht einsetzen.
Re: Nim-Spiel in PYTHON programmieren
Verfasst: Dienstag 5. November 2019, 00:19
von __blackjack__
Nur für den Fall das dieses Thema mal von jemanden gefunden wird der Nim implementieren möchte: `eval()` und `exec()` in bremer's letzten Beitrag geht ja mal gar nicht.
Die Ausnahmebehandlung könnte auch enger gefasst werden.
Code: Alles auswählen
#!/usr/bin/env python3
def main():
heap_names = ["a", "b", "c"]
heaps = dict(zip(heap_names, [3, 4, 5]))
switch = True
players = {True: "1", False: "2"}
print("Sizes of heaps:\nA B C")
while any(heaps.values()):
assert all(count >= 0 for count in heaps.values())
print(" ".join(str(heaps[name]) for name in heap_names))
print()
print(f"Turn of player {players[switch]}.")
try:
number = int(input("How many? "))
except ValueError:
print("Please enter a number!")
else:
heap_name = input("Heap a, b or c? ").lower()
if heap_name in heaps:
if 0 < number <= heaps[heap_name]:
heaps[heap_name] -= number
switch = not switch
else:
print("Please enter valid number!")
else:
print("Please enter a valid heap name!")
print(f"Player {players[not switch]} is the winner.")
if __name__ == "__main__":
main()