从Python中的代码获取不正确的输出

时间:2015-02-19 22:02:24

标签: python python-3.x

对于这个函数,我应该读取一个包含12个随机数的文件。然后我应该输出每行1的数字,最后程序应该分开偶数和赔率然后将它们加起来并显示它们的总数。这里的问题是,即使我正在打印数字很好,但最终的总功能是搞乱并给出错误的总数。

def main():

    infile = open('numbers.txt','r')

    line1 = infile.readline()
    line2 = infile.readline()
    line3 = infile.readline()
    line4 = infile.readline()
    line5 = infile.readline()
    line6 = infile.readline()
    line7 = infile.readline()
    line8 = infile.readline()
    line9 = infile.readline()
    line10 = infile.readline()

    line1 = line1.rstrip('\n')
    line2 = line2.rstrip('\n')
    line3 = line3.rstrip('\n')
    line4 = line4.rstrip('\n')
    line5 = line5.rstrip('\n')
    line6 = line6.rstrip('\n')
    line7 = line7.rstrip('\n')
    line8 = line8.rstrip('\n')
    line9 = line9.rstrip('\n')
    line10 = line10.rstrip('\n')

    print(line1)
    print(line2)
    print(line3)
    print(line4)
    print(line5)
    print(line6)
    print(line7)
    print(line8)
    print(line9)
    print(line10)

    line = infile.readline()

    total = 0
    evenTotal = 0
    oddTotal = 0

    while line != '':
        total += int(line)
        if int(line) % 2 == 0:
            evenTotal += int(line)
        else:
            oddTotal += int(line)
        line = infile.readline()

    print("=======================================")
    print('The total for the even numbers is', evenTotal)
    print("=======================================")
    print('The total for the odd numbers is', oddTotal)

    infile.close()
main()

以下是文件中的内容

47
64
67
40
91
98
82
2
42
84
48
96

我只是以两种方式得到0。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

open返回的文件对象维护指向您当前在文件中的位置的指针。每次调用infile.readline()时,它都会将指针推进到下一行。

因为在测试你的代码的过程中你提前读取每一行(并打印它),当你到达后面的代码,这些代码计算你的文件已经到达结尾的行的值并且不会神奇地回到文件的开头。

您可以重新打开该文件,或者更简单地使用infile.seek(0)将文件指针返回到文件的开头。

答案 1 :(得分:4)

您的代码中有两个错误,

  1. 首先,您逐行读取文件,到达文件末尾,稍后再尝试阅读......这是不可能的,您必须回放文件,如Iguananaut's answer中所述。

  2. 你的方法很不寻常......一般文件中没有明确地阅读,line1line2等等 - 你想要更通用,这样你的解决编程问题的结果更为通用。

  3. 当然,有许多事情你不了解Python处理文件的方式,因为你似乎唯一知道的是.readline方法,你滥用了一点。关于文件的一个非常重要的事情是文件对象(由open返回的内容)是 iterables ,即你可以在{{1}中使用它们循环(例如,下面的第5行),并且在每次迭代中必须处理的对象是一行文本。也就是说,您可以按如下方式组织代码

    for

答案 2 :(得分:2)

你应该学习使用列表推导或循环......

infile = open('numbers.txt','r')
numbers = [int(line) for line in infile]

evens = [num for num in numbers if num % 2 == 0]
odds = [num for num in numbers if num %2 == 1]

您应该可以使用自己的代码完成剩下的工作,但请注意sum([1,2,3,4,5])会返回15

答案 3 :(得分:2)

@Iguananaut provided you with an answer to your issue。这是问题中所述问题的解决方案,以说明如何完成。

  

对于这个函数,我应该读取一个包含12个随机数的文件。然后我应该输出每行1的数字,最后程序应该分开偶数和赔率然后将它们加起来并显示它们的总数。

total = [0, 0] # even, odd
with open('numbers.txt') as file:
    for n in map(int, file): # read integers from the file, 1 per line
        print(n) # "output the numbers 1 per line"
        total[n & 1] += n  # "separate the even .. and the odds then add them"
print("Even total: {}, odd total: {}".format(*total)) # "display their totals"