2

我正在尝试制作一个 python 程序(只使用递归,不使用循环),它从用户那里获取一个名称列表以及一个用于搜索列表的名称。程序必须判断该名称是否存在于给定列表中。此外,如果列表的元素是"James Christ"并且我们搜索"James",则程序应该返回 true。我已经完成了一半的程序。但是我的代码不执行附加功能。我的代码是这样的:

L1=list(input("Enter the list of names : "))
x=input("Enter the name to search : ")

def search(L1,x):
    if len(L1)==0:
        return "Not found!!"
    else:
        if x==L1.pop(0):
         return "Entry found!!"
        else:
         return search(L1,x)

print search(L1,x)

请帮帮我!

4

2 回答 2

4

这是一个不破坏原始列表的解决方案。

montys = [
    'John Cleese', 'Graham Chapman', 'Terry Gilliam',
    'Eric Idle', 'Terry Jones', 'Michael Palin']
actor = 'Idle'


def search(data, word):
    if len(data) == 0:
        return "Not found!"
    else:
        if word in data[0]:
            return "Entry found!"
        else:
            return search(data[1:], word)

print(search(montys, actor))

有关更多信息,请参阅 Junuxx 答案。

于 2013-02-25T13:44:47.237 回答
2

而不是if x==L1.pop(0),使用if x in L1.pop(0).

这适用于Jamesand James Christ,但也适用于Jamesy Bobor SuperJames

要确保输入与列表中名称的整个单词匹配,您可以执行if x in L1.pop(0).split(). 这通过拆分James Christ成一个单词列表 ( ['James', 'Christ']) 并检查“James”是否作为该列表中的单词之一出现。

于 2013-02-25T13:26:49.747 回答