鱼C论坛

 找回密码
 立即注册
查看: 3218|回复: 4

第29讲课后练习疑惑,请鱼友帮忙

[复制链接]
发表于 2014-5-11 17:59:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ~风介~ 于 2014-5-15 01:11 编辑
  1. file_name = input('请输入要打开的文件:')
  2. file_num = input('请输入要打开的行数2:5')
  3. (begin,end) = file_num.split(':')
  4. if begin == '':
  5.     begin = '0'
  6. if end == '':
  7.     end = '-1'
  8. f = open(file_name)
  9. i = 0
  10. #只实现 类似2:5这样的结果。
  11. if int(begin) > 0 and int(end) != -1 :
  12.     for i in range(int(begin)):
  13.         print(f.readline())  #消除之前的行数
  14.     for each_line in f:
  15.         print(f.readline())  #我理解的是文件指针目前在需要读取的行数这里,然后我开始直接读取即可
  16.         if i == int(end):
  17.             break  #如果到达制定行数,退出
  18.         else:
  19.             i +=1
复制代码
程序使用的文档是29讲用到的record.txt

上面代码是我写的,下面是课后答案。
  1. '''def file_view(file_name,line_num):
  2.     if line_num.strip() == ':':
  3.         begin = '1'
  4.         end = '-1'

  5.     (begin,end) = line_num.split(':')

  6.     if begin == '':
  7.         begin = '1'
  8.     if end == '':
  9.         end = '-1'

  10.     if begin =='1' and end == '-1':
  11.         prompt = '的全文'
  12.     elif begin =='1':
  13.         prompt = '从开始到%s' % end
  14.     elif end == '-1':
  15.         prompt = '从%s到结束' % begin
  16.     else:
  17.         prompt = '从第%s行到第%s行' % (begin,end)

  18.     print('\n文件%s%s的内容如下:\n' % (file_name,prompt))

  19.     begin = int(begin) -1
  20.     end = int(end)
  21.     lines = end-begin

  22.     f = open(file_name)

  23.     for i in range(begin):
  24.         f.readline()

  25.     if lines < 0:
  26.         print(f.read())
  27.     else:
  28.         for j in range(lines):
  29.             print(f.readline(),end = '')
  30.     f.close()

  31. file_name = input(r'请输入要打开的文件')
  32. line_num  = input('请输入要打印的内容个格式2:5')
  33. file_view(file_name,line_num)'''
复制代码

我的代码运行结果是:
begin:2
end:5
消除小客服:小甲鱼,今天有客户问你有没有女朋友?

消除小甲鱼:咦??

小甲鱼:。。。。。。

小甲鱼:然后呢?

小甲鱼:呃。。。。。。你真牛!

小甲鱼:下次有人想调戏你我不阻止~

==============================================================================

正确的运行结果是:

请输入要打开的文件record.txt
请输入要打印的内容个格式2:52:5

文件record.txt从第2行到第5行的内容如下:

小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"



为啥我的代码不能打印小客服了?百思不得其解。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-13 22:34:14 | 显示全部楼层
亲,感觉你的代码好乱啊~:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-14 18:02:54 | 显示全部楼层

加了几个注释。
其实也就上面是我一开始没看答案的时候写了写。
可是预期不对。
请版主帮忙解决。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-15 01:10:34 | 显示全部楼层
亲,你的代码和答案最好分开写哦!另外你的代码不太清楚哦!不如看看我的吧~{:1_1:}
  1. '''忽略边界检查,有时候会出现编码错误!'''
  2. while 1:
  3.     file_num = input('请输入要打开的行数: ')
  4.     (begin,end) = file_num.split(':')

  5.     f = open('record.txt')
  6.     x,y,z=0,0,0

  7.     for j in range((int(begin)-1)):#把开始行数的位置赋给x
  8.         f.readline()
  9.         x = f.tell()
  10.    
  11.     f.seek(0,0)                     #把文件指针调到文件起始位置  
  12.     for k in range(int(end)):       #把结束行数的位置赋给y
  13.         f.readline()
  14.         y = f.tell()

  15.     f.seek(x,0)                     #把文件指针调到开始行数                        
  16.     while z!= y:                    #当前行数!=结束行数则读取输出
  17.         print(f.readline())
  18.         z = f.tell()

  19.     if input('输入#结束,任意键继续:') == '#':
  20.         break;
复制代码
希望可以帮到你~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 21:41:00 | 显示全部楼层
多谢。了解了。

主要是我把
for each_line in f:
   print(each_line)
搞混了。
上面代码不用f.readline()就能正常输出了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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