Mein Python Code funktioniert nicht?
Guten Abend erst einmal,
ich habe versucht mittels Python ein Mau Mau spiel zu erstellen, aber wenn ich es ausprobieren will, zeigt mir das Programm mitten im code " invalid Syntax " an.
Kann einer von euch mal bitte drüber schauen und mir sagen, was fehlt?
Hier ist der Code (,was mir als Fehler angezeigt wurde habe ich markiert( es ist das deck.shuffel ())).
import random
class Card:
def __init__(self, value, suit):
self.value = value
self.suit = suit
def __repr__(self):
return f"{self.value} of {self.suit}"
class Deck:
suits = ["Hearts", "Diamonds", "Spades", "Clubs"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
def __init__(self):
self.cards = [Card(value, suit) for suit in self.suits for value in self.values]
def shuffle(self):
random.shuffle(self.cards)
def deal(self):
return self.cards.pop()
class Player:
def __init__(self, name):
self.name = name
self.hand = []
def draw(self, deck):
self.hand.append(deck.deal())
def play_card(self, card):
self.hand.remove(card)
class AIPlayer(Player):
def choose_card(self, top_card):
for card in self.hand:
if card.value == top_card.value or card.suit == top_card.suit:
return card
return self.hand[0]
def play_game():
deck = Deck()
... deck.shuffle()
...
... player = Player("Player")
... ai = AIPlayer("AI")
...
... for i in range(7):
... player.draw(deck)
... ai.draw(deck)
...
... top_card = deck.deal()
...
... while len(player.hand) > 0 and len(ai.hand) > 0:
... print(f"Top card: {top_card}")
... print(f"{player.name}'s hand: {player.hand}")
...
... chosen_card = player.play_card(player.hand[int(input("Choose a card to play (index): "))])
... if chosen_card.value == top_card.value or chosen_card.suit == top_card.suit:
... top_card = chosen_card
... else:
... player.draw(deck)
... print(f"{player.name} drew a card.")
...
... if len(ai.hand) > 0:
... chosen_card = ai.choose_card(top_card)
... print(f"{ai.name} played {chosen_card}.")
... if chosen_card.value == top_card.value or chosen_card.suit == top_card.suit:
... top_card = chosen_card
... else:
... ai.draw(deck)
... print(f"{ai.name} drew a card.")
...
... if len(player.hand) == 0:
... print(f"{player.name} wins!")
... else:
... print(f"{ai.name} wins!"
>>> [DEBUG ON]
>>> [DEBUG OFF]
3 Antworten
Grundlegende Anmerkungen:
- Codeformatierung nutzen
- Vollständige Fehlermeldung
Du solltest __str__ statt __repr__ nutzen, wenn Du eine textuelle Ausgabe de Objektes erzeugen möchtest, __repr__ dient im Kern eher der formalen Bezeichnung des Objektes:
class Card:
def __init__(self, value, suit):
self.value = value
self.suit = suit
def __repr__(self):
return f"Card ({self.value}, {self.suit})"
def __str__(self):
return f"{self.value} of {self.suit}"
Im Endeffekt soll die Ausgabe von repr geeignet sein das Objekt leicht zu reinstanziieren.
Python ist nicht gerade meine Lieblingsprogrammiersprache.
Aber verwende doch mal einen Pythonchecker.
Den hier habe ich gefunden: https://extendsclass.com/python-tester.html
Nutze sowas für andere Sprachen wie JavaScript oder der Auszeichnungssprache HTML.
An welcher Stelle kommt der Fehler? das wäre schon hilfreich
shuffle ist eventuell ein belegter Begriff, nenne es einfach mal um zum Testen
danke