鱼C论坛

 找回密码
 立即注册
查看: 3981|回复: 5

Python 29课第3题

[复制链接]
发表于 2020-7-6 16:33:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def file_print(file, paragraph):
    (start, end) = paragraph.split(':')
    if start == '':
        start = 1
    else:
        start = int(start)
    if end == '':
        end = -1
    else:
        end = int(end)

    f = open(file)
    if start == 1:
        if end == -1:
            print('''文件%s的从开头到结束的内容如下:''' % file)
        else:
            print('''文件%s的从开头到第%d行的内容如下:''' % (file, end))
    else:
        if end == -1:
            print('''文件%s的从%d行到结束的内容如下:''' % (file, start))
        else:
            print('''文件%s的从第%d行到第%d行的内容如下:''' % (file, start, end))

    for i in range(start - 1):
        f.readline()
    num = end - start + 1
    if num < 0:
        print(f.read())
    else:
        for i in range(num):
            print(f.readline())
    f.close()


file_name = input(r'请输入要打开的文件(C:\\test.txt):')
paragraph = input('请输入需要显示的行数【格式如13:21或:21或21:】:')
while paragraph == '':
    paragraph = input('输入有误,请重新输入:')
file_print(file_name, paragraph)

各位大神,代码是这样子的,我想请问一下,当从中间某一行到最后的时候,比如13行到最后,num是等于end-start+1,那此时end等于-1,
num就是一个小于0的数,按照if else语句他应该输出所有文件,为什么这里是可以输出13行到最后呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-6 19:51:27 | 显示全部楼层
这里很清楚吖
else:
        if end == -1:
            print('''文件%s的从%d行到结束的内容如下:''' % (file, start))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 11:14:36 | 显示全部楼层

那个是打印的内容,具体执行是在for语句里面
for i in range(start - 1):
        f.readline()
    num = end - start + 1
    if num < 0:
        print(f.read())
    else:
        for i in range(num):
            print(f.readline())
    f.close()
比如说这个时候我输入的是13:,这个时候end=-1,start=13,那么此时num=-1-13+1=-13
就该满足num<0,输出的就是f.read(),就是全部内容了,就不是13行到最后了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 15:21:07 | 显示全部楼层
我这边也没懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 16:27:29 | 显示全部楼层
for i in range(start - 1):
        f.readline()

我在整个代码几个阶段加了print(1),发现因为for循环后面有if语句,所以文件先将for循环循环完毕再来进行if循环,for循环循环结束,文件已经读到了start-1这个位置,只是没打印,所以当num<0后,文件是从start-1开始打印直到到最后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-4 09:06:11 | 显示全部楼层
本帖最后由 chinajz 于 2023-3-4 09:11 编辑
半夜起床不睡觉 发表于 2020-7-9 11:14
那个是打印的内容,具体执行是在for语句里面
for i in range(start - 1):
        f.readline()


事实上,13行以前内容已经通过以下语句读取了:
 for i in range(start - 1):
        f.readline()
这时文件的读取指针为从13行(start)开始,读取到结束并显示:
   if num < 0:
        print(f.read())
如果你把 f.read()改成 f.readline(),就很清楚指针的指向了,将只打印第13行(start):
    if num < 0:
        print(f.readline())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-2 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表