Seite 102 von 271 ErsteErste ... 252929899100101102103104105106112152202 ... LetzteLetzte
Ergebnis 1.516 bis 1.530 von 4063

Thema: Der Pythonthread

  1. #1516
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Der Code macht so eh keinen Sinn, außer man will Team 1 oder 0 auswählen und selbst dann ist es recht umständlich Wenn das den Hegomon rausfinden soll, indem er für alle Teams durchprobiert, ob das Vasall zu diesem Team gehört, dann muss es heißen:
    Code:
    next(i for i in range(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i))
    Das kann man auf Kompabilität trimmen indem man daraus das macht:
    Code:
    (i for i in range(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i)).next()

  2. #1517
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Wieso will man einen Iterator, wenn man sowieso nur an dem ersten Element interessiert ist?
    Oder warum das "next"?

  3. #1518
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Weil man so zum ersten i in range(...) springt, für das pPreviousTeam.isVassal(i) gilt.

  4. #1519
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von delnan Beitrag anzeigen
    Weil man so zum ersten i in range(...) springt, für das pPreviousTeam.isVassal(i) gilt.
    Dann muss man doch aber vorher sicherstellen, dass ein solches i tatsächlich existiert, sonst bekommt man eine "StopIteration-Exception".

    Und statt "range" sollte man doch lieber "xrange" verwenden.

  5. #1520
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Zitat Zitat von alpha civ Beitrag anzeigen
    Dann muss man doch aber vorher sicherstellen, dass ein solches i tatsächlich existiert, sonst bekommt man eine "StopIteration-Exception".
    Wird ja vorher mit any() gemacht. Könnte man wohl auch anders regeln (chain(..., [None]); if pHegomon is not None: ... z.B.), aber jetzt isses nunmal so

    Und statt "range" sollte man doch lieber "xrange" verwenden.
    Stimmt, vergess ich immer wieder. Das ist der Nachteil, wenn man normalerweise 3.x benutzt

  6. #1521
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von delnan Beitrag anzeigen
    Wird ja vorher mit any() gemacht. Könnte man wohl auch anders regeln (chain(..., [None]); if pHegomon is not None: ... z.B.), aber jetzt isses nunmal so
    Oder man macht einfach sowas:

    Code:
    try:
        pHegemon = gc.getTeam(i for i in range(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i)).next())
    except StopIteration:
        pHegemon = None
    Dann spart man sich das any (was eine überflüssige Schleife ist). Man braucht dann nur zu testen, ob pHegemon None ist, also
    Code:
    if not pHegemon is None:
        irgendwas

  7. #1522
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.022
    Ich habe einmal den Vorschlag von alpha civ eingebaut. Der Code sieht nun so aus:
    PHP-Code:
        def onCityAcquired(selfargsList):
            
    'City Acquired'
            
    iPreviousOwner,iNewOwner,pCity,bConquest,bTrade argsList
            CvUtil
    .pyPrint('City Acquired Event: %s' %(pCity.getName()))

    ### Vasallenbonus entziehen beginn ###
            
    pPreviousOwner gc.getPlayer(iPreviousOwner)
            if 
    pPreviousOwner.getNumCities() == 0:
                
    pPreviousTeam gc.getTeam(pPreviousOwner.getTeam())
                try:
                    
    pHegemon gc.getTeam(for i in range(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i)).next()
                
    except StopIteration:
                    
    pHegemon None
                
    if not pHegemon is None:
                    
    pHegemon gc.getTeam(for i in xrange(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i)).next() 
    Leider sorgt diese Zeile für ein Problem:
    PHP-Code:
                    pHegemon gc.getTeam(for i in range(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i)).next() 
    Ich verstehe leider weder die Zeile noch die Fehlermeldung zu hundert Prozent.
    Angehängte Grafiken Angehängte Grafiken

  8. #1523
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Alpha civ hat sich beim platzieren des .next() um eine Klammer vertan. Muss direkt an den Generator statt an das Ergebnis des .getTeam(), also:
    Code:
    pHegemon = gc.getTeam((i for i in range(gc.getMAX_CIV_TEAMS()) if pPreviousTeam.isVassal(i)).next())

  9. #1524
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.022
    Danke, delnan. Der Code funktioniert nun für fast alle Situationen - außer an dieser Stelle:
    PHP-Code:
                    if pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_ARTISTIC")):
                        (
    loopCityiter) = pHegemon.firstCity(false)
                        while(
    loopCity):
                            
    loopCity.setNumRealBuilding(gc.getCivilizationInfo(pHegemon.getCivilizationType()).getCivilizationBuildings(gc.getInfoTypeForString("BUILDINGCLASS_SUPPORT_STADTSTAAT_ARTISTIC")),0)
                                            (
    loopCityiter) = pHegemon.nextCity(iterfalse
    Das Problem ist, dass pHegemon ein Team ist, ich aber dieses Gebäude nur aus den Städte eines Spielers entfernen kann. Ich muss also irgendwie alle Spieler von pHegemon herausfinden und in der Schleife durchgehen. Wie bekomme ich möglichst elegant alle betroffenen Spieler heraus?
    PHP-Code:
                        (loopCityiter) = pHegemon.firstCity(false

  10. #1525
    Registrierter Benutzer
    Registriert seit
    04.03.07
    Beiträge
    4.694
    Das ist blöde. Muss man wohl das draus machen:

    PHP-Code:
                    hegomonPlayers = (gc.getPlayer(i) for i in range(gc.getMAX_CIV_PLAYERS()) if gc.getPlayer(i).getTeam() == pHegomon.getID())
                    if 
    pPreviousOwner.hasTrait(gc.getInfoTypeForString("TRAIT_STADTSTAAT_ARTISTIC")):
                        for 
    pHegomonPlayer in hegomonPlayers:
                            (
    loopCityiter) = pHegemon.firstCity(false)
                            while(
    loopCity):
                                
    loopCity.setNumRealBuilding(gc.getCivilizationInfo(pHegomonPlayer.getCivilizationType()).getCivilizationBuildings(gc.getInfoTypeForString("BUILDINGCLASS_SUPPORT_STADTSTAAT_ARTISTIC")),0)
                                                (
    loopCityiter) = pHegemon.nextCity(iterfalse

  11. #1526
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.022
    Danke vielmals, delnan! Es funktioniert!

  12. #1527
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.454
    triggert on improvementbuild auch bei automatischen upgrades wie hütte -> weiler? ja

    ach und lässt sich die stadt abfragen, die diese hütte bearbeitet?
    Geändert von Cybah (28. Mai 2011 um 16:57 Uhr)
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  13. #1528
    paranoider Irrer Avatar von The_J
    Registriert seit
    07.08.07
    Ort
    verrat ich nicht
    Beiträge
    13.297
    oh, übersehen, mycity = pPlot.getWorkingCity ()


    ----------
    alpha, wenn ich mich richtig erinnere hast du schonmal mit matplotlib gearbeitet, ja ? Falls dem richtig ist, bist du fit genug drin um eine Frage zu beantworten ?
    Zum Download bereit: Civ4-Mod "Mars, jetzt!"


    "Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )

    "Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)


  14. #1529
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von The_J Beitrag anzeigen
    oh, übersehen, mycity = pPlot.getWorkingCity ()


    ----------
    alpha, wenn ich mich richtig erinnere hast du schonmal mit matplotlib gearbeitet, ja ? Falls dem richtig ist, bist du fit genug drin um eine Frage zu beantworten ?
    Nein, intensiv habe ich mich damit noch nicht ausgesetzt. Was willst du denn machen?

  15. #1530
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.454
    Naja, wenn eine Gemeinde entsteht, soll die Stadt, die diese bearbeitet, 1 Bevölkerung dazu bekommen. Bisher hab ich das mit der nächstgelegenen Stadt gelöst, aber das muss ja nicht immer stimmen je nach Grenzverlauf.

    Edith fragt sich gerade, ob die Frage überhaupt an mich ging. Vermutlich ists mit The_Js Hilfe schon getan.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

Seite 102 von 271 ErsteErste ... 252929899100101102103104105106112152202 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •