2012-11-08 68 views
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

回答

0

在您的主要功能:

每次從輸入文件讀入行初始化海峽和只用一個值填充它。你打開輸出文件,對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")集linestrip到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")