2014-04-15 37 views
0

這是我的代碼,它需要一個文件中的ISBN號碼,然後使用兩個部分和並檢查它是否可以被11整除以確保它是有效的。我的問題是,我應該寫入一個文件我剛測試的代碼,然後是否有效或無效。我不是很瞭解文件,這就是爲什麼我要求一些幫助。寫入文件的文本應該是這樣的:ISBN號碼寫入文件

0-1315-2447-X有效
0-89237-010-9無效

def main(): 
    in_file = open('isbn.txt','r') 
    for line in in_file: 
     print(line) 
     s1 = list(line) 
    in_file.close() 
    hyphen = '-' 
    for i in s1: 
     if i == hyphen: 
      s1.remove (hyphen) 
    print (s1) 
    partial_sums(s1) 

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

def sum_of_s1(s2): 
    lst2 = [] 
    sum = 0 
    for i in s2: 
     sum += i 
     lst2.append(sum) 
    print(lst2) 
    check(lst2[-1]) 
def check(value): 
    if value % 11 ==0: 
     print("valid") 
    else: 
     print("invalid") 

main() 
+2

不要使用'sum'作爲變量名,因爲Python有一個內置方法['sum()'](https://docs.python.org/2/library/functions.html#sum) 。 –

回答

0

假設的邏輯你代碼是正確的,爲了將輸出寫入文件,您需要從輸入文件中讀取該行,即check方法中的s1。由於check方法是您決定它是否有效或無效的方法。

check方法

所以做:

def check(value, s1): 
    with open('output', 'a') as op_file: 
    op_file.write(s1) 
    op_file.write(' ') 
    if value % 11 ==0: 
     op_file.write('valid\n') 
    else: 
     op_file.write('invalid\n') 
    op_file.close() 

爲了有check方法得到s1訪問,你必須通過s1作爲第二個參數的函數partial_sumssum_of_s1。並從那裏到check

其他注意事項:

  • 建議您不要使用sum作爲變量名。 sum是庫函數的名稱。

  • 在你main功能,您可以替換代碼:

    hyphen = '-' 
    for i in s1: 
        if i == hyphen: 
         s1.remove (hyphen) 
    

    有:

    s1 = s1.replace('-', '') 
    
+0

如果您使用with語句,則不需要關閉文件,並且縮進對於with塊不正確。 –

0
x = open('isbn.txt', 'r+').read().split() 
num = [] 
for k in x: 
    if k.isdigit() == True: 
     num.append(k) 

num = int(''.join(num)) 
if (num % 11 == 0): 
    x.write('Valid\n') 
else: 
    x.write('Invalid\n') 

打開該文件,所有的數字追加到列表。然後查看這些組合的整數值是否可以被11整除。如果是,則打印'valid'。其他,打印'invalid'

+0

這是怎麼回答這個問題,這是關於寫入文件? –

+0

試過這個,它說int()的無效區間 – user3500257