60628


非エンジニアの素人です。質問が分かりにくければすみません。

Python DjangoフレームワークでWEBアプリ作成にチャレンジしています。  
Views.py内で同じ内容をユーザーごとに何度も書くのが面倒なので、for文でユーザーリストから簡単に作りたいなと思い、ググりながらようやく以下のようなコードを作りました。

[code]

    llist = ['tour','som','aim']
    for p in llist:
        code = '{} = Eva_{}.objects.all()'.format(p,p)
        exec(code)
        code2 = '{}total = 0'.format(p)
        exec(code2)
        for i in eval(p):
            code3 = '{}total += i.contribution'.format(p)
            exec(code3)
    
[/code]

一見うまくいくと思い喜んでいたのもつかの間、実際には変数をこの後のコードで参照しようとするとnot
definedというエラーとなり、上記内にある変数からテンプレートにデータを運べないということで使えませんでした。

ググるとexec関数はそのような動きをするということは何となくわかったのですが、やはり無理なのでしょうか。実際にユーザーリストはかなりの数になるので何度も同じ内容を書くのはおっくうです。必ず簡単な方法があるのだと信じているのですが、良い方法があればご教示いただけると幸いです。

よろしくお願いします！


CC BY-SA 4.0
2019-11-17T15:26:51.690
60612
2021-04-16T11:08:47.100
2019-11-19T04:09:08.103
3060
30869
question
python django
Python で動的に変数を使いたいのですが、無理なのでしょうか。


辞書型変数やリストのリストを利用するというのがいまいちわからなかったのですが、ようやく理解できました。変数に代入するのではなく、リストに引数を入れていくという発想が全くありませんでした。下記のように書き直すとプログラム動きました。歓喜！  
@metropolis 様、有難うございました、コメントが大きなヒントになりました。

[code]

    Eva= [[],[],[]]
    Eva[0] = Eva_tour.objects.all()
    Eva[1] = Eva_som.objects.all()
    Eva[2] = Eva_aim.objects.all()
    totalscorelist = [0,0,0]
    n = 0
    
    for i in Eva:
        score = 0
        for j in i:
            score += j.contribution
        totalscorelist[n] = score
        n = n + 1
    
[/code]

プログラミング、頭が活性化して、本当に面白いです。


CC BY-SA 4.0
2019-11-18T08:58:36.600
60628
2021-04-16T11:00:52.167
2021-04-16T11:00:52.167
7290
30869
60612
answer


ご質問の意味はよく分かります。私も悩みました。  
こんなのは如何でしょうか。

[code]

    list = []
    
    for n in range(3):
    
        sublist = []
    
        for i in range(3):
    
            sublist.append(n+i)
    
            print(sublist[i])
    
        list.append(sublist)
    
    for n in range(3):
    
            print(list[n])
    
[/code]


CC BY-SA 4.0
2021-04-16T09:43:01.600
75327
2021-04-16T11:08:47.100
2021-04-16T11:08:47.100
3060
44843
60612
answer