2013-08-06 6 views
0

저는 프로그래밍에 익숙하지 않고 입력에서 양의 정수 n을 취하여 n의 모든 인수 분해를 출력하는 프로그램을 작성하려고합니다. 파이썬 인수 분해 프로그램

예를 들어 N = 10 프로그램 것 출력
1 ~ 10에 해당하는 경우 10
2 ~ 5 배와 같 10
5 회 (2)와 동일 10
10 시간 1 10

내가 믿어 같음 for 루프 내에서 중첩 된 if 문을 사용하는 것이 가장 쉬운 방법입니다. 아무도 나에게 이것을 만드는 데 도움이되는 지침을 제공 할 수 있습니까? 지금까지 나는 ...

n = int(input()) 
a = 0 
b = n 
for a in range(0, n): 
    if a * b !=n: 
     continue 
    if a * b ==n: 
     print (a+ "times" +b+ "equals" +n) 
    a=a+1 
    b=n-1 

하지만 어떤 이유로 작동하지 않습니다. 내가 옳은 생각을 가지고 있다고 생각하지만 내 코드가 분명히 틀렸다.

+0

이 시도하지 - StackOverflow의이 특정 프로그래밍에 대한 질문이 아닌 일반적인 도움. 이것을 구현 한 다음 다시 돌아와 특정 문제가있는 경우 질문하십시오. –

답변

1

코드에는 몇 가지 문제가 있지만 로직에는 몇 가지 문제가 있습니다. a을 두 번 증가하면 (for과 함께) b은 루프를 통해 처음으로 n-1이되고 그런 식으로 유지되지만 증가하지 않는 경우 (예 : b = b - 1), 작동하지 않습니다. ab을 동시에 줄이면 우연히 일치하지 않는 한 올바른 값을 찾을 수 없습니다.

그 외의 경우 a * b != n을 확인하지 않아도됩니다. 문자열에 추가하려면 정수에 str을 호출해야하며 range 호출의 0은 중복됩니다.

whncode의 대답은 (내가 해결하기 위해 노력 오류의 몇 가지를 제외하고) 우아한 솔루션입니다,하지만 당신의 논리를 사용하여, 당신은이 작업을 수행 할 수 있습니다

당신은 표시
for a in range(1, n+1): 
    for b in range(1, n+1): 
     if a * b == n: 
      print str(a) + " times " + str(b) + " equals " + str(n) 
+0

파울로가 정말 감사드립니다. 임씨는 여전히 파이썬 atm을 사용하기에 분투하고 있습니다. 나는 프로그래밍을 한 번도 해 본 적이 없으므로 일련의 도전 과제를 통해 자신을 연구하기 위해 노력하고 있습니다. 일부 도전 과제를 해결하기 위해 노력하고있는 일부 과제를 명확하게 볼 수 있습니다. 도와 줘서 고마워. – user2633836

0
n = 10 
for divisor in range(n, 0, -1): # reverse range 
    if (n%divisor == 0):  # if modulo is 0 
     print("%d times %d equals %d", (n/divisor, divisor, n)