2013-10-22 31 views
0

所以我試圖將參數num1和num2傳遞給函數gcd時運行到字符串格式錯誤。我不知道如何解決這個問題。由於我不熟悉Python編程,請耐心等待。謝謝!Python:字符串格式化和調用函數

#!/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. 希望這有助於!