标题打印多次?

2024-05-16 04:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我目前是一名计算机科学入门课程的学生,期末考试我正在处理一个附带信息的书籍文本文件

我有一个函数,它要求开始年和结束年。然后,该功能将打印出用户给定年份范围内的所有书籍

我遇到的问题是同一本书被多次印刷

def display_books_year_range():
    start_year = input("Enter your start year :\n")
    end_year = input("Enter your end year: \n")
    book_counter = 0
    for book in years:
        if start_year <= book <= end_year:
                book_index = years.index(book)
                print(titles[book_index] + ", by:", authors[book_index])
                book_counter = book_counter + 1
    if book_counter == 0:
        print("No books have been found within that range.\n")
        make_choice()

到目前为止,我已经尝试创建一个列表,如果满足了要求,并且该书还没有在列表中,它将添加该书。但即使这样,我还是得到了倍数

我也尝试过使用范围函数,但得到了相同的结果

我感觉问题出在for循环上,但我不确定该怎么办

编辑:这里是一个示例输出的一部分(它很长,所以我不想把全部内容放在这里)。投入的起始年为1950年,结束年为1980年

窗帘,作者:阿加莎·克里斯蒂
窗帘,作者:阿加莎·克里斯蒂
QB VII,作者:Leon Uris
爱是永恒的,作者:欧文·斯通 差异的阴影,作者:艾伦·德鲁里
QB VII,作者:Leon Uris
Firestarter,作者:斯蒂芬·金
越过河流进入树林,作者:欧内斯特·海明威
Firestarter,作者:斯蒂芬·金
被爱所附,作者:詹姆斯·古尔德·科岑斯
Firestarter,作者:斯蒂芬·金
1876年,作者:戈尔·维达尔 冠军早餐,作者:库尔特·冯内古特
安德森维尔,作者:麦金利·坎特
QB VII,作者:Leon Uris
安排:Elia Kazan


Tags: 函数indexcounter作者booksyearstartend
2条回答

这里的问题是index。记住,它会返回第一个匹配项。如果你有四本2005年的书,那么你会看到第一本书四次

def display_books_year_range():
    start_year = input("Enter your start year :\n")
    end_year = input("Enter your end year: \n")
    book_counter = 0
    for year,title,author in zip(years,titles,authors):
        if start_year <= year <= end_year:
            print(title + ", by:", author)
            book_counter = book_counter + 1
    if book_counter == 0:
        print("No books have been found within that range.\n")
        make_choice()

从长远来看,您不应该将这些信息存储在三个单独的列表中。相反,创建一个“课堂手册”来存储您的三条信息。然后,您可以作为一个单元遍历图书列表

以下是我的解决方案:

def display_books_year_range():
    start_year = int(input("Enter your start year :\n"))
    end_year = int(input("Enter your end year: \n"))
    book_counter = 0
    for book, title, author in zip(years, titles, authors):
        if start_year <= book <= end_year:
                print(f'{title}, by: {author}')
                book_counter = book_counter + 1
    if book_counter == 0:
        print("No books have been found within that range.\n")
        make_choice()

通过使用zip函数,您可以同时循环遍历multiples list的每个元素,而不会遇到list.index()方法的问题

相关问题 更多 >