我一直卡在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()
答案 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