Python脚本范围上限未被包含问题排查求助
问题分析与解决
核心问题出在**readlines()读取的每行包含末尾的换行符\n,导致字符串比较逻辑失效:
比如文件中最后一行的millennium被读取后实际是millennium\n,和你输入的millennium比较时,millennium\n的ASCII值更大,所以不满足<= ub的条件,因此不会被输出。另外你尝试改用or的逻辑完全错误,范围判断需要的是且(and)**的关系,不是或(or)。
修改后的代码如下:
inpf = input('input file name:') lb = input('lower bound:') ub = input('upper bound:') with open(inpf, 'r') as f: for line in f: # 仅去掉末尾的换行符,保留行内其他空格格式 line_clean = line.rstrip('\n') if lb <= line_clean <= ub: print(line, end='')
修改说明:
- 直接遍历文件对象(
for line in f)比readlines()更高效,避免一次性加载所有内容到内存 - 用
rstrip('\n')处理每行,得到用于比较的干净字符串,同时保留原行的格式用于输出 - 维持正确的范围判断逻辑
lb <= line_clean <= ub,等价于line_clean >= lb and line_clean <= ub,确保只输出处于上下限之间(包含边界)的行
内容的提问来源于stack exchange,提问作者Drew
相关产品推荐
相关产品推荐

