我不知道它出了什么问题。如果我只调出我的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 :(得分: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")