2013-08-25 1 views
-1

다음은 코드입니다.중복으로 채워지는 파이썬 목록

x=0 
result=[] 
for n in range(1,5): 
    x=x+n; 
    for i in range(1,10): 
     if x%i==0: 
      result.append(i)  
      print(x,result) 

여기에 내가 생성 한 삼각형 numbers.I 내가 코드 나는 다음과 같은 출력을 얻고을 실행할 때 각 삼각형 number.but의 약수를 찾고 싶어요. 또한 같은 삼각형의 수는 내가 출력의 모습을 할 몇 가지 times.So 반복됩니다

1 [1] 
3 [1, 1] 
3 [1, 1, 3] 
6 [1, 1, 3, 1] 
6 [1, 1, 3, 1, 2] 
6 [1, 1, 3, 1, 2, 3] 
6 [1, 1, 3, 1, 2, 3, 6] 
10 [1, 1, 3, 1, 2, 3, 6, 1] 
10 [1, 1, 3, 1, 2, 3, 6, 1, 2] 
10 [1, 1, 3, 1, 2, 3, 6, 1, 2, 5] 

,

1 [1] 
3 [1, 3] 
6 [1, 2, 3, 6] 
10 [1, 2, 5] 

어떻게 감사?이 같은 출력을 얻을 수 있습니다.

+1

'x'와'result'를 지우지 않고 목표를 달성하려는 방법인지 확실하지는 않지만 어떤 시점에서 재설정하면 도움이 될 것입니다. –

답변

3

루프 내에서 동일한 result 목록에 추가하고 있습니다. 바깥 쪽 루프에 새 result 목록을 만들어야합니다. 그리고 당신의 print 문은 잘못 들여 쓰기가되어 있습니다. 내부 루프 외부로 이동하십시오.

코드는해야한다 :

x=0 
for n in range(1,5): 
    x=x+n; 
    result = [] 
    for i in range(1,10): 
     if x%i==0: 
      result.append(i)  
    print(x,result) 

출력 :

1 [1] 
3 [1, 3] 
6 [1, 2, 3, 6] 
10 [1, 2, 5] 
+0

나는 인쇄물이 안에 있어야한다고 생각하지만, 만약에 –

+1

@ Ofek.T .. 아니오, 같은'x'에 대한 목록 mutiple 시간을 인쇄 할 것이기 때문에. –

0

것은 당신이 번호를 찾을 경우이 기능

def divisors(n): 
    divisors=[] 
    for i in range(1,int(n**0.5)+1): 
     if n%i == 0: 
      divisors.extend((i,n/i)) 
    return list(set(divisors)) 

를 사용할 수있는 수의 약수를 찾으려면 나는 숫자 n을 나눌 수 있고, n과 n/i는 제수가된다. 유일한 문제는 루트가 두 번 추가 될 완벽한 정사각형 숫자 일 것입니다 (n의 루트가되면 n/i와 i가 같고 둘 다리스트에 추가됩니다). 그것은 set() 기능에 의해 해결됩니다.