鱼C论坛

 找回密码
 立即注册
查看: 1191|回复: 11

[已解决]看一下程序有几个地方不理解的

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

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

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

x

  1. <p>    begin = int(begin) - 1
  2.      end = int(end)
  3.      lines = end - begin

  4.      f = open(file_name)  
  5.      
  6.   1.   for i in range(begin):  # 用于消耗掉begin之前的内容
  7.         f.readline()

  8.   2.   if lines < 0:
  9.          print(f.read())
  10.      else:
  11.          for j in range(lines):
  12.              print(f.readline(), end='')</p><p>这是课后29讲第三题的代码有几个问题:</p><p>(1)在1那个代码那里  for i in range(begin):  f.readline();请问这个程序是将第0—第begin—1行的文件都给读出来吗?读出来的话为什么旁边注释说的是用于消耗掉begin之前的内容呢?是怎么个消耗法呢?还有既然i是有范围的,readline后面的括号里为什么不加一个i呢即f.readline(i),不加i的话怎么知道读出哪些行出来呢?</p><p>(2)在2那个代码那里,line怎么可能会小于0呢?end永远比begin大啊?2中的read和readline有区别吗在打印的时候?</p>
复制代码

最佳答案
2020-6-11 16:04:07
本帖最后由 Twilight6 于 2020-6-11 16:06 编辑

(1)在1那个代码那里  for i in range(begin):  f.readline();请问这个程序是将第0—第begin—1行的文件都给读出来吗?

是的,从第一行开始读取,因为readline() 每次只读取一行,这次读取完一行后 文件指针就会停留到下一行的开头位置,然后如果下次 再次调用 readline 就等于开始读下一行了

读出来的话为什么旁边注释说的是用于消耗掉begin之前的内容呢?是怎么个消耗法呢?

就是通过一行一行读取文件来移动文件 指针 ,来模拟消耗,每次读一行文件指针就移动一行

还有既然i是有范围的,readline后面的括号里为什么不加一个i呢即f.readline(i),不加i的话怎么知道读出哪些行出来呢?


readline 里面的参数是填读取这一行的多少个字符,而不是读取几行,而且填入后不改变指针位置;通过文件指针每次读取文件读取位置都会发生改变



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-11 15:39:35 | 显示全部楼层
@Twilight6
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-11 15:41:03 | 显示全部楼层
@heidern0612
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 15:44:29 | 显示全部楼层
个人小白理解    read()读取全文    readline()读取一行    读取完一行后  指针会留在这一行末尾   下次在读取的时候会接着读取  所以会消耗掉之前的内容
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 15:47:50 | 显示全部楼层
至于小于0   当用户输入':'   依据程序   end=-1    begin = 1   end-begin=-2   所以会打印全文
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 15:50:30 | 显示全部楼层

你下次代码单独发代码,问题分割出来 ,不然复制代码都是红的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-11 16:00:54 | 显示全部楼层
niruipeng 发表于 2020-6-11 15:47
至于小于0   当用户输入':'   依据程序   end=-1    begin = 1   end-begin=-2   所以会打印全文


  1. for i in range(begin):  f.readline()
复制代码

这里的括号里面怎么不需要加i呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 16:04:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-11 16:06 编辑

(1)在1那个代码那里  for i in range(begin):  f.readline();请问这个程序是将第0—第begin—1行的文件都给读出来吗?

是的,从第一行开始读取,因为readline() 每次只读取一行,这次读取完一行后 文件指针就会停留到下一行的开头位置,然后如果下次 再次调用 readline 就等于开始读下一行了

读出来的话为什么旁边注释说的是用于消耗掉begin之前的内容呢?是怎么个消耗法呢?

就是通过一行一行读取文件来移动文件 指针 ,来模拟消耗,每次读一行文件指针就移动一行

还有既然i是有范围的,readline后面的括号里为什么不加一个i呢即f.readline(i),不加i的话怎么知道读出哪些行出来呢?


readline 里面的参数是填读取这一行的多少个字符,而不是读取几行,而且填入后不改变指针位置;通过文件指针每次读取文件读取位置都会发生改变



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-11 16:05:15 | 显示全部楼层
Twilight6 发表于 2020-6-11 16:04
是的,从第一行开始读取,因为readline() 每次只读取一行,这次读取完一行后 文件指针就会停留到这行结尾 ...

又学到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 16:08:29 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-11 16:55:51 | 显示全部楼层

那个顺便问一下write和writelines的区别是什么吗?能否举例说明
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 16:59:15 | 显示全部楼层
波大大12138 发表于 2020-6-11 16:55
那个顺便问一下write和writelines的区别是什么吗?能否举例说明

wirte 只能写入字符串

writelines 能写入可迭代对象  例如列表里的字符串  单纯的字符串也是可以的  字符串也是可迭代对象
举个例子吧,writelines 可以看成是for 循环的 write
  1. string = '123456'
  2. file = open('text.txt','w')
  3. for i in string:
  4.     file.write(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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