二维数组图书馆系统:新增书籍后如何打印更新的书名列表?
图书馆系统二维数组与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函数用于添加新书籍,但存在两个核心问题:添加的书籍格式不匹配原数组,以及无法正确打印所有书名。
现有代码的问题分析
- 添加格式错误:原数组的每个元素是包含
[id, 书名, 是否可借]的子数组,但你用books.append(newBook)直接添加了字符串类型的书名,导致数组结构混乱,后续访问books[i][1]会抛出索引错误。 - 打印书名逻辑错误:你尝试用
print(books[i][1]),但i仅在查找书籍的循环内有效,循环结束后i变量不存在;且需要遍历整个数组才能逐个打印所有书名。 - 冗余代码:
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
相关产品推荐
相关产品推荐

