Python线性搜索不起作用
Posted
技术标签:
【中文标题】Python线性搜索不起作用【英文标题】:Python linear search not working 【发布时间】:2017-06-07 13:19:59 【问题描述】:由于某种原因,此 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 了解更多信息。
【参考方案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
【讨论】:
以上是关于Python线性搜索不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用数组通过人名线性搜索数字 - 如果名称不存在,方法不起作用