2017-05-28 14 views
-1

私の質問が初心者だとお詫び申し上げますが、Python(2.7)でタプルの文字列に基づいて変数を代入する際には、ロードブロッキングがあります。文字列を使って変数をタプルで定義する

私は過去に変数を割り当てたり、文字列を使って名前を付けることはできませんでした(例:rowId = '%sDays' %workoutMode)。しかし、タプル環境では、私はいくつかの問題があります。

私はデータベースから引き出し、同じコードをそれらに適用する3つの異なるテーブルを持っています。この例では、データをプルして定義されたリストの文字列に基づいて印刷したいと考えています。しかし、文字列に基づいて変数を割り当てるのに問題があります。ここに私のコードは次のとおりです。

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 

このコードが返されます。

SyntaxError: invalid syntax 

私は別の修正を試みたと私は運を持っていませんよ。文字列/タプルに欠けている特定のフォーマットがありますか?

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

私は私がやろうとしていたものと非常に明確ではなかったように思えます。基本的に私は、各カテゴリごとにコードを書く必要をなくすためにループを作成しようとしています。私はもう少しダイナミックなだけで、各catagoryための関数を作成するよりも、コードを作成しようとしている

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 

:だから、例えば私は、このコードは動作しますが、「腕」に関連するデータを印刷したいです。私はこれについて間違った方法をとっていると確信しています。私はお詫びします、私はプログラミングには新しいです。

+0

完全バックトレースを含めてください。バックトレースは、構文エラーがどこにあるのかをほぼ確実に示します。 –

+0

'rowId = '%s日'%workoutMode'は' rowId'変数に '%sDays '%workoutMode'が評価する値を代入しています。ここでやろうとしているのは正反対で有効なPython構文ではありません。動的に変数を作成する場合は 'setattr()'をチェックしてください。 – zwer

+0

あなたがしようとしていることはまったく明確ではありません。なぜあなたはそのようなタプルを定義しようとしていますか? –

答えて

1

あなたが値"Arms"を含む変数categoryに基づいて命名されている新しい変数(ArmsDaysArmsDaysTotal)を作成したいように見えます。これを行う最も簡単で一般的な方法は、個々の変数を動的に作成するのではなく、代わりにdictを使用することです。 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] 

キーはあなたがselect文でカラム名を構築する方法とまったく同じ原理の上に形成されています。その後、代わりに

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

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

あなた動的にPythonで新しい変数を作成することができませんが、あなたはどのように依頼する必要がある場合、あなたはそれを行うべきではありません。あなたは非常にdictを使用しないようにしてください。

関連する問題