呼叫功能有问题

时间:2012-11-08 03:10:43

标签: python-3.x

我不知道它出了什么问题。如果我只调出我的valid_ISBN(isbn)函数,我可以得到正确的结果,但是当我写文件时,结果全部无效。 (函数调用可能有问题,但我不知道如何修复它)

def main():
    # Call and open the File
    inFile = open("isbn.txt", "r")

    for line in inFile:
        line_strip = line.replace("-", "").replace(" ", "").rstrip("\n")
        isbn = line_strip # the function call

        # Output file
       str = []
       str.append(line)
        outFile = open("isbnOut.txt", "a")
        for i in str:
            if valid_ISBN(isbn) == "valid":
                outFile.write(i.strip() + "  valid\n")
            else:
                outFile.write(i.strip() + "  invalid\n")



    inFile.close()
    outFile.close()

def valid_ISBN(isbn):
    if len(isbn) != 10 or (isbn[0:9].isdigit()) == False:
        print("invalid")
    else:
        return partial_sums(isbn)

def partial_sums(s1):
    lst1 =[]
    sum1 = 0
    for i in range(len(s1)):
        if (i == (len(s1) -1)) and ((s1[i] == "x") or (s1[i] == "X")):
            sum1 = sum1 + 10
        else:
            sum1 = sum1 + int(s1[i])
        lst1.append(sum1)
    #print(lst1)

    sum_of_s1(lst1)

def sum_of_s1(s2):
    lst2 = []
    sum2 = 0
    for i in s2:
        sum2 += i
       lst2.append(sum2)
    #print(lst2)

    checkISBN(lst2[-1])

def checkISBN(value):
    if value % 11 == 0:
        print("valid")
    else:
        print("invalid")


main()

2 isbn文本文件的测试用例(无新行):

019-923-3241

818-851-703X

1 个答案:

答案 0 :(得分:0)

在你的主要功能中:

每次从输入文件中读取一行时,都会初始化str并用一个值填充它。打开输出文件,对str中的一个值进行有效性检查,最后将一个值写入输出文件。

下次你阅读文件时,你会做同样的事情......所以根本不需要str

同样使用str作为变量名称是不好的形式。在你的控制台中写下help(str),你会明白为什么。

现在处理您的实际投诉:

你的问题是没有换行。

当你说for line in some_open_file_handler:... python做的是填充line以及下一个换行符或文件末尾的所有内容。

如果您的输入文件没有新行分隔isbns,那么第一行的值将是019-923-3241 818-851-703X。因此,行line_strip = line.replace("-", "").replace(" ", "").rstrip("\n")将线条设置为0199233241818851703X

这应该解决它: 'line.split()将产生['019-923-3241','818-851-703X']

outFile = open("isbnOut.txt", "a")
for line in open("isbn.txt", "r"):
    isbns = line.split()  #this splits stuff up by whitespace.
    for isbn in isbns: 
        isbn = isbn.replace("-", "").replace(" ", "").rstrip("\n")
        if valid_ISBN(isbn) == "valid":
            outFile.write(i.strip() + "  valid\n")
        else:
            outFile.write(i.strip() + "  invalid\n")