函数内部的Python readline()跳过文件中的第二行

时间:2018-11-06 19:32:30

标签: python function loops readline

我绝对是编程领域的初学者。我正在做一本书中的一些练习,有些事情我不理解。 我在函数内使用readline()命令,然后在main()中启动for循环以查找文件中最大的数字。该文件在每行中都有一个数字列表:最大的数字在第二行中,但是由于某种原因,程序会跳过第二行(其中包含最大的数字)。这是代码:

def reader(filename):
    nums = filename.readline()
    return(nums)

def main():
    filename = open("numbers.txt", 'r')
    largest = reader(filename)
    for line in filename:
        number = reader(filename)
        if number > largest:
            largest = number

    print("The largest number is:", largest)

main()

但是当我将readline()放入main()函数并在循环内更改参数时,一切正常:

def helper(filename):

    nums = filename
    return(nums)

def main():

    filename = open("numbers.txt", 'r')
    largest = helper(filename.readline())
    for line in filename:
        number = helper(line)
        if number > largest:
            largest = number

    print("The largest number is:", largest)

main()

很明显我缺少一些东西,但我不知道到底是什么。

3 个答案:

答案 0 :(得分:2)

for line in filename:读取文件中的每一行。

在第一个代码示例中,在这样的循环中调用readline()会导致for循环丢失该行,因为该行已被readline()占用,并且不再可供for循环使用。

第二个代码示例不存在此问题,因为您不再在readline()循环内调用for line in file:

答案 1 :(得分:0)

您正在跳过所有偶数行。首先,您读了一行:

largest = reader(filename)

那你又读了一个

for line in filename:

注释line现在包含第二行。最后是3d时间:

nums = filename.readline()

由于您不使用line,因此完全忽略了二读。当然,这将在下一个循环中继续-读取第4行,忽略它并获得第5行,等等。

还请注意,您没有剥离换行符(读取行会留下\n)或转换为int,因此您在比较字符串。

答案 2 :(得分:0)

def main():
    filename = open("numbers.txt", 'r')
    largest = -1
    for line in filename:
        if int(line) > int(largest):
            largest = line


    print("The largest number is:", largest)

main()