检查输入是否在 url 列表中

Checking if a input is inside a list of urls

我在尝试将用户输入与列表匹配时遇到了一些问题。 我想 python 获取用户输入的内容,例如:旅行;它匹配列表中第一个索引的输入,因为它包含“旅行”。如果用户键入:“mystery”,它将获取第二个 link 和 return true.

代码示例:

url_links = [
    'http://books.toscrape.com/catalogue/category/books/travel_2/index.html', 
    'http://books.toscrape.com/catalogue/category/books/mystery_3/index.html'
]

u_input = input("what genre of books do you want listed?") 

我试过:

  1. if any(s in url_links for s in u_input.lower()): #this gives false
  2. if u_input.lower() in url_links: #this also gives a false.

谢谢!

您要查找的正确 if 语句是这样的 - 它检查用户的小写输入是否在列表中的任何 URL 中:

if any(u_input.lower() in url for url in url_links):

下面的语句没有按照您的意愿执行 - 它正在检查用户输入的每个字符是否是 URLs 列表中的 URL。这永远不会 return 正确,除非你有一个 URL 一个字符长,并且用户输入了相同的字符:

if any(s in url_links for s in u_input.lower()):

此语句也不正确,因为它检查用户的整个输入是否为 URL,而不是是否在 URL 中:

if u_input.lower() in url_links:

所以你的第一个例子有点错误。 您需要检查您的链接列表元素是否包含您的输入字符串,这里

if any(s in url_links for s in u_input.lower()): #this gives false

你在做相反的事情。您正在检查您输入的字符串字符是否保留在您的链接列表中。

正确的做法是:

 if any(u_input.lower() in link for link in url_links):

但实际上,我认为这不是完成任务的正确方法。 因为如果我将 'a' 作为输入而不是 'mystery' 作为输入传递,那么对于上述条件来说它将是 True 。我建议你解析你的链接并从中提取必要的部分(你可以使用 urllib)。