2013-10-22 4 views
0

그래서 num1 및 num2 인수를 gcd 함수에 전달하려고 할 때 문자열 형식화 오류가 발생합니다. 이 문제를 해결하는 방법을 모르겠습니다. 필자가 파이썬 프로그래밍을 처음 접했을 때부터 저와 함께하시기 바랍니다. 감사!파이썬 : 문자열 포맷팅 및 호출 함수

#!/usr/bin/python 
import sys 
from collections import defaultdict 

lines = sys.stdin.read() 
lineArray = lines.split() 
listLength = len(lineArray) 

def gcd(a, b): 
    c = 0 
    if a > b: 
     r = a%b 
     if r == 0: 
      return b 
     else: 
      return gcd(b, r) 
    if a < b: 
     c = b 
     b = a 
     a = c 
     return gcd(a, b) 

for x in range(0, listLength): 
     num1 = lineArray[x] 
     num2 = lineArray[x+1] 
     print num1, 'and', num2 
     print gcd(num1, num2) 

    print 'end' 
+0

게시 된 게시물에 나타나는 들여 쓰기가 스크립트의 들여 쓰기와 같아야하며 예외가 발생하면 전체 스택 추적을 게시하십시오 (오류가 발생할 때 인터프리터가 뱉어내는 모든 것들). – Brionius

+1

현재 gcd (a, b)에는 c = 0의 들여 쓰기와 a> b :가 잘못된 경우 – Back2Basics

+0

문제가 들여 쓰기되어 있기 때문에 함수에 줄이 없습니다. 그러나 적절하게 들여 쓰기 되더라도 재귀 함수 (해당 함수 내에서 동일한 함수를 호출 함)는 끝나지 않습니다. 이 들여 쓰기를 수정하면이 함수의 실행이 끝나지 않는 이유가 새 질문이됩니다. – samrap

답변

0

매우 간단합니다. lineArray은 정수가 아닌 문자열을 포함하는 목록입니다. 이 작업을 수행 할 때 그래서 :

r = a%b 

그것은 대신 a%b을 계산하는 문자열 a의 형식을 시도합니다. 는이 문제를 해결 정수로 ab을 변환하려면

def gcd(a, b): 
    a,b = int(a),int(b) 
    c = 0 
    if a > b: 
     r = a%b 
     if r == 0: 
      return b 
     else: 
      return gcd(b, r) 
    if a < b: 
     c = b 
     b = a 
     a = c 
     return gcd(a, b) 

또한, 귀하의 gcd 함수, 재귀가 종료되지 않습니다. 힌트 : b가 0인지 확인해야합니다. 희망이 있습니다!