鱼C论坛

 找回密码
 立即注册
查看: 955|回复: 16

[已解决]求助帖

[复制链接]
发表于 2020-6-26 20:43:22 | 显示全部楼层 |阅读模式

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

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

x
第二十九讲的题目,要打印文件的其中几行,然后要求能任意打印所需的某几行,甲鱼哥的答案有点复杂,我自己写了个容易理解的,但是不知道哪里出问题运行不了。请问哪里有问题?

file_target=input('请输入要打开的文件:')
line1=input('请输入要显示的行数【上界】:')
line2=input('请输入要显示的行数【下界】:')
print('文件"%s"的第%s行到第%s行的内容如下:'%(file_target,line1,line2)

f1=open(file_target)
list1=list(f1)
f1.close()

if line1==None and line2!=None:
    for each in list1[:int(line2)]:
        print(each)   
if line2==None and line1!=None:
    for each in list1[int(line1-1):]:
        print(each)
if line1==None and line2==None:
    print('输入有误')
if line1!=None and line2!=None:
    for each in list1[int(line1-1):int(line2)]:
        print(each)
最佳答案
2020-6-26 20:45:38
本帖最后由 Twilight6 于 2020-6-26 20:50 编辑



你的 print 那少了个括号,对了而且你这边转 list 应该判断是否等于空列表 而不是 None

还有这个地方,你写错了把:
for each in list1[int(line1-1):int(line2)]:


-1移到外面就好了:
for each in list1[int(line1)-1:int(line2)]


正确代码:
file_target=input('请输入要打开的文件:')
line1=input('请输入要显示的行数【上界】:')
line2=input('请输入要显示的行数【下界】:')
print('文件"%s"的第%s行到第%s行的内容如下:'%(file_target,line1,line2))

f1=open(file_target)
list1=list(f1)
f1.close()

if line1==[] and line2!=[]:
    for each in list1[:int(line2)]:
        print(each)
if line2==[] and line1!=[]:
    for each in list1[int(line1-1):]:
        print(each)
if line1==[] and line2==[]:
    print('输入有误')
if line1!=[] and line2!=[]:
    for each in list1[int(line1)-1:int(line2)]:
        print(each,end='')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-26 20:45:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-26 20:50 编辑



你的 print 那少了个括号,对了而且你这边转 list 应该判断是否等于空列表 而不是 None

还有这个地方,你写错了把:
for each in list1[int(line1-1):int(line2)]:


-1移到外面就好了:
for each in list1[int(line1)-1:int(line2)]


正确代码:
file_target=input('请输入要打开的文件:')
line1=input('请输入要显示的行数【上界】:')
line2=input('请输入要显示的行数【下界】:')
print('文件"%s"的第%s行到第%s行的内容如下:'%(file_target,line1,line2))

f1=open(file_target)
list1=list(f1)
f1.close()

if line1==[] and line2!=[]:
    for each in list1[:int(line2)]:
        print(each)
if line2==[] and line1!=[]:
    for each in list1[int(line1-1):]:
        print(each)
if line1==[] and line2==[]:
    print('输入有误')
if line1!=[] and line2!=[]:
    for each in list1[int(line1)-1:int(line2)]:
        print(each,end='')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 20:48:10 | 显示全部楼层
我的思路就是把要打印范围的上下界分开来,分别输入,并把目标文件列表化,运用if语句来达到我们的目的。
我知道这样不太符合题意,但对我来说容易理解一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 20:51:09 | 显示全部楼层
sturgeons 发表于 2020-6-26 20:48
我的思路就是把要打印范围的上下界分开来,分别输入,并把目标文件列表化,运用if语句来达到我们的目的。
...

帮你改完了 你看看上面一楼吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 20:58:19 | 显示全部楼层
在f1=open()那句出问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:00:56 | 显示全部楼层
sturgeons 发表于 2020-6-26 20:58
在f1=open()那句出问题了

报错是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 21:06:21 | 显示全部楼层

invalid syntax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:07:32 | 显示全部楼层



你看不见我发的代码吗? 2L,你直接复制运行就可以了啊???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:08:51 | 显示全部楼层

。。。
语法错误
问题就出在上面的print
去看看2楼twilight大佬的代码吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 21:08:58 | 显示全部楼层
Twilight6 发表于 2020-6-26 20:45
你的 print 那少了个括号,对了而且你这边转 list 应该判断是否等于空列表 而不是 None

还有这个地 ...

非常感谢,那这样写合适吗,会不会出现什么bug,虽然简单了很多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 21:10:30 | 显示全部楼层
Twilight6 发表于 2020-6-26 21:07
你看不见我发的代码吗? 2L,你直接复制运行就可以了啊???

嗯嗯,看见了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:12:39 | 显示全部楼层
sturgeons 发表于 2020-6-26 21:08
非常感谢,那这样写合适吗,会不会出现什么bug,虽然简单了很多

会   因为 input 输入的是字符串,而我这里改成了列表了,刚刚没认真看

等等我帮你重写改改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:12:58 | 显示全部楼层
Twilight6 发表于 2020-6-26 20:45
你的 print 那少了个括号,对了而且你这边转 list 应该判断是否等于空列表 而不是 None

还有这个地 ...

话说……为什么要把字符串和列表比较……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 21:22:58 | 显示全部楼层
Twilight6 发表于 2020-6-26 20:51
帮你改完了 你看看上面一楼吧

还有就是,我这里的line1和line2是上下界,不是列表啊,列表化的是整个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:29:38 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-27 13:45 编辑
sturgeons 发表于 2020-6-26 21:22
还有就是,我这里的line1和line2是上下界,不是列表啊,列表化的是整个文件



改成这样:
file_target = input('请输入要打开的文件:')
line1 = input('请输入要显示的行数【上界】:')
line2 = input('请输入要显示的行数【下界】:')

while  not (line1.isdigit() and line2.isdigit()) :
    print('你输入的行数有误,请重新输入!')
    line1 = input('请输入要显示的行数【上界】:')
    line2 = input('请输入要显示的行数【下界】:')


print('文件"%s"的第%s行到第%s行的内容如下:' % (file_target, line1, line2))

f1 = open(file_target)
text = f1.readlines()
f1.close()

if int(line1) <= int(line2):
    for each in text[int(line1)-1:int(line2)]:
        print(each, end='')
else:
    print("您的输入有误!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-26 22:02:35 | 显示全部楼层

那如果上界或下界其中一个为空怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 13:45:36 | 显示全部楼层
sturgeons 发表于 2020-6-26 22:02
那如果上界或下界其中一个为空怎么办

已经更改了代码~你去看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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