You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维数组图书馆系统:新增书籍后如何打印更新的书名列表?

图书馆系统二维数组与addBook函数问题修正

问题背景

你创建的图书馆书籍二维数组如下:

books = [[0, "From Lukov with Love", True],[1, "172 hours on the moon",True],[2, "Archer's Voice",False],[3, "Floored",True],[4, "The Mermaid of Black Conch"],[5, "Kite Runner",True],[6, "The Brilliant World of Tom Gates", False], [7,"1984", False]]

编写的addBook函数用于添加新书籍,但存在两个核心问题:添加的书籍格式不匹配原数组,以及无法正确打印所有书名。

现有代码的问题分析

  1. 添加格式错误:原数组的每个元素是包含[id, 书名, 是否可借]的子数组,但你用books.append(newBook)直接添加了字符串类型的书名,导致数组结构混乱,后续访问books[i][1]会抛出索引错误。
  2. 打印书名逻辑错误:你尝试用print(books[i][1]),但i仅在查找书籍的循环内有效,循环结束后i变量不存在;且需要遍历整个数组才能逐个打印所有书名。
  3. 冗余代码:newAuthor变量未使用,可根据需求决定是否保留(比如扩展数组结构加入作者字段)。

修正后的代码

def addBook(books):
    newBook = input("what book would you like to add to the library?")
    # 可选:如果需要作者信息,可扩展数组结构
    # newAuthor = input("who wrote this book? ")
    
    # 优化查找逻辑:直接遍历子数组,无需用range(len(books))
    found = False
    for book in books:
        # 容错处理:应对原数组中部分元素格式不全的情况
        if len(book) >=2 and book[1] == newBook:
            found = True
            break
    
    if not found:
        # 生成新书籍的id:用当前数组长度作为新id(匹配原id的索引规则)
        new_id = len(books)
        # 按原数组格式添加子数组,默认设置为可借(True)
        books.append([new_id, newBook, True])
        print("书籍已添加,当前所有书名:")
        # 遍历数组打印所有书名
        for book in books:
            # 容错处理:避免因原数组元素格式不全导致报错
            if len(book) >=2:
                print(book[1])
    else:
        print("this book is already in the library")

# 测试调用
addBook(books)

关键修改说明

  • 统一数组结构:添加新书籍时,严格按照[id, 书名, 是否可借]的格式生成子数组,保证数组结构一致性。
  • 优化遍历逻辑:直接遍历数组中的子数组,比range(len(books))更简洁易读。
  • 容错处理:针对原数组中部分元素缺少第三个字段的情况,增加len(book)>=2的判断,避免索引错误。
  • 正确打印书名:通过遍历整个数组,逐个输出每个子数组的第二个元素(书名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:45:22