You need to enable JavaScript to run this app. 如何使用变量检索索引,通过用户输入获取对应编号的索引值?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用变量检索索引,通过用户输入获取对应编号的索引值?

问题排查与修复方案

你代码里的问题主要有以下几点:

  • 文件读取逻辑错误:with open()块执行结束后会自动关闭文件,你遍历文件统计行数时已经把文件指针挪到了末尾,后续直接把userData文件对象存入列表的操作没有任何意义,既读不到内容,文件也已经关闭。
  • 列表结构错误:你构造的userList实际结构是[[None], 已关闭的文件对象],根本没有存储文件的每行内容,不可能通过索引拿到对应行的文本。
  • 输入处理逻辑错误:你直接把用户输入转成了int类型,要是用户直接按回车输入空值,转int的步骤会直接抛出异常,后续判断输入为空的分支永远不会触发。
  • 索引匹配逻辑错误:没有把文件每行内容单独存入列表,自然没法和用户输入的行号对应上。

修复后代码

fileName = input("Enter the name of the file, e.g. 'numbers.txt': ")

# 直接读取所有行,同时统计行数
with open(fileName, 'r') as userData:
    # readlines()会把文件每行内容作为元素存入列表,自动保留换行符
    lines = userData.readlines()
lineCount = len(lines)
print(lineCount)

# 构造索引从1开始的列表,第0位留空对应用户输入0的异常情况
userList = [None] + lines

while True:
    # 先接收原始输入,不要直接转int
    input_raw = input("Enter the number of the line you wish to see, or press enter twice to exit: ")
    if input_raw == "":
        print("Enjoy your data.  Goodbye!")
        break
    # 转成int之前先做校验,避免非数字输入报错
    try:
        inputTarget = int(input_raw)
    except ValueError:
        print("请输入有效的数字!")
        continue
    if inputTarget == 0:
        print("Great, you broke it...*slow clap*")
        break
    # 额外加边界判断,避免输入的行号超过文件最大行数报错
    elif inputTarget > lineCount or inputTarget < 0:
        print(f"输入的行号超出范围,文件共{lineCount}行")
    else:
        # strip()可选,用来去掉行尾的换行符,不需要可以删掉
        print(userList[inputTarget].strip())

内容的提问来源于stack exchange,提问作者Kyle Campbell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:24:04