2016-06-15 3 views
0

で毎回、私は次のコードビットとのトラブル抱えている:乱数を取得するスクリプト

from random import randint 
class character(): 
    __init__(self): 
     #init stuff here 
    def luck(self, Luck = randint(0, 3)): 
     return Luck 

は、私が取得するために、複数のインスタンスのために、私のスクリプトでは、このメソッドを複数回呼び出す必要があります毎回異なる番号。問題は、私がこのメソッドを呼び出すたびに、どのインスタンスからでもいつも同じ結果を得ることです。たとえば、次のコードで:

Foo = character() 
Bar = character() 
for foobar in range(3): 
    print(Foo.luck(), Bar.luck()) 

私は私の出力として得るだろう:ところで

1 1 
1 1 
1 1 

を、私のコードでは、私はのでluck()メソッドの引数としてrandint(0, 3)を使用し、いくつかの特定の状況では、私は自分自身に値を割り当てたいと思います。

もう一度、別の番号を取得するにはどうすればよいですか?

答えて

3

これは運の定義です。ユーザーが数値を指定すると、数値が返されます。引数が指定されていない場合、Luckはrandintから設定され、ランダム値が返されます。

def luck(self, Luck = None): 
    if Luck is None: 
     Luck = randint(0,3) 
    return Luck 
+1

が0でない場合はTrueを返します。したがって、Noneと直接比較する方が良いです。 – user1308345

+0

それは良い点です!提案をありがとう、私は私の答えを更新しました。 – nbryans

2

pythonでは、関数の引数のデフォルト値を設定するデフォルトの式は一度だけ実行されます。これは、一度luckメソッドを定義すると、最初に吐き出された値randint()がすべての呼び出しにとどまることを意味します。

新しい乱数にメソッドが呼び出されるたびに取得するには、メソッドの本体内で呼び出す必要があります。

class Character(object): 
    @staticmethod # required if you're not accepting `self` 
    def luck(): 
     return randint(0, 3) 

予想通りこれは動作します。

+0

私は、自分自身で値を割り当てたいと思っているとは思えません(ただし、値を渡してすぐに返すことは冗長ですが)。 – nbryans

+0

私はOPも "運"機能のデフォルト引数を望んでいたと思います。 – user1308345

+0

私もそうだと思っていましたが、乱数を返すという目的を打ち負かしてしまったので、それはちょうどその方法で行なわれたと思います(明らかにOPはまだ学んでいます)。 – Anonymous

0

あなたがNoneを得たかどうかを確認、デフォルト引数にNoneか何かを使用して、あなたがした場合することができます - (ちょうどあなたが手に入れたものを返さない場合)randint()を呼び出します。
関数の減速でrandint()を使用すると、関数の減速に1度だけランダム化されます。

関連する問題