2016-06-15 2 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

이것은 행운 기능에 대한 정의입니다. 사용자가 숫자를 지정하면 리턴됩니다. 인수가 제공되지 않으면 행운은 randint에서 설정되고 임의의 값이 반환됩니다.

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

이 0이 아닌 경우 True를 반환하므로 None과 직접 비교하는 것이 좋습니다. – user1308345

+0

좋은 지적입니다! 제안을 주셔서 감사합니다, 나는 내 대답을 업데이 트했습니다. – nbryans

2

파이썬에서 함수 인수의 기본값을 설정하는 기본 표현식은 한 번만 실행됩니다. 즉, 일단 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()을 사용하면 함수가 한 번만 무작위로 지정됩니다.

관련 문제