如何在python的文本文件中添加总数?

时间:2016-05-04 01:46:28

标签: python

我一直卡在total_num()函数中,因为它给出了错误

“ValueError:带有基数10的int()的无效文字:''”

我知道如果它是一个已定义的列表怎么做,但如果用户设置它我会感到困惑。

def total_num():
    total = 0
    num_file = open("num_list.txt", "r")
    line = num_file.read()

    while line != "":
        num1 = int(num_file.readline())

        total = total + num1

    print total


def read_num():
    num_file = open("num_list.txt", "r")

    for line in num_file:
        print line.rstrip("\n")

def write_num():
    num = input("Enter a number: ")
    num_file = open("num_list.txt", "w")
    num_consec = 0

    for x in range(num):
        num_consec = num_consec + 1
        num_file.write(str(num_consec)+ "\n")

    num_file.close()

def main():
    write_num()
    read_num()
    total_num()


main()

2 个答案:

答案 0 :(得分:1)

错误是因为您从文本文件中获取了一个空字符串。看看这段代码;你正在将整个文件读入内存。

line = num_file.read()

while line != "":

在此处,除非您打开空文件line != "",否则您将整个文件与空字符串进行比较。因此,您将继续循环,直到num1 = int(num_file.readline())从文件中读取空行。

如果查看read_num方法,就可以找到解决方案。

for line in num_file:
    try:
        total += int(line)
    except ValueError:
        print "Invalid data in ", line

使用try except,您可以处理文件可能包含其他无效文本的情况。

答案 1 :(得分:0)

您正在以奇怪的方式阅读文件 - 即两次。 input()将整个文件内容放入一个字符串中。如果你反复检查它中是否有字符,然后再也不改变它,它将无法执行或无限循环。

使用raw_input()获取数字会有效,但为了安全起见,最好使用int()并使用xrange()进行投射。另外,range()比Python 2中的range()更好。如果您已经在def write_num(): num = int(raw_input("Enter a number: ")) with open("num_list.txt", "w") as output: for x in xrange(1, num+1): output.write(str(x) + "\n") def read_num(): with open("num_list.txt") as f: numbers = map(int, f) for number in numbers: print number return numbers def main(): write_num() print sum(read_num()) main() 上进行迭代,则不需要保留手动计数器。

总的来说,您的代码可以简化为:

top
相关问题