标题打印多次?

时间:2021-06-05 18:24:56

标签: 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()

到目前为止,我已经尝试创建一个列表,如果满足要求并且该书不在列表中,它会添加该书。但即便如此,我仍然得到倍数。

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

我感觉问题出在 for 循环上,但我不知道该怎么办。

编辑:这是一个示例输出的一部分(它很长,所以我不想把整个东西都放在里面)。对于输入,起始年份为 1950,结束年份为 1980。

窗帘,作者:阿加莎·克里斯蒂
窗帘,作者:阿加莎·克里斯蒂
QB VII,作者:Leon Uris
爱是永恒的,作者:欧文·斯通
差异的阴影,作者:Allen Drury
QB VII,作者:Leon Uris
Firestarter,作者:斯蒂芬·金
过河入林,作者:欧内斯特·海明威
Firestarter,作者:斯蒂芬·金
By Love Possessed,作者:James Gould Cozzens
Firestarter,作者:斯蒂芬·金
1876 年,作者:戈尔·维达尔
冠军早餐,作者:Kurt Vonnegut
安德森维尔,作者:McKinley Kantor
QB VII,作者:Leon Uris
安排,作者:Elia Kazan

2 个答案:

答案 0 :(得分: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()

从长远来看,您不应该将该信息存储在三个单独的列表中。相反,创建一个“类书籍”来存储您的三条信息。然后,您可以将您的图书列表作为一个单元进行迭代。

答案 1 :(得分:1)

这是我的解决方案:

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.index() 方法的问题。

相关问题