Kleines Problem :(

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.
Antworten
Pythoraner123
User
Beiträge: 23
Registriert: Dienstag 25. Dezember 2012, 16:43

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
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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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 ...
Pythoraner123
User
Beiträge: 23
Registriert: Dienstag 25. Dezember 2012, 16:43

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Pythoraner123
User
Beiträge: 23
Registriert: Dienstag 25. Dezember 2012, 16:43

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
BlackJack

@Pythoraner123: Python 2.7 verwenden. Oder mit `list()` aus dem Rückgabewert von `keys()` eine Liste machen.
Pythoraner123
User
Beiträge: 23
Registriert: Dienstag 25. Dezember 2012, 16:43

Danke für die schnelle Antwort. Es klappt.
Antworten