前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)Python(Otree)で経済学実験を組んでおります。
playerの内
1.L_playersの合計units ☛sum([p.L_units for p in players])
2.F_playersの合計units ☛sum([p.F_units for p in players])を足し合わせて、total_unitsを作る機能の実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
TypeError at /p/0w0p809o/cournot1/ResultsWaitPage/7/ unsupported operand type(s) for +: 'int' and 'NoneType' 該当箇所は、\Desktop\program\oTree\cournot1\models.py in set_payoffs, line 56 ### 該当のソースコード
class Group(BaseGroup):
F_unit_price = models.CurrencyField() L_unit_price = models.CurrencyField() total_units = models.IntegerField(doc="""Total units produced by all players""") Take = models.BooleanField( label="選択", choices=[ (1, '先手'), (0, '後手')] ) def set_payoffs(self): players = self.get_players() self.total_units = sum([p.L_units for p in players]) + sum([p.F_units for p in players]) self.L_unit_price = Constants.total_capacity - sum([p.L_units for p in players]) self.F_unit_price = Constants.total_capacity - self.total_units for p in players: if self.Take == 1: self.L_payoff = (self.L_unit_price - 3) * [p.L_units for p in players] if self.Take == 0: self.F_payoff = (self.F_unit_price - 2) * [p.F_units for p in players]
class Player(BasePlayer):
Take = models.BooleanField( label="選択", choices=[ (1, '先手'), (0, '後手')] ) cost = models.IntegerField() def cost_player(self): if self.Take == 1: self.cost = 3 if self.Take == 0: self.cost = 2 L_payoff = models.IntegerField() F_payoff = models.IntegerField() L_units = models.IntegerField( min=0, max=10, doc="""Quantity of units to produce""", label="あなたは0から10までのうちどのくらいの生産量を選択しますか?" ) F_units = models.IntegerField( min=0, max=5, doc="""Quantity of units to produce""", label="あなたは0から5までのうちどのくらいの生産量を選択しますか?" )
### 試したこと playerをL、Fとするのではなく、一気にまとめたりしましたが成功しませんでした。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
pythonのコードの一番最初の行のすぐ上に
```python
だけの行を追加してください
また、pythonのコードの一番最後の行のすぐ下に
```
だけの行を追加してください
現状、コードがとても読み辛いです
質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります