Python线性搜索不起作用

Python线性搜索不起作用,python,python-3.x,search,linear-search,Python,Python 3.x,Search,Linear Search,出于某种原因,这种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: va

出于某种原因,这种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
def linearSearch():
数字=[3,5,54,6,17,8,32,65,87,54]
指针=0
打印(“您想搜索什么?”)
searchTerm=input()
尝试:
val=int(搜索术语)
除值错误外:
打印(“请输入一个整数”)
线性搜索()
指针
我想你是想写:

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

其他问题:

  • 无法将字符串和整数连接起来,因此在“+指针处找到的
    ”项将崩溃。尝试使用
    print(“已在”,指针处找到项目)
  • 您的循环无限打印“项目已在…找到”,因为您在找到项目时不会增加
    指针。尝试在打印后添加一个
    break
  • 如果用户未输入整数,则再次调用
    linearSearch()
    。但是原始调用仍然在堆栈上,并且在内部调用完成后将继续执行。然后它将崩溃,并出现
    UnboundLocalError:assignment之前引用的局部变量“val”
    ,因为在该上下文中从未成功创建
    val
    。考虑一种非递归方法,例如:

def linearSearch():
数字=[3,5,54,6,17,8,32,65,87,54]
指针=0
打印(“您想搜索什么?”)
尽管如此:
尝试:
val=int(输入())
打破
除值错误外:
打印(“请输入一个整数”)
指针
您应该使用
val
这是一个int,而不是
searchTerm
,当您与
数字[指针]
进行比较时,它是一个字符串。 另外,别忘了打破你的循环,否则它会无限期地运行

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

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

线性搜索:

 // 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

使用调试器运行时看到了什么?为什么不尝试使用python中的索引功能?numbers.index(val)??为什么不直接使用
numbers.index(int(val))
?您可以创建一个变量
val
,但在赋值后永远不会使用它。这是故意的吗?此外,使用递归进行输入验证也不是一个好主意;有关更多信息,请参阅。
 // 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