Problem mit Kampfskript

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.
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Hallo Leute,

vielen Dank für eure Antworten. die Funktion menue() hatte ich hier noch nicht aufgelistet, weil sie unerheblich ist. Ich wollte mir damit im Laufzeitmodus nur aufrufarbeit ersparen. Liste1 wird am Anfang des Skriptes mit Liste1=[] inizialisiert. Das hatte ich übersehen zu posten. Jetzt komen bei mir aber nur noch Fehler:

Code: Alles auswählen

def verteilen(Liste1,team_a):
    print len(Liste1),"Kaempfer stehen zur Verfuegung"
    Wahl=input("Wahl: ")
    team_a.extend(Liste1[Wahl])
            
def filter_dead_fighters(fighters):
    return [fighter for fighter in fighters if not fighter.is_dead()]

def runde(team_a, team_b):
    for fighter_a, fighter_b in zip(team_a, team_b):
        fighter_a.life -= fighter_b.damage
        fighter_b.life -= fighter_a.damage
    return map(filter_dead_fighters, (team_a, team_b))

def fight():
    team_a = [Fighter(life, damage)
              for (life, damage) in ((2,1), (3, 1), (3, 1))]
    team_b = [Fighter(life, damage)
              for (life, damage) in ((3,1), (4, 1), (4, 1))]
    while team_a and team_b:
        print 'A:', team_a
        print 'B:', team_b
        print '-' * 20
        team_a, team_b = fight(team_a, team_b)

    if team_a:
        winner_name = 'A'
        winner_team = team_a
    else:
        winner_name = 'B'
        winner_team = team_b
    print 'Winner is %s: %r' % (winner_name, winner_team)
Wäre wirklich toll, wenn ihr mir noch mal helfen könntet.

Bamba
Bamba
BlackJack

Vielleicht ist das ganze noch ein bischen zu gross für Dich und Du solltest nochmal ein paar einfachere Sachen programmieren um Dich mit dem Umgang mit Funktionen vertraut zu machen und zu lernen welche Namen wo sichtbar bzw. nicht sichtbar sind.

Lauter Fehler glaube ich nicht, weil ja immer nur eine Ausnahme zum Abbruch führt. Einen Fehler kann ich auf Anhieb entdecken, der eigentlich eine sehr verständliche Fehlermeldung zur Folge hat. Du musst lernen wie man solche "Tracebacks" liest. Für gewöhnlich zeigen die recht genau was wo schiefgelaufen ist.

(Das Problem, welches ich gerade meine steckt in Zeile 24 im Quelltext von Deinem letzten Beitrag.)

Ansonsten musst Du einfach mal Python-Interpretierer spielen und den Quelltext Zeile für Zeile durchgehen und nachvollziehen was da im Einzelnen passiert.
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Danke. Statt das da fight() steht, habe ich jetzt dort runde() hingeschrieben. Und nein, ich werde das jetzt durchziehen. NOch eine Frage: Damit team_a und team_b nicht immer die gleichen Werte haben, sondern veränderbar sind, muss ich sie aus fight() rausnehmen:

Code: Alles auswählen

team_a = [Fighter(life, damage)
              for (life, damage) in ((2,1), (3, 1), (3, 1))]
team_b = [Fighter(life, damage)
              for (life, damage) in ((3,1), (4, 1), (4, 1))]
Jetzt stehen sie so im Code. Aber warum funktioniert das dann nicht mehr?

Bamba
Bamba
BlackJack

Keine Ahnung. Was heisst funktioniert nicht? Gibt's eine Fehlermeldung? Explodiert der Rechner?

Wie kommen die Listen mit den Kämpfern denn jetzt in die `fight()` Funktion?
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Bitte nicht als Beledigung auffassen: Lerne bitte, wie man Fragen stellt, die beantwortbar sind, bevor du fragst.
Jetzt komen bei mir aber nur noch Fehler
Aber warum funktioniert das dann nicht mehr?
Das sind schlechte Fragen, weil sie so vage gestellt sind, dass die Antwort einfach ist: "weil du was falsch machst".

Eine gute Frage stellt das erwartete Verhalten dem tatsächlichen Verhalten gegenüber. Also nicht "Das essen ist Falsch" sondern "Ich habe ein Whoppermenu mit Käse bestellt, aber eines ohne Käse bekommen".

Wenn das tatsächliche Verhalten ein Laufzeitfehler ist, DANN POSTE IHN BITTE EINFACH, lass dich nicht dreimal drum bitten.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

keppla hat geschrieben:Das sind schlechte Fragen, weil sie so vage gestellt sind, dass die Antwort einfach ist: "weil du was falsch machst".
Da gehört auch der Link zu "Wie man Fragen richtig stellt" dazu.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Bamba
User
Beiträge: 62
Registriert: Dienstag 31. Oktober 2006, 08:48

Hallo,

OK. Sorry, ich glaube ich muss noch einiges lernen. Aber das lässt sich jetzt nicht ändern.

Mein Fehler war, dass sie Listen nicht mehr in die fight Funktion übergeben wurden. Es reichte nicht fight(team_a,team_b) hinzuschreiben. Und hier die Fehlermeldung:

Code: Alles auswählen

TypeError: fight() takes exactly 2 arguments (0 given)
Sorry nochmal.
Bamba
Antworten