sturgeons 发表于 2020-6-26 20:43:22

求助帖

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

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:
      print(each)
if line1==None and line2==None:
    print('输入有误')
if line1!=None and line2!=None:
    for each in list1:
      print(each)

Twilight6 发表于 2020-6-26 20:45:38

本帖最后由 Twilight6 于 2020-6-26 20:50 编辑



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

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

-1移到外面就好了:
for each in list1)-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:
      print(each)
if line1==[] and line2==[]:
    print('输入有误')
if line1!=[] and line2!=[]:
    for each in list1:
      print(each,end='')

sturgeons 发表于 2020-6-26 20:48:10

我的思路就是把要打印范围的上下界分开来,分别输入,并把目标文件列表化,运用if语句来达到我们的目的。
我知道这样不太符合题意,但对我来说容易理解一些

Twilight6 发表于 2020-6-26 20:51:09

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

帮你改完了 你看看上面一楼吧

sturgeons 发表于 2020-6-26 20:58:19

在f1=open()那句出问题了

xiaofeiyu 发表于 2020-6-26 21:00:56

sturgeons 发表于 2020-6-26 20:58
在f1=open()那句出问题了

报错是什么

sturgeons 发表于 2020-6-26 21:06:21

xiaofeiyu 发表于 2020-6-26 21:00
报错是什么

invalid syntax

Twilight6 发表于 2020-6-26 21:07:32

sturgeons 发表于 2020-6-26 21:06
invalid syntax



你看不见我发的代码吗? 2L,你直接复制运行就可以了啊???

xiaofeiyu 发表于 2020-6-26 21:08:51

sturgeons 发表于 2020-6-26 21:06
invalid syntax

。。。
语法错误
问题就出在上面的print
去看看2楼twilight大佬的代码吧

sturgeons 发表于 2020-6-26 21:08:58

Twilight6 发表于 2020-6-26 20:45
你的 print 那少了个括号,对了而且你这边转 list 应该判断是否等于空列表 而不是 None

还有这个地 ...

非常感谢,那这样写合适吗,会不会出现什么bug,虽然简单了很多

sturgeons 发表于 2020-6-26 21:10:30

Twilight6 发表于 2020-6-26 21:07
你看不见我发的代码吗? 2L,你直接复制运行就可以了啊???

嗯嗯,看见了

Twilight6 发表于 2020-6-26 21:12:39

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

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

等等我帮你重写改改

永恒的蓝色梦想 发表于 2020-6-26 21:12:58

Twilight6 发表于 2020-6-26 20:45
你的 print 那少了个括号,对了而且你这边转 list 应该判断是否等于空列表 而不是 None

还有这个地 ...

话说……为什么要把字符串和列表比较……

sturgeons 发表于 2020-6-26 21:22:58

Twilight6 发表于 2020-6-26 20:51
帮你改完了 你看看上面一楼吧

还有就是,我这里的line1和line2是上下界,不是列表啊,列表化的是整个文件

Twilight6 发表于 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('请输入要显示的行数【下界】:')

whilenot (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:
      print(each, end='')
else:
    print("您的输入有误!")

sturgeons 发表于 2020-6-26 22:02:35

Twilight6 发表于 2020-6-26 21:29
改成这样:

那如果上界或下界其中一个为空怎么办

Twilight6 发表于 2020-6-27 13:45:36

sturgeons 发表于 2020-6-26 22:02
那如果上界或下界其中一个为空怎么办

已经更改了代码~你去看看吧
页: [1]
查看完整版本: 求助帖