【问题标题】:Python linear search not workingPython线性搜索不起作用
【发布时间】:2023-03-19 04:45:01
【问题描述】:

由于某种原因,此 python 线性搜索将不起作用。每次我运行它并输入列表中的值时,它并没有告诉我该项目在列表中并且只是运行。 它没有给出任何语法错误,所以一定是合乎逻辑的。有什么想法吗?

def linearSearch():
numbers = [3, 5, 54, 6, 17, 8, 32, 65, 87, 54]
pointer = 0
print("What would you like to search for?")
searchTerm = input()
try:
    val = int(searchTerm)
except ValueError:
    print("Please enter an integer")
    linearSearch()
while pointer < len(numbers):
    if numbers[pointer] == searchTerm:
        print("Item has been found at " + pointer)
    else:
        pointer = pointer + 1

【问题讨论】:

  • 用调试器运行它时看到了什么?
  • 为什么不尝试在 python 中使用索引功能呢? numbers.index(val) ??
  • 为什么不直接使用numbers.index(int(val))
  • 您创建了一个变量val,但在赋值后您从不使用它。这是故意的吗?此外,使用递归进行输入验证也不是一个好主意。请参阅Asking the user for input until they give a valid response 了解更多信息。

标签: python python-3.x search linear-search


【解决方案1】:

当您与numbers[pointer] 进行比较时,您应该使用val,它是一个int,而不是searchTerm,它是一个字符串。 另外,别忘了打破你的循环,否则它会无限期地运行!

if numbers[pointer] == val:
        print("Item has been found at " + str(pointer))
        break

edit 还添加了str(pointer),因为当您尝试使用字符串添加 int 时,它会在 Python3+ 中引发错误。

【讨论】:

    【解决方案2】:
    if numbers[pointer] == searchTerm:
    

    我想你是想写:

    if numbers[pointer] == val:
    

    searchTerm 是一个字符串(假设我们使用的是 Python 3.X),因此它永远不会与列表中的任何整数进行比较。

    其他问题:

    • 你不能连接一个字符串和一个整数,所以"Item has been found at" + pointer 会崩溃。尝试改用print("Item has been found at", pointer)
    • 您的循环会无限打印“项目已在...找到”,因为您在找到项目时不会增加pointer。尝试在打印后添加break
    • 如果用户没有输入整数,则再次调用linearSearch()。但是原来的调用还在栈上,内部调用完成后会继续执行。然后它将与UnboundLocalError: local variable 'val' referenced before assignment 一起崩溃,因为val 从未在该上下文中成功创建。考虑一种非递归方法,例如:

     

    def linearSearch():
        numbers = [3, 5, 54, 6, 17, 8, 32, 65, 87, 54]
        pointer = 0
        print("What would you like to search for?")
        while True:
            try:
                val = int(input())
                break
            except ValueError:
                print("Please enter an integer")
        while pointer < len(numbers):
            if numbers[pointer] == val:
                print("Item has been found at", pointer)
                break
            else:
                pointer = pointer + 1
    
    linearSearch()
    

    【讨论】:

      【解决方案3】:

      线性搜索:

       // funtion which rturns true if item found inside list.
          def linearSearch(list, value):
                  for i in range(len(list)):
                      if i == value:
                           return True
      

      // 调用上面的函数传递值列表和要搜索的项目

      list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      item = 10
      print(linearSearch(list, item)) // item to search
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-04
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多