Kaggle Python课程练习:字符串和字典Q.否。 2

时间:2020-09-05 13:10:15

标签: python kaggle

这是问题, 研究人员收集了数千篇新闻文章。但她想将注意力集中在包含特定单词的文章上。完成以下功能,以帮助她过滤文章列表。

您的职能应满足以下条件:

请勿包括关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在寻找关键字“ closed”,则不会包含字符串“ enclosed”。

她不希望您区分大写字母和小写字母。因此,“结案”一语。关键字“关闭”时将包含在内

不要让句号或逗号影响匹配的内容。 “它是封闭的。”关键字“关闭”时将包含在内。但是您可以假设没有其他类型的标点符号。

这是我的ans(我想仅使用循环和ifs解决此问题):

def word_search(doc_list, keyword):
    """
    Takes a list of documents (each document is a string) and a keyword. 
    Returns list of the index values into the original list for all documents 
    containing the keyword.

Example:
  

  doc_list = ['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?']
word_search(doc_list, 'casino')
    >>> [0]
    """
    #non-course provided and my own code starts here.
    
    k=0
    print(doc_list,keyword)
    for string in doc_list:
        print(string)
        for char in string:
            if char.upper()==keyword[0] or char.lower()==keyword[0]:
                print(char,string[string.index(char)-1])
                if (string[string.index(char)-1]==" " or string[string.index(char)-1]=="" or string[string.index(char)-1]==".") and (string[string.index(char)+len(keyword)]==" " or string[string.index(char)+len(keyword)]=="" or string[string.index(char)+len(keyword)]=="."):
                    print(string[string.index(char)-1])
                    for k in range(len(keyword)):
                        print(k)
                        if string[string.index(char)+k].upper()==keyword[k] or string[string.index(char)+k].lower()==keyword[k]:
                            c=c+k
                            if len(c)==len(keyword):
                                x=[doc_list.index(string)]
                            return x

但是运行检查代码后:

q2.check() #returns,

Incorrect: Got a return value of None given doc_list=['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?'], keyword='casino', but expected a value of type list. (Did you forget a return statement?)

以下是执行代码后打印出来的内容:

['The Learn Python Challenge Casino', 'They bought a car, and a horse', 
'Casinoville?'] casino
The Learn Python Challenge Casino
C  
C  
They bought a car, and a horse
c  
Casinoville?
C ?

代码已成功编译,没有语法和其他显式错误。但是我找不到任何隐性错误,这些错误在经过5个多小时的努力后仍会产生错误的答案。请帮忙!

5 个答案:

答案 0 :(得分:0)

解决此问题的更好方法是使用方法varient: 8 pro 1 2 3 <actual response from db for 8 pro> 4 varient: note 1 2 3 <actual response from db for note> 4 varient: iphone x 1 2 3 <actual response from db for iphone x> 4 。可以在here中找到其用法的示例。 因此该算法将变为:

contains()

答案 1 :(得分:0)

如果我没记错的话,Kaggle课程还为您提供了解决方案,这是您应该理解并逐步使用的解决方案。您的代码有许多条件,要确定其中哪些条件未正确实现将很困难。还可以检查Kaggles的解决方案,因为您不能使用此前进方式。此外,您拥有的解决方案还有一个嵌套的for循环,用于逐个检查每个字母。那是非常低效的。不错的初学者尝试:)

答案 2 :(得分:0)

如答案所述,您的函数应返回一个列表。相反,您返回的是一个None值,因为在嵌套if的某些点上,您要转到函数的末尾,其中未指定任何return。如果您在函数末尾未指定任何return关键字,它将默认返回None

顺便说一句,python提供了许多utils库,例如str.index()方法,如果在原始字符串中找到该字符串,则会返回字符串索引

我认为这是对您的解决方案的更好开发:

def word_search(doc_list, keyword):
    """
    Takes a list of documents (each document is a string) and a keyword.
    Returns list of the index values into the original list for all documents
    containing the keyword.

    Example:


    doc_list = ['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?']
    word_search(doc_list, 'casino')
    >>> [0]
    """

    my_list = []
    for doc in doc_list:
        curr_doc = doc.lower()
        try:
            curr_index = curr_doc.index(keyword.lower())
            my_list.append(curr_index)
        except:
            my_list.append(None)
    return my_list

print(word_search(['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?'], 'casino'))

输出:[27, None, 0]

如您所见,在我的代码中,我根据问题的要求在函数定义的末尾返回了一个列表

答案 3 :(得分:0)

这是使用正则表达式的解决方案

traverse(M, print<std::string>);

答案 4 :(得分:-1)

def word_search(doc_list, keyword):
    res = []
    sum = 0
    for i in range(len(doc_list)-1):
        if(doc_list[i] == keyword):
            sum=sum+1
            res.append(doc_list[i])
    return sum, res