三行主程序不需要解释了吧,直接看def file_view(file_name, line_num):里的内容
首先说一下两个变量的含义begin 和 end
在函数开始的时候这两个变量分别存储需要输出的起止行号,如果end是-1则代表一直到最后一行
开始有一个strip方法
strip([chars])
删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。
第一个if是判断输入的行号字符串是不是只有一个 “:” ,这种情况的含义是输出全文
所以设置begin为1代表从第一行输出,end为-1代表直到最后一行。
用到strip方法的原因是防止用户输入“ : ”、“ : ”这种带有空格的字符串
(begin, end) = line_num.split(':')
这一句的意思是把line_num从:处分开,前面的存到begin里,后面的存到end里
接下来两个判断
if begin == '':
begin = '1'
if end == '':
end = '-1'
实际上重复了 if line_num.strip() == ':': 的工作
实际上上面这一部分代码是有问题的
小甲鱼的本意应该是第一个if中的line_num.strip()已经把line_num里的空格去除了
所以split之后他要重新判断 begin == '' end == '' 这两个是不是空字符串,也就是
输入是否只有“:”
然而实际上line_num里面的值并没有改变,line_num.strip()只是返回去除空格后的字符串
并不是直接修改line_num
所以小甲鱼的程序在输入“ : ”这种行号的时候仍然会报错。
因为第一个if确实能把这种带空格的输入揪出来,但是 line_num.split(':')的时候把准备好的
begin 和 end 覆盖成了空格。
后面的程序我觉得不需要解释了
我修改了一下这段代码,应该符合了小甲鱼的本意,修改的地方我用#标记了
- def file_view(file_name, line_num):
- #####
- line_num = line_num.strip()
- #####
- (begin, end) = line_num.split(':')
- if begin == '':
- begin = '1'
- if end == '':
- end = '-1'
- ……………………
- ……………………
复制代码