鱼C论坛

 找回密码
 立即注册
查看: 2289|回复: 6

又有问题了

[复制链接]
发表于 2015-12-29 17:44:23 | 显示全部楼层 |阅读模式

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

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

x
看到第29课的课后题2
我把题目的目标改了一下,就实现不了!~
我想叨叨的效果是用户输入一个文件,输入行号,程序反馈出对应行的内容!~

  1. #定义函数返回行
  2. def file_line(file,line):
  3.       file = open(file,encoding = 'gb18030')
  4.       count = 0
  5.       line_nr = []

  6.       for lines in file:
  7.             lines = file.readline()
  8.             count += 1
  9.             line_nr.append(str(lines))

  10.       if count == line:
  11.             return line_nr[int(count)]
  12.       if int(line) > int(count):
  13.             return '输入的行数错误!~'

  14.       file.close()


  15. print('----查找内容APP----')
  16. file = input('请输入要查找内容的文件:')
  17. line = input('你要查看那一行内容?')
  18. print('%s 行的文件内容是:\n%s' % (line,file_line(file,line)))
复制代码


我这样写的,无论输入第几行反馈出来的结果都是None???

大神给看看吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-29 18:05:50 | 显示全部楼层
本帖最后由 hldh214 于 2015-12-29 18:07 编辑

1. 楼主的for循环本身就有问题,使用了迭代为啥又要用lines = file.readline()呢?
2. 始终小心input()返回的是str类型,str和int不论你怎么比较都不会相等的
3. 最后吐槽一下楼主用的缩进!严重不符合PEP规范!4空格缩进才是正规的!
4. 贴上我的代码,去掉了一些无用的结构,不懂的欢迎追问
  1. def file_line(file,line):
  2.     file = open(file)
  3.     count = 0
  4.     for lines in file:
  5.         count += 1
  6.         if count == int(line):
  7.             return lines
  8.     file.close()


  9. print('----查找内容APP----')
  10. file = input('请输入要查找内容的文件:')
  11. line = input('你要查看那一行内容?')
  12. print('第%s行的文件内容是:\n%s' % (line,file_line(file,line)))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-29 18:40:14 | 显示全部楼层
如果文本文件不是太大可以一次全部读到内存中。
  1. def fileline(file, line):
  2.     f1 = open(file, encoding = 'utf-8')
  3.     file1 = list(f1)
  4.     f1.close()
  5.     return file1[int(line) - 1]
  6. name = input(r'请输入要打开的文件:')
  7. line = input('你要查看那一行内容?')
  8. print('文件:%s 第%s行是:%s'%(name, line, fileline(name, line)))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-29 18:59:28 From FishC Mobile | 显示全部楼层
谢谢大神回复,你的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-29 19:13:39 From FishC Mobile | 显示全部楼层
hldh214 发表于 2015-12-29 18:05
1. 楼主的for循环本身就有问题,使用了迭代为啥又要用lines = file.readline()呢?
2. 始终小心input()返回 ...

谢谢大神,你的代码我看懂了,但是有点疑问
1。这个是我没有理解清楚for
2。你说input输入的是srr型不能和inr进行比较,这个我明白,但是不能比较不是应该报错吗?我后边代码有个判断是都超出文件行数的if,那个就是我不把变量转成int,程序就会报错
3、你说我的代码不符合缩进规范,我查了一下,你应该说的是4空格,不用tab这个吧?如果是,那我这个代码是在idle里写的,每个缩进都是在冒号后跟的回车,我没有自己tab啊,请问这个应该怎么处理

最后我的回复是拿手机写的,可能有点乱!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-29 22:23:06 | 显示全部楼层
aozhenlh 发表于 2015-12-29 19:13
谢谢大神,你的代码我看懂了,但是有点疑问
1。这个是我没有理解清楚for
2。你说input输入的是srr型不 ...

1. 使用for循环迭代出了每一行的内容,就不必多此一举的readline了
2. 比较运算符不等的时候不是报错而是返回False,导致你的代码永远判断为假
3. idle里面有设置,默认的应该是4空格,你可以试试一些编辑器,我用的sublime text就有设置tab == 4空格
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-30 06:24:55 From FishC Mobile | 显示全部楼层
hldh214 发表于 2015-12-29 22:23
1. 使用for循环迭代出了每一行的内容,就不必多此一举的readline了
2. 比较运算符不等的时候不是报错而是 ...

谢谢,我刚开始学,慢慢完善
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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