2016-07-21 15 views
0

Ich bin gerade dabei, ein textbasiertes Abenteuer in Python als Lernübung zu programmieren. Ich möchte, dass "Hilfe" ein globaler Befehl ist, der als Werte in einer Liste gespeichert wird, die (im Wesentlichen) jederzeit aufgerufen werden kann. Wenn der Spieler einen neuen Raum betritt oder sich die Hilfeoptionen ändern, setze ich die Liste help_commands mit den neuen Werten zurück. Aus irgendeinem Grund kann ich die Werte in help_commands nicht erhalten, um innerhalb eine Funktion zu aktualisieren.Python: Lokale Werte einer globalen Liste zuweisen

Ich stellte eine ähnliche Frage zuvor (Python: TypeError: 'list' object is not callable on global variable) und wurde vorgeschlagen, ein Objekt könnte der Weg für mich zu gehen.

Ich bin ein wenig neu in Python und Objekte sind einer meiner schwächeren Aspekte, also könnte ich vielleicht ein Beispiel von jemandem bekommen?

player = { 
    "name": "", 
    "gender": "", 
    "race": "", 
    "class": "", 
    "HP": 10, 
} 

# global help_commands 
help_commands = ["Save", "Quit", "Other"] 

def help(): 
    sub_help = ' | '.join(help_commands) 
    return "The following commands are avalible: " + sub_help 


def help_test(): 
    print help() 
    help_commands = ["Exit [direction], Open [object], Talk to [Person], Use [Item]"] 
    print help() 
    print "Before we go any further, I'd like to know a little more about you." 
    print "What is your name, young adventurer?" 
    player_name = raw_input(">> ").lower() 
    if player_name == "help": 
     help() 
    else: 
     player['name'] = player_name 
     print "It is nice to meet you, ", player['name'] + "." 

help_test() 

Antwort

0

Es erstellt eine lokale Variable mit demselben Namen wie die globale Variable. Alles in allem ist es keine sehr gute Art zu programmieren - Sie könnten stattdessen ein globales Hilfsobjekt haben ... oder nicht. Auf jeden Fall in Ihre help_test() Funktion, beginnen Sie mit:

global(help_commands) 

Und sehen, ob das tut, was Sie wollen.

Dies geschieht in Objekten, auch .... es gibt einen Unterschied zwischen:

foo = "something" 

und

self.foo = "something" 

innerhalb einer Elementfunktion. Wenn du von so etwas wie Visual Basic kommst, werden solche Konzepte dich total vermasseln (zum Glück ging ich in die andere Richtung und schüttelte den Kopf bei VB).

+0

Ich denke, VB führt zu Kopfschütteln von vielen. Danke für Ihre Hilfe! –

Verwandte Themen