我必须编写线性搜索代码,但我的代码似乎不起作用

问题描述 投票:-1回答:2

我需要编写一个代码,对字符串中的字符进行线性搜索。我必须在不使用任何内置函数的情况下完成它。

程序应该输出找到的字符的索引。

如果字符不在句子中,则应输出-1。

我已经尝试编写代码,但它输入句子和字符,但后来不起作用。

def linear_search(intList,target):
    found = False
    count = 0
    while count < len(intList):
        if intList[count] == target:
            count = count + 1
            found = True
            break


    return found

sentence = input('Enter a sentence: ')
character = input('Enter a character: ')
character_found = linear_search(sentence,character)
if character_found:
    print("The character is", count, "on the index")
else:
    print("The character is -1")
python linear
2个回答
2
投票

你可能想要这个:

def linear_search(intList, target):
    count = 0
    while count < len(intList):
        if intList[count] == target:
            return count

        else:
            count += 1

    return -1

代码问题:

  1. 如果当前指数的值等于target,那么你已经找到它了!你可以返回count。如果没有,那么你想增加count。目前,您的代码正好相反。
  2. 你的代码返回found,这意味着它只返回TrueFalse。实际上不需要found变量,因为你可以通过返回来突破函数,但无论如何你应该返回count
  3. 在函数外部,您尝试引用count。这是行不通的,因为count是一个局部变量:每次运行函数时都会创建一个新的count实例,并在函数返回后销毁。顺便说一句,这是你应该返回count,而不是found的另一个原因:你可以检查count == -1

0
投票

您陷入无限循环,因为您只在找到解决方案后更新count变量。

正确实现while循环:

def linear_search(intList, target):
    found = False
    count = 0
    while count < len(intList):
        if intList[count] == target:
            found = True
            break
        count = count + 1

我还建议使用for循环而不是while循环来防止这个错误:

def linear_search(intList, target):
    found = False
    count = 0
    for i in range(len(intList)):
        if intList[i] == target:
            found = True
            count = i
            break
    return found

我也注意到其他一些错误,但由于它们不是你问题的一部分,我会让你先尝试自己解决。

© www.soinside.com 2019 - 2024. All rights reserved.