制作一个菜单'在哪里可以搜索电影'按名称,类型,年份等

时间:2017-12-24 20:20:03

标签: python-3.x

我正在开展一个学校项目,在那里我需要制作一个功能,可以按名称,流派,年份等用于搜索电影。我做了一个菜单,你可以选择1之类的命令,名称,类型,持久性,导演,主角,国家,年份的2,3,4,5,6或7。现在,我需要尽可能地创建功能,例如,选择1(名称),这样你就可以通过输入名称来搜索电影,结果你会得到(一个飞过杜鹃的巢|戏剧| 133 | Milos Forman | Jack Nicholson |美国| 1975年)。 我从这样的事情开始:

def name():
    f = open("svi.txt","r")
    l = []

    for x in f.readlines():
        n = x.strip().split("|")
        name_m = n[0]
        l.append(name_m)

如果这是正确的方法,我接下来该怎么办? 顺便说一句,所有电影都保存在我的txt文件中。

2 个答案:

答案 0 :(得分:0)

你是在正确的道路上,虽然有很多更好的方法,但你应该先学习它以你的方式去做!现在函数名称应该有一个输入参数(这将是用户输入的搜索词),然后应该在刚刚创建的名称列表中搜索该名称('l')。然后你必须获得列表'l'中的电影名称索引,最后从列表中返回获取索引的元素:

`f.read().split()[index]`

以下代码用于名称功能:

def name(movie_name):
    f = open("svi.txt","r")
    l = []

    for x in f.readlines():
        n = x.strip().split("|")
        name_m = n[0]
        l.append(name_m)
    index = 0
    if movie_name in l:
        index = l.index(movie_name)
    else:
        print("Error movie name not found")
        return
    z = f.read().split('\n')
    print("Here are the movie details:")
    print(z[index])
    return

这样做的一个巧妙方法就是:

def name(movie_name):
    with open("svi.txt",'r') as fh:
        file = fh.read()
        fh.close()
    names = [ i.split('|')[0] for i in file.split('\n') ]
    try:
        return (file.split('\n')[names.index(movie_name)])
    except:
        return ("Name not found! No records of this movie!")

现在将函数调用为:

>>> print(name('One flew over cuckoo\'s nest'))

答案 1 :(得分:0)

如果文本文件中的某一行与line = "One flew over cuckoo's nest|Drama|133|Milos Forman|Jack Nicholson|USA|1975"类似,那么line.strip().split("|")[0]会为您提供"One flew over cuckoo's nest"

我会使用name()语句重写with函数,因为它会关闭文件。

def name(filename): 
    with open(filename) as f:
        movies = [line.strip().split("|")[0] for line in f]

    return movies

print(name("svi.txt"))

Python Tutorial说:

  

在处理文件对象时,最好使用with关键字。优点是文件在套件完成后正确关闭,即使在某个时刻引发了异常。