社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

xqljmnz • 5 年前 • 1662 次点击  

我是编程领域的初学者。我正在做一本书上的练习,有些东西我不明白。 我在函数中使用readline()命令,然后在m a in()中启动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()

显然有些东西我遗漏了,但我不知道到底是什么。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40888
 
1662 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Cumar Yusuf
Reply   •   1 楼
Cumar Yusuf    6 年前
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()
kabanus
Reply   •   2 楼
kabanus    6 年前

你跳过了所有的平均线。首先你读一行:

largest = reader(filename)

然后你又读了一本

for line in filename:

笔记 line 现在包含第二行。最后,3D时间:

nums = filename.readline()

你完全无视第二次阅读,因为你没有利用 线 . 这当然会在下一个循环中继续——读第四行,忽略它,得到第五行等等。

还请注意,您没有删除换行符(读取换行符会留下 \n )或转换为 int ,所以你在比较字符串。

John Gordon
Reply   •   3 楼
John Gordon    6 年前

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

打电话 readline() 而在这样的循环中,正如您在第一个代码示例中所做的,将导致 for 循环以错过该行,因为它被 RealLoad() 不再可以被 对于 循环。

第二个代码示例没有这个问题,因为您不再调用 小精灵 里面 for line in file: 循环。