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线性搜索不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用数组通过人名线性搜索数字 - 如果名称不存在,方法不起作用

时间测量在 C++ 中不起作用

python中的数学公式不起作用

线性回归模型预测功能不起作用[重复]

Vim 的 Python Omnicompletion 不起作用

layout_gravity 在水平线性布局中不起作用