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 を初期化し、値を 1 つだけ入力します。出力ファイルを開き、str の 1 つの値の妥当性チェックを行い、最後に 1 つの値を出力ファイルに書き込みます。

次回ファイルを読み取るときは、同じことを行います...したがって、 str はまったく必要ありません

またstr、変数名として使用するのは悪い形式です。コンソールに書き込むと、help(str)その理由がわかります。

次に、実際の苦情に対処します。

あなたの問題は、改行がないという事実です。

for line in some_open_file_handler:...Python が行うことは、次の改行文字またはファイルの末尾までのすべてを入力するlineことです。

入力ファイルに isbn を区切る新しい行がない場合、行の最初の値は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")
于 2012-11-08T05:34:41.880 に答える