Problem mit update() bei Dict's

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Der Rueckgabewert von `dict.update`
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Verstehe das trotzdem noch nicht :(
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Rufe mal im interaktiven Modus ``print({}.update({}))`` auf.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

None, weil der Return None ist, muss ich dann objects adden?
Könnt ihr mir bitte mal eine Lösung oder den richtigen Code schicken habe überhaupt keinen Plan.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich denke, es ist besser die Schritte einzeln durchzuführen. BlackJacks Beispiel ist eher akademisch interessant und nicht unbedingt im Produktiveinsatz zu empfehlen. Code sollte möglichst klar und verständlich für alle sein, auch wenn jeder etwas anderes darunter versteht.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

So geht es aber auch nicht:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
Generate the playingfield
"""
#~Imports

import cPickle as pickle
import random

#~Define arena
#5*5 = 25

height_rows=5
width_cols=5

#~Define images

grass = {"tile" : "/gametiles/grass.png", "action" : None, "x" : None, "y": None}
baum1 = {"tile" : "/gametiles/baum1.png", "action" : None, "x" : None, "y": None}
baum2 = {"tile" : "/gametiles/baum2.png", "action" : None, "x" : None, "y": None}
baum3 = {"tile" : "/gametiles/baum3.png", "action" : None, "x" : None, "y": None}

#~Variables

objectlist = []
rows=[]
for y in range(height_rows):
    row=[]
    for x in range(width_cols):
        number = random.randint(1, 10)
        if number == 5:
            objectlist = baum1
        elif number == 1:
            objectlist = baum2
        elif number == 7:
            objectlist = baum3
        else:
            objectlist = grass
            
        objectlist.update({"x" : x, "y" : y})
        row.append(objectlist)
    rows.append(row)
for i in rows:
    for e in i:
        print e
name = raw_input("mapname: ")
pickle.dump(row, open("../maps/" + name + ".sav", "wb" ) )
print "fertig"
Zuletzt geändert von jtschoch am Montag 3. Dezember 2012, 18:26, insgesamt 1-mal geändert.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Waren wir da nicht schon einen Schritt weiter?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

bei was? kann sein das ich es verhauen habe mit den Backups, hatte ich auch:/
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ist dir in den Sinn gekommen, dass Probleme ab einer gewissen Größe nicht mehr durch raten gelöst werden können? Wie sollen wir dir denn noch abnehmen, dass du dich mit dem Problem beschäftigst, wenn du gefühlt alle 3 Minuten mit der nächsten Frage kommst? Wenn man ein Fehler in seinem Programm hat, dann geht man den entsprechenden Teil Schritt für Schritt durch und schaut mal, was bei den Anweisungen tatsächlich passiert. Hier braucht es doch nur ein paar print-Statements.
Das Leben ist wie ein Tennisball.
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Hab ich schon gemacht, aber es kommt immer das selbe raus!
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Blackjack hatte Dich schon darauf hingewiesen: Du legst vier Dictionaries an (gras, baum1 etc) und bei denen bleibt es auch. Mehr werden es nicht. Python arbeitet mit Labels auf mutable und immutable Objekte. Das ist in diesem Fall (und grundlegend überhaupt) wichtig zu wissen.
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Ich habe einfach keinen Plan, schade das ich nicht an meinen Projekt weiterkomme :(
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich denke du möchtest, eigentlich etwas anderes machen. Die Elemente sind Prototypen, die du mit Werten instanziieren möchtest.

Code: Alles auswählen

import random

class Prototype:
    def __init__(self, tile, action=None, x=None, y=None):
        self.tile = tile
        self.action = action
        self.x = x
        self.y = y

    def new(self, action=None, x=None, y=None):
        if action is None:
            action = self.action
        if x is None:
            x = self.x
        if y is None:
            y = self.y

        return Prototype(self.tile, action, x, y)


    def __repr__(self):
        return '<%s>' %self.tile

prototypes = map(Prototype, ['baum1', 'baum2', 'baum3', 'grass'])

matrix = {}

n_rows = 5
n_cols = 5

for y in range(n_rows):
    for x in range(n_cols):
        prototype = prototypes[min(random.randrange(10), 3)]

        matrix[ (x,y) ] = prototype.new(x=x, y=y)

print matrix
Versuche bitte den Code zu verstehen und nicht als gegeben anzusehen. Wenn das eine Schulaufgabe ist, wird man es sehr schnell merken, dass das nicht deine eigene geistige Leistung war :wink:
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Vielen Dank ich werde mir ihn dann inruhe anschauen, wie das ganze abläuft:)
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Darf ich kurz fragen, wie alt du bist?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

14, übrigens hatte ich mich eine längere Zeit mit Python nichtmehr beschäftigt, und Alles was mit Listen und Arrays ist da verliere ich schnell den Überblick.

Ich hätte nochmal eine kleine Erklärung zu dem Teil bitte:

Code: Alles auswählen

class Prototype:
    def __init__(self, tile, action=None, x=None, y=None):
        self.tile = tile
        self.action = action
        self.x = x
        self.y = y

    def new(self, action=None, x=None, y=None):
        if action is None:
            action = self.action
        if x is None:
            x = self.x
        if y is None:
            y = self.y

        return Prototype(self.tile, action, x, y)


    def __repr__(self):
        return '<%s>' %self.tile
was tut er genau?

Edit, er gibt doch nur die Daten zurück, aber wozu, oder?
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

14 und längere Zeit nicht mit Python beschäftigt - ich werde alt.

Die Idee von Prototypen ist es, dass du neue Objekte aus alten erschaffst. Das heißt, das neue Object übernimmt alle Eigenschaften seines Erschaffers, es ist quasi geklont. Man kann es natürlich klassisch mit Klassen lösen (was ein Wortspiel), aber diese Lösung kommt deiner mit den Dictionaries näher.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Vielleicht will ihm noch jemand auf der Mailingliste helfen: http://permalink.gmane.org/gmane.comp.p ... erman/8145
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Irgendwie weis ich immernochnicht wie ich das umsetze, die Ausgabe muss so sein:

Code: Alles auswählen

{"tile" : "/gametiles/grass.png", "action" : None, "x" : 0, "y": 0}
{"tile" : "/gametiles/grass.png", "action" : None, "x" : 1, "y": 0}
{"tile" : "/gametiles/grass.png", "action" : None, "x" : 2, "y": 0}
{"tile" : "/gametiles/grass.png", "action" : None, "x" : 3, "y": 0}
{"tile" : "/gametiles/grass.png", "action" : None, "x" : 4, "y": 0}
{"tile" : "/gametiles/grass.png", "action" : None, "x" : 0, "y": 0}
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Muss? Es hindert dich doch keiner dran.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten