0

我不知道哪里出错了。如果我只调用我的 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

4

1 回答 1

0

在您的主要功能中:

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

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

str用作变量名是不好的形式。在您的控制台中写入help(str),您将看到原因。

现在来处理您的实际投诉:

您的问题是没有新行。

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

如果您的输入文件没有分隔 isbns 的新行,则 line 的第一个值为019-923-3241 818-851-703X. 因此,该行将line_strip = line.replace("-", "").replace(" ", "").rstrip("\n")linetrip 设置为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")
于 2012-11-08T05:34:41.880 回答