0

因此,当我尝试将参数 num1 和 num2 传递给函数 gcd 时,我遇到了字符串格式错误。我不知道如何解决这个问题。请多多包涵,因为我是 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'
4

1 回答 1

0

这很简单。lineArray不是包含整数的列表,而是字符串。所以当你这样做时:

r = a%b

它尝试格式化字符串a,而不是计算a%b。为了解决这个问题,将a和转换b为整数:

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。希望这会有所帮助!

于 2013-10-23T00:11:01.783 回答