波大大12138 发表于 2020-6-11 14:29:53

看一下程序有几个地方不理解的


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

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

2.   if lines < 0:
         print(f.read())
   else:
         for j in range(lines):
             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>

波大大12138 发表于 2020-6-11 15:39:35

@Twilight6

波大大12138 发表于 2020-6-11 15:41:03

@heidern0612

niruipeng 发表于 2020-6-11 15:44:29

个人小白理解    read()读取全文    readline()读取一行    读取完一行后指针会留在这一行末尾   下次在读取的时候会接着读取所以会消耗掉之前的内容

niruipeng 发表于 2020-6-11 15:47:50

至于小于0   当用户输入':'   依据程序   end=-1    begin = 1   end-begin=-2   所以会打印全文

Twilight6 发表于 2020-6-11 15:50:30

波大大12138 发表于 2020-6-11 15:39
@Twilight6

你下次代码单独发代码,问题分割出来 ,不然复制代码都是红的{:10_250:}

波大大12138 发表于 2020-6-11 16:00:54

niruipeng 发表于 2020-6-11 15:47
至于小于0   当用户输入':'   依据程序   end=-1    begin = 1   end-begin=-2   所以会打印全文

那for i in range(begin):f.readline()
这里的括号里面怎么不需要加i呢

Twilight6 发表于 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 里面的参数是填读取这一行的多少个字符,而不是读取几行,而且填入后不改变指针位置;通过文件指针每次读取文件读取位置都会发生改变



niruipeng 发表于 2020-6-11 16:05:15

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

又学到了

Twilight6 发表于 2020-6-11 16:08:29

niruipeng 发表于 2020-6-11 16:05
又学到了

{:10_297:}

波大大12138 发表于 2020-6-11 16:55:51

Twilight6 发表于 2020-6-11 16:08


那个顺便问一下write和writelines的区别是什么吗?能否举例说明

Twilight6 发表于 2020-6-11 16:59:15

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

wirte 只能写入字符串

writelines 能写入可迭代对象例如列表里的字符串单纯的字符串也是可以的字符串也是可迭代对象
举个例子吧,writelines 可以看成是for 循环的 write
string = '123456'
file = open('text.txt','w')
for i in string:
    file.write(i)
页: [1]
查看完整版本: 看一下程序有几个地方不理解的