2

Pythonで簡単なキャラクター作成ページを書こうとしています。統計を再ロールするオプションが必要です。問題は、ページを更新した後、統計が同じままであることです。以下は私のコードです:

Views.py

 from my import Character
 ...
 def create_character():
  characterform = CharacterForm() 
   if request.method == 'GET':
   hero = Character()
   hero.gen_stat()
   return render_template('create_character.html', hero = hero, form = characterform)

my.py

class Character():
 def __init__(self):
  self.attack  = 0
  self.defense = 0
  self.hp      = 0
  self.ini     = 0


 def gen_stat(self,attack = randint(0,10), defense = randint(0,10), hp = randint(10,20), ini = randint(0,5)):
  self.attack  = attack
  self.defense = defense 
  self.hp      = hp
  self.ini     = ini

私は今pythonを学んでいるので、おそらく私は何か間違ったことをしています。奇妙なことに、数分後に更新すると統計が変わるので、キャッシュに関連している可能性がありますか?

これを解決するのを手伝ってください。

4

1 に答える 1

4

デフォルトのパラメーターは、(関数の作成時に) 1 回だけ評価されます。

>>> def g():
...     print('g() is called')
...     return 1
... 
>>> def f(a=g()): # g() is called when f is created.
...     pass
... 
g() is called
>>> f() # g() is not called!
>>> f() # g() is not called!

次のように置き換えgen_statます。

def gen_stat(self, attack=None, defense=None, hp=None, ini=None):
    self.attack  = randint(0, 10) if attack  is None else attack
    self.defense = randint(0, 10) if defence is None else defense
    self.hp      = randint(0, 10) if hp      is None else hp
    self.ini     = randint(0, 10) if ini     is None else ini

ところで、PEP 8 -- Style Guide for Python Codeによると:

次の状況では、余分な空白を避けてください。

...

  • 代入 (またはその他の) 演算子の前後に複数のスペースを配置して、別の演算子と整列させます。

    はい:

    x = 1
    y = 2
    long_variable = 3
    

    いいえ:

    x             = 1
    y             = 2
    long_variable = 3
    
于 2013-09-16T12:05:21.473 に答える