Seite 1 von 1

SyntaxError: invalid syntax

Verfasst: Donnerstag 31. Januar 2019, 17:38
von c3lsi0r
Hallo,

ich bin neu hier und, ich grüße erst einmal alle in diesem Forum und ich möchte mich für die Aufnahme bedanken,
ich finde euer Forum einfach Klasse.

Ich bin Programmieranfänger und bin aber fleißig dabei mir Python beizubringen.

Nun zum Thema: Ich habe ein Programm geschrieben "BlackJack" und erhalte jetzt bei der Ausführung Syntax Fehler, einige Fehler konnte ich schon beseitigen,
aber bei diesen einen Fehler komme ich leider nicht weiter,
deshalb hoffe ich, dass mir hier jemand helfen kann und ich daraus was lernen kann.

Quellcode:

Code: Alles auswählen

import random


def randomCard():
    
    randomCard = random.randint(1,14)
    
    if(randomCard == 11):
        randomCard = "B"
    elif(randomCard == 12):
        randomCard = "D"
    elif(randomCard == 13):
        randomCard = "K"
    elif(randomCard == 14):
        randomCard = "A"
        
    return randomCard

def calcScore(hand):
    total = 0
    
    for card in hand:
        if card == "B" or card == "D" or card == "K":
            total +=10
        elif card == "A":
            if total >=11:
                total +=1
            else:
                total =+11
        else:
        
            total += card
    
    return total

def winner(hand1, hand2):
    score1 = calcScore(hand1)
    
    score2 = calcScore(hand2)
    
    if score > 21: 
        return "hand2"
    if score2 > 21:
        return "hand2"
    
    if score1 > score2:
        return "hand1"
    else:
        return "hand2"

def hit(hand):
    hand.appand(randomCard())
    
    return hand

def aiStrategy(hand):
    strategy = ""
    if(calcScore(hand) > 15):
        strategy = "Stay"
    else:
        strategy = "Hit"
        
    return strategy

def bust():

    if calcScore(hand) > 21:
        return 1
    else:
        return 0
    
def deal():
    
    hand = [randomCard(), randomCard()]
    
    return hand

def play():
    
    print("WILLKOMMEN BEI PYTHON BLACKJACK")
    
    computerHand = deal()
    playerHand = deal()
    
    print("-------- STARTE SPIEL --------")
    print("Computer Hand: " + str(computerHand[0]))
    print("Spieler Hand: " + str(playerHand))
    print("\n-------Aktuelle Punkzahl-------")
    
    if(calcScore(playerHand) == 21):
        print("21! Du hast gewonnen")
        
        # noch einmal spielen?
        playAgain()
        
        
    elif(calcScore(computerHand)==21):
        print("21! Der Computer hat gewonnen!")
        
        #noch einmal spielen?
        playAgain()
        
    print(calcScore(playerHand())
    
    hitcard = input("Willst du noch eine Karte? (J/N)")  
    
    while(hitcard == "J" or hitcard == "j"):
        hit(playerHand)
        
        print("\n------- Neue Punktzahl-------")
        print(playerHand)
        print(calcScore(playerHand))
        
        if(len)(playerhand == 5 and calcScore(playerhand) < 21):
            print("5 Karten und unter 21: DEWINNST")
            
            #noch einmal sielen?
            playAgain()
            
            
        elif(bust(playerHand) == 1):
            
            print("Bust. Verloren!")
            
            #noch einmal spielen?
            playAgain()
            
            
        else:
            
            hitcard = input("Willst du noch eine Karte? (J/N)")
            
    print("\n-------Computer\'s Zug-------")
    
    if(aiStrategy(computerHand) == "Hit"):
       hit(computerHand)
       print(computerHand)
     
    else:
       
       print(computerHand)
       print("Computer ist fertig")
       
       print("\n-------SIEGER ERMITTELN-------")
       
       print("COMPUTER : " + str(calcScore(computerhand)))
       print("SpIELER: " + str(calcScore(playerhand)))
       
       
       if(winner(computerhand, playerHand) == "hand1" and bust(computerHand)==0):
           
           print("Computer hat gewonnen")
       
       elif(winner(computerhand, playerHand) == "hand2" and bust(playerHand)==1):
       
           print("Computer hat gewonnen")
       
       elif(winner(computerhand, playerHand) == "hand1" and bust(computerHand)==1):
       
           print("Spieler hat gewonnen")
       
       elif(winner(computerhand, playerHand) == "hand2" and bust(cplayerHand)==0):
       
           print("Spieler hat gewonnen")
       
       
       
       playAgain()
       
def playAgain():
       again = input("Willst du erneut Spielen? (J/N)")
       
       if(again == "J" or again == "j"):
            playAgain()
       
       else:
           print("\n\n-------Vielen Dank für\n's Spielen-------")
           exit()
            

            
if __name__ == "__main__":
    play()
Fehler ausgabe:

Code: Alles auswählen

  File "BlackJack.py", line 105
    hitcard = input("Willst du noch eine Karte? (J/N)")  
          ^
SyntaxError: invalid syntax
Ich freue mich auf jegliche Hilfe und Verbesserungsvorschläge sowie konstruktive Kritik ist ebenfalls Willkommen.
viele Grüße
Celsior

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 31. Januar 2019, 18:06
von __blackjack__
@c3lsi0r: Das ist so lang und enthält einiges an Fehlern, das ich erstmal empfehlen würde die Art wie Du Programme schreibst zu ändern. Software entwickelt man normalerweise Schritt für Schritt und testet dabei auch jeden Schritt bevor man den nächsten implementiert. Man schreibt keine 180 Zeilen runter und stellt *dann* erst fest, dass da Fehler drin sind.

Namensschreibweise in Python ist klein_mit_unterstrichen, ausser bei Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

``if``/``elif`` sind keine Funktionen. Die überflüssigen Klammern um die Bedingungen gehören da nicht hin.

Funktionsnamen beschreiben üblicherweise Tätigkeiten um sie besser von ”Dingen” unterscheiden zu können. `winner()` ist beispielweise keine Tätigkeit. `randomCard()` auch nicht.

Funktionen sind keine Sprungziele sondern etwas das aufgerufen wird und wo man erwarten/planen muss, das der Aufruf auch wieder zum Aufrufer zurückkehrt. Der rekursive Ablauf in dem Programm ist also falsch. Wenn man etwas einfach nur wiederholen möchte verwendet man Schleifen und keine Rekursion.

Der Syntaxfehler ist eine fehlende Klammer in der Zeile davor.

Re: SyntaxError: invalid syntax

Verfasst: Donnerstag 31. Januar 2019, 18:27
von c3lsi0r
Hallo @__blackjack__ ,Pseudo und Programm passen ja gut zusammen ... nomen ist omen.
Aber erst einmal vielen Dank für deine ausführliche Kritik, sie wird mir weiter helfen.
Und ich sagte ja, ich bin Anfänger und muss was Python angeht noch viel lernen.

Ich werde das Programm bei Gelegenheit wohl noch einmal neu schreiben und deine Tips " Verbesserungsvorschläge" auf jeden Fall
mit einfließen lassen.
Ist es eine klammer zuviel oder zu wenig ?
Ist Zustand = print(calcScore(playerHand())
Soll Zustand = print(calcScore(playerHand))

Habe jetzt auch noch mehr Fehler entdeckt, werde das noch einmal alles durch gehen.
Aus Fehlern lernt man, oder !
Vielen Dank hat mir auf jeden Fall schon einmal weiter geholfen.
gruß