2017-05-28 2 views
-1

Ich entschuldige mich, wenn meine Frage Anfänger scheint, aber ich habe einen Roadblock getroffen, wenn es um die Zuweisung von Variablen auf einer Zeichenfolge für Tupel in Python (2.7) kommt.Verwenden einer Zeichenfolge zum Definieren von Variablen mit Tupeln

In der Vergangenheit hatte ich keine Probleme, eine Variable zuzuweisen und einen String zu verwenden, um ihm einen Namen zu geben (zB: rowId = '%sDays' %workoutMode). Aber in einer Tupel-Umgebung habe ich einige Probleme.

Ich habe drei verschiedene Tabellen, die ich aus einer Datenbank ziehen und denselben Code auf sie anwenden möchte. In diesem Fall möchte ich die Daten abrufen und basierend auf der Zeichenfolge aus der definierten Liste drucken. Aber ich habe ein Problem beim Zuweisen von Variablen basierend auf Zeichenfolgen. Hier ist mein Code:

def workoutCycle(): 
    catagories = 'Legs', 'Arms', 'Back' 
    for catagory in catagories: 
     conn = sqlite3.connect('workoutData.db') 
     c = conn.cursor() 
     c.execute ('SELECT round(%sDays, 1), round(%sDaysTotal, 1) FROM Profile_%s' %(catagory, catagory, catagory)) 
     originalData = c.fetchall() 
     ('%sDays' %catagory, '%sDaysTotal' %catagory) = tuple(originalData[0]) 
     print originalData 
     print '%sDays' %catagory 
     print '%sDaysTotal' %catagory 

Dieser Code gibt:

SyntaxError: invalid syntax 

Ich habe verschiedene Modifikationen versucht, und ich bin nicht Glück haben. Gibt es ein bestimmtes Format, das mir für Strings/Tupel fehlt?

********** EDIT **************

Es scheint, als ob ich nicht ganz klar mit war, was ich versuche zu tun. Im Wesentlichen versuche ich eine Schleife zu erstellen, die ersetzt werden muss, indem ich einen Code für jede Kategorie schreibe. So zum Beispiel mag ich die Daten drucken im Zusammenhang mit „Waffen“, dieser Code funktioniert:

def armCycle(): 
    conn = sqlite3.connect('workoutData.db') 
    c = conn.cursor() 
    c.execute ('SELECT round(ArmsDays, 1), round(ArmsDaysTotal, 1) FROM Profile_Arms') 
    #originalData = c.fetchall() 
    originalData = c.fetchall() 
    (ArmsDays, ArmsDaysTotal) = tuple(originalData[0]) 
    print originalData 
    print ArmsDays 
    print ArmsDaysTotal 

Ich versuche, einen Code zu erstellen, die ein wenig mehr Dynamik als nur eine Funktion für jeden catagory zu schaffen. Ich bin mir sicher, dass ich das falsch mache. Ich entschuldige mich, ich bin neu im Programmieren.

+0

Bitte geben Sie den vollständigen Backtrace ein. Das Backtrace zeigt fast sicher, wo der Syntaxfehler ist. –

+0

'rowId = '% sDays'% workoutMode' weist der' rowId' -Variablen den Wert zu, für den '% sDays'% workoutMode' auswertet. Was Sie hier versuchen, ist das Gegenteil und keine gültige Python-Syntax. Überprüfen Sie 'setattr()', wenn Sie Variablen dynamisch erstellen möchten. – zwer

+0

Es ist überhaupt nicht klar, was Sie zu tun versuchen. Warum versuchst du ein Tupel so zu definieren? –

Antwort

1

Es sieht aus wie Sie neue Variablen erstellt werden soll (ArmsDays, ArmsDaysTotal), die auf der Basis der Variablen category benannt sind, die den Wert "Arms" enthält. Der einfachste und übliche Weg, dies zu tun, besteht nicht darin, einzelne Variablen dynamisch zu erzeugen, sondern stattdessen eine dict.

c.execute ('SELECT round(%sDays, 1), round(%sDaysTotal, 1) FROM Profile_%s' %(category, category, category)) 
originalData = c.fetchall() 

my_dynamic_data = {} 

my_dynamic_data['%sDays' %category] = originalData[0][0] 
my_dynamic_data['%sDaysTotal' %category] = originalData[0][1] 

Die Tasten des dict auf genau dem gleichen Prinzip gebildet, wie die Art und Weise Sie die Spaltennamen in der select Anweisung konstruieren. Dann statt

print '%sDays' %category 
print '%sDaysTotal' %category  

tun

print my_dynamic_data['%sDays' %category] 
print my_dynamic_data['%sDaysTotal' %category]  

Sie neue Variablen dynamisch in Python erstellen können, aber wenn Sie, wie man fragen müssen, sollten Sie nicht tun. Sie brauchen einen sehr guten Grund, keine dict dafür zu verwenden.

Verwandte Themen