2017-01-27 1 views
-3
def fi_da_prfac(var): 
    fac = [] 
    prfac = [] 
    z = range(2, (var/2)+1) 
    z.append(var) 
    for t in z: 
     if var == t: 
      prfac.append(t) 
      z = range(2, (var/2)+1) 
      z.append(var) 
      break 
     else: 
      if var % int(t) == 0: 
       prfac.append(t) 
       var = var/t 
       del z 
       z = range(2, (var/2)+1) 
       z.append(var) 
       del t 

    return prfac 

나는 초보자입니다. 주어진 숫자의 프라임 인수 분해를 찾는 코드를 작성하려고합니다. 우리가 코드를 분석한다면, 내가하고 싶은 것은 인자를 찾으면 for 루프를 다시 시작하고자한다. t = 2에서 for 루프를 시작한다. 나는 그것을 할 방법을 찾지 못했다. 그래서 나는 결국 "t"를 지웠다. 그러나 코드는 원하는 출력을 제공하지 않습니다. 디버깅을 많이 시도했지만 할 수 없었습니다. 제발 도와주세요프라임 팩터는 어떻게 찾을 수 있습니까?

+0

다시 실행 코드는 루프를 사용하는 것을 의미합니다. 'while'또는 'for'. – TigerhawkT3

+0

코드를 이해하지 못한다고해도 코드가 복잡해지기 때문에 먼저 숫자가 소수인지 알아보기 위해 'isPrime' 함수를 작성하고 숫자의 모든 요소를 ​​계산하고 그 중 어떤 것이 소수인지 확인한 다음 반환하십시오. 각 5 줄로 약 2 기능. – Arman

+0

@Arman 예. 나는 그 일을 끝내고 그 의문을 해결했습니다. 하지만 위의 코드에서 내가 뭘 잘못했는지 알고 싶었습니다. – Primalr3d

답변

0

누락 된 퍼즐의 근본적인 부분은 yield 연산자입니다.이 함수는 생성기 역할을하며 루프를 돌 때 그 자리를 유지합니다. 그러나 중요한 점은 출력은 원하는 출력을 추출하기 위해 반복되어야하는 생성기 객체가 될 것입니다.

귀하의 예 : 언급의 다른 사람들이 당신이 필요로하는 경우이를 더 간결 미리 만들어진 기능이 있습니다 그러나 같은

import math 

def fi_da_prfac(var): 
    z = range(2, math.ceil(var/2)+1) 
    z.append(var) 
    for t in z: 
     if var % int(t) == 0: 
      yield t 

prfac = yield_eg(15) 
[fac for fac in prfac] 

이 코딩하는 방법을 학습을위한 좋은 문제이다.

Usherwood

관련 문제