Seite 1 von 1

Kleines Problem :(

Verfasst: Samstag 3. August 2013, 17:53
von Pythoraner123
Hallo Forum-Mitglieder,
ich habe in meinem Programm ein Problem, dass ich kurz zeige:

Code: Alles auswählen

Deutschland=Land("Deutschland")
Russland=Land("Russland")
Länder=[x.name, y.name]

def Beispiel():
    wahl=easygui.choicebox("Welches Land?",
                                      choices=Länder)
Schaffe ich es jetzt, ohne x.name es benutzerfreundlich in die Funktion von Easygui einzubauen, ohne dass in der Liste dann in der Liste dies steht:

Code: Alles auswählen

<__main__.Land object at 0x00F3BDB0>
Und dass ich dannach dann noch so auf die Klasse zugreifen kann:

Code: Alles auswählen

Deutschland.geld+=1
Schon mal vielen Dank für Antworten
Pythoraner123

Re: Kleines Problem :(

Verfasst: Samstag 3. August 2013, 18:20
von BlackJack
@Pythoraner123: Du möchtest die Länderobjekte in ein Wörterbuch (`dict`) stecken das Ländernamen auf Länderobjekte abbildet. Dann kannst Du daraus ganz einfach von einer Zeichenkette mit dem Ländernamen auf das Landobjekt zugreifen.

Re: Kleines Problem :(

Verfasst: Samstag 3. August 2013, 18:23
von /me
Du hast ein nicht funktionierendes Codebeispiel und keine verständliche Erklärung des Problems. Beschreibe doch bitte was du aktuell unter welchen Umständen bekommst und was du stattdessen bekommen möchtest.

Edit: Die Interpretationsfähigkeiten von BlackJack überraschen mich immer wieder ...

Re: Kleines Problem :(

Verfasst: Samstag 3. August 2013, 18:31
von Pythoraner123
Danke BlackJack,
so hätte ich es mir vorgestellt.
Könntest du mir ein kleines Beispiel schreiben.
Ich bin in der Theorie, speziell Vokabeln nicht der beste; deshalb wäre ein kleines Beispiel helfend.
Danke für die schnellen Antworten und schon mal danke für ein kleines Beispiel.
Viele Grüße
Pythoraner

Re: Kleines Problem :(

Verfasst: Samstag 3. August 2013, 18:38
von /me
Pythoraner123 hat geschrieben:Ich bin in der Theorie, speziell Vokabeln nicht der beste; deshalb wäre ein kleines Beispiel helfend.
Vokabeln?

Egal, hier ist ein Beispiel:

Code: Alles auswählen

import easygui


class Country(object):
    def __init__(self, name):
        self.name = name
        self.money = 0

countries = {}
countries['Deutschland'] = Country('Deutschland')
countries['Russland'] = Country('Russland')


def main():
    selection = easygui.choicebox("Welches Land?", choices=countries.keys())
    # print(selection)
    if selection:
        countries[selection].money += 1

if __name__ == '__main__':
    main()
Es ist natürlich nicht wirklich schön, dass man den Namen sowohl als Namen des Landes als auch als Schlüssel des Dictionaries angeben muss. Da sollte man sich vielleicht noch etwas Passendes überlegen.

Re: Kleines Problem :(

Verfasst: Sonntag 4. August 2013, 14:37
von Pythoraner123
Habe den Code jetzt mit anderen Wörtern eingebaut, bekomme aber folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    x.Diplomatie()
  File "C:\Python33\Programme\Weltensimulation_BETA_UNFINISHED.py..py", line 55, in Diplomatie
    choices = Länder.keys())
  File "C:\Python33\easygui.py", line 1018, in choicebox
    return __choicebox(msg,title,choices)
  File "C:\Python33\easygui.py", line 1039, in __choicebox
    choices = list(choices[:])
TypeError: 'dict_keys' object is not subscriptable
Da ich nicht weiß was subscriptable heißt und auch nichts im Internet gefunden habe, wollte ich mal fragen, ob jemand eine Lösung kennt.
Viele Grüße
Pythoraner

Re: Kleines Problem :(

Verfasst: Sonntag 4. August 2013, 14:42
von BlackJack
@Pythoraner123: Python 2.7 verwenden. Oder mit `list()` aus dem Rückgabewert von `keys()` eine Liste machen.

Re: Kleines Problem :(

Verfasst: Sonntag 4. August 2013, 14:44
von Pythoraner123
Danke für die schnelle Antwort. Es klappt.