Python读取文件至列表后按输入行号切换布尔值运行出错求助
问题核心错误点
input()返回值为字符串类型,你既没有将其转换为对应行号的整数,也没有将遍历的下标和用户输入的行号做匹配,反而直接和布尔值True做相等判断,这个判断条件永远为假,写文件逻辑从未触发,这是输出文件空白的直接原因- 从文件读取的每一行是带换行符的字符串格式,不是原生布尔值,不能直接做取反操作,需要先做类型转换
fp.write()仅支持传入字符串参数,你直接传入列表list1会触发类型报错,且写操作的位置错误,不应该放在if判断内部- 取反逻辑错误,你没有对原值做判断直接赋值为False,不符合True转False、False转True的需求
修正后代码
# 读取文件内容,转换为布尔值列表 bool_list = [] with open("myfile.dat", 'r') as fp: for line in fp.readlines(): # 去掉换行符后转成布尔值 line_content = line.strip() bool_list.append(line_content == 'True') # 获取用户输入的行号,默认用户输入从1开始计数 hire_out = int(input("Enter Pos Number")) # 转成0开头的下标 target_idx = hire_out - 1 # 校验行号合法性 if 0 <= target_idx < len(bool_list): # 对应行布尔值取反 bool_list[target_idx] = not bool_list[target_idx] else: print("输入的行号不合法") # 写入回文件 with open("myfile.dat", 'w') as fp: for value in bool_list: # 布尔值转字符串加换行符写入 fp.write(f"{value}\n")
内容的提问来源于stack exchange,提问作者Bobby Jones
相关产品推荐
相关产品推荐

