我正在尝试创建一个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)
请帮帮我!
答案 0 :(得分: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的答案。
答案 1 :(得分:2)
而不是if x==L1.pop(0)
,请使用if x in L1.pop(0)
。
这适用于James
和James Christ
,也适用于Jamesy Bob
或SuperJames
。
要确保输入与列表中名称的整个单词匹配,您可以执行if x in L1.pop(0).split()
。这可以通过将James Christ
拆分为单词列表(['James', 'Christ']
)并检查'James'是否作为该列表中的单词之一而发生。