2013-12-18 3 views
0

저는 수업을 처음 사용하기 때문에 클래스 내에 특정 코드를 배치해야합니다. 나는 클래스의 외부에서 의도 한대로 작동하는 코드를 가지고 :클래스에서 while 루프로 작업하기

minnum = 1 
    maxnum = 100 
    num = 1 
    points = 0 
    count = 9000 
    while num in range(minnum, (maxnum + 1)): 
     points += int(num + 300 * 2 * num/3) 
     num += 1 
     if count < (points/4): 
      num -= 1 
      break 
    print num #Prints "19" 

count 두 번째로 내가 9000 0에서 count을 변경하는 반면 실제로 (0에서 시작하지만, 나는 첫 번째 예제에서 9000에 넣어해야)

class numbers(): 
    def __init__(self): 
     self.minnum = 1 
     self.maxnum = 100 
     self.num = 1 
     self.points = 0 
     self.count = 0 
    def num(self): 
     while self.num in range(self.minnum, (self.maxnum + 1)): 
      self.points += int(self.num + 300 * 2 * self.num/3) 
      self.num += 1 
      if self.count < (self.points/4): 
       self.num -= 1 
       break 
     return self.num 
number = numbers() 
number.count = 9000 
print number.num #Prints "1" 

내가 뭘 잘못하고 있니? (print number.num은 첫 번째 코드에서와 같은 값인 "19"가 아닌 "1"을 반환해야합니다.)

+0

은 실제로'number.num()'라는 적이 (스타일을 말하자면, 나는 또한 당신이 아니라 직접 count을 설정하지 않고, __init__ initialiser를 통해 count를 초기화하는 것이 좋을 것)? – ChrisP

+0

두 코드에는 몇 가지 다른 차이점이 있으므로 다른 동작은 전혀 놀랄만하지 않습니다. 도대체'self.level'이란 무엇입니까? –

+0

'while'루프를 사용하여 숫자의 범위를 반복하는 것은 매우 평범하지 않습니다. 또한 새로운'range()'객체 *를 반복 할 때마다 루프가 효율적이지 않습니다. 대신'num for range (minnum, maxnum + 1) :'을 수행하는 것을 고려하십시오. –

답변

3

두 번째 예제에서는 num() 메서드를 호출하지 않으며, 변수 및 동일한 이름 ("num") 중 하나의 메소드를 사용하십시오.

def __init__(self, count): 
    self.count = count 
    # etc... 

number = numbers(9000) 
+0

감사합니다. 내 질문에 답변했습니다. 파이썬은 내가 변수와 동일한 메소드를 호출하는 것을 허락하지 않는다. (그래서 나는 메소드를 호출 할 때 변수가 같은 이름을 가진다면 에러가 난다.) 카운트 변수는 끊임없이 변할 것이다. (별도의 코드를 통해 성장할 수도 있음). 예를 들어 특정 버튼을 누를 때마다 카운트가 +50만큼 증가하여 나머지 코드에 영향을 줄 수 있습니다. – Cestarian

관련 문제