2016-04-08 4 views
0

example.pyWie kann ich Benutzern erlauben, Variablen und andere Datenstrukturen per Eingabe zu referenzieren?

dumpVar = ['a','b','c','d','e','f','g'] 

def examineVar(): 
    container = input('Which var would you like to examine? ') 
    for i in range (len(container)): 
    print(container[i]) 
                          . 

Python 3.5 (32-Bit)

>>> exec(open(r'c:\users\me\desktop\code\example.py').read()) 
>>> examineVar() 
Which variable would you like to examine? _ 
                          . 

die Ist hier hinunterlaufen --I eine Py-Datei 'Beispiel' genannt haben, dass ich aus der laufenden Interpreter, um eine Codeumgebung zu laden, mit der ich arbeiten kann. Diese spezielle Umgebung enthält ein einzelnes Array (bereits bestückt) und eine einzelne Funktion, die mit einigen grundlegenden Befehlen ausgestattet ist, die Informationen über die Eingabe jeweils um eine Zeile zurückgeben sollen.

Ich möchte den Variablennamen eingeben, den ich mit dem Skript erstellt habe, und die Funktion handle, die den Inhalt druckt.

Ich realisiere, ich könnte genauso einfach tun >>> dumpVar, um das Array in einer Zeile angezeigt zu sehen - aber ich versuche herauszufinden, wie man geht ... Ich denke, Meta-Informationen ... bis zum Interpreter über Benutzereingabe. Wenn das irgendeinen Sinn ergibt.

Wie auch immer, ich habe versucht, exec() zu verwenden, aber überall, wo ich es in der Funktion platziert neigt dazu, Ausnahmen zu erzeugen, und das einzige Mal, dass es keine Ausnahme erzeugte, druckte es nur ein Zeichen von dumpVar auf einmal, Erstellen Sie jedes Mal eine neue Zeile (die neue Zeile ist natürlich das gewünschte Verhalten).

Also, wie kann ich meine Funktion ändern, um den Inhalt meiner Variablen zu produzieren, anstatt die Zeichen meiner Eingabezeichenfolge?

Antwort

1

Update von OP Kommentar. Seine Absicht ist es, Variablen durch Eingaben zu referenzieren, und sein ursprünglicher Titel hat dies nicht deutlich gemacht. Die Lösung ist ein Wörterbuch zu implementieren, verweisen die Objekte über einen String-Schlüssel:

list_a = ['a', 'b', 'c', 'd', 'e', 'f'] 

my_variables = {'list_a' : list_a} 

def examineVar(): 
    for i in my_variables[input('>>> ')]: 
     print(i, end='') 

    print('\n') 

examineVar() 

Ausgang:

python3 variable_referencing.py 
>>> list_a 
abcdef 

Verwendung list():

>>> x = 'hello' 
>>> list(x) 
['h', 'e', 'l', 'l', 'o'] 
>>> 

Modifizierte Funktion:

def examineVar(): 
    container = list(input('Which var would you like to examine? ')) 
    for i in range (len(container)): 
    print(container[i]) 

Darüber hinaus ist es nicht notwendig, einen Bereich in Ihrem iterable (range(len(container)) dies genügen, um zu definieren:

for i in container: 
    print(i) 

Wenn Sie den Index des Elements sowie das Element wissen möchten, verwenden Sie enumerate():

for i, v in enumerate(container): 
    print("Index:{} - Value:{}".format(i, v) 
+0

Ich dachte, das war die Antwort nach dem Nachschlagen von list() in den Python-Dokumenten, aber wenn ich es versuchte, erzeugte es 'dump V ar' wieder, wobei die Leerzeichen in diesem Kommentar neue Zeilen im Interpreter darstellen. – Musixauce3000

+0

Ich wusste zunächst nicht, was Sie vorhatten. Erwäge, ein Wörterbuch zu verwenden, ich werde meine Antwort aktualisieren. Um die neue Zeile beim Drucken zu entfernen, verwenden Sie 'print (object [, end =])' wo 'end =' is ''''. –

+0

Die Funktion soll den Inhalt des vom Benutzer eingegebenen Variablennamens Zeile für Zeile zurückgeben. – Musixauce3000

Verwandte Themen