建立'寻找' Python中的函数

时间:2015-08-20 22:02:44

标签: python python-2.7

我一直在学习Python(作为我的第一语言)来自"如何像计算机科学家一样思考:用Python学习" 。这本开放的书主要通过实例教授,我更喜欢阅读目标并自己构建程序,而不是实际阅读书中提供的程序代码。

但是,我正在努力创建一个函数,该函数将搜索给定字符串中的特定字符并返回该字符的计数次数。

我写的代码是:

def find(s, x): #find s in x
    s = raw_input("Enter what you wish to find: ")
    x = raw_input("Where to search? ")
    count = 0
    for l in x: #loop through every letter in x
        if l == s: 
            count += 1
        else:
            print count

然而,当我运行此代码时,我收到错误" name' s'未定义"。

本书中的代码目标略有不同:它在字符串中搜索特定字符,但不是计算字符被找到的次数,而是返回字符串中字符的位置。

def find(strng, ch, start=0, step=1):
    index = start
    while 0 <= index < len(strng):
        if strng[index] == ch:
            return index
        index += step
    return -1

实际上,我并不是真的理解这段代码。 但是,即使我运行代码,例如,在'a'中搜索'banana',我也会收到错误name 'banana' is not defined

我的代码出了什么问题?可以请有人解释我这本书中提供的代码是如何工作的吗?

3 个答案:

答案 0 :(得分:0)

您似乎正在接受输入s和x两次 - 一次通过函数参数,一次通过原始输入。修改函数以执行任一操作(仅从原始输入 - 请参见下文)。此外,您只需要打印一次计数,因此您可以将print语句放在函数中最外层的缩进级别。

def find(): #find s in x
    s = raw_input("Enter what you wish to find: ")
    x = raw_input("Where to search? ")
    count = 0
    for l in x: #loop through every letter in x
        if l == s: 
            count += 1

    print count

答案 1 :(得分:0)

试试这个。我从你的函数中取出了参数,将print命令从else块中移出了for循环,然后写了最后一行来调用函数。

def find(): #find s in x
    s = raw_input("Enter what you wish to find: ")
    x = raw_input("Where to search? ")
    count = 0
    for l in x: #loop through every letter in x
        if l == s: 
            count += 1
    print count

find()

答案 2 :(得分:0)

1:此代码存在一些问题。该函数接受两个参数sx,然后通过用户输入覆盖这些变量立即抛弃它们。在for循环中,每次遇到不是s的字符时,都会打印计数。您应该尝试将代码中的不同想法分成不同的方法,以便您可以更轻松地重用代码。

将您的代码细分为简单的小想法。如果find的目的是计算字符串中字符的实例,则它也不应该处理用户交互。如果取出raw_input并打印,则可以将此功能简化为:

def find(s, x): #find s in x
    count = 0
    for l in x: #loop through every letter in x
        if l == s: 
            count += 1
    return count

现在它只需要一个字符和一个字符串,然后返回字符在字符串中出现的次数。

现在,您可以在功能

之外进行用户交互
char = raw_input("Enter what you wish to find: ")
string = raw_input("Where to search?: )
print char + " appears " + `find(char, string)` + " times in " + string

2:此功能的目标是找到从具有指定步骤的起始位置遍历字符ch时找到strng的第一个位置。它需要chstrng,一个开始搜索的位置和一个步长。如果开始为0且步长为1,则它将检查每个字符。如果开始是2,它将检查除前2个字符以外的所有字符,如果步骤为2,则将检查每个其他字符等。这通过开始查看起始索引(index = start),然后循环而工作。 index至少为0且小于字符串的长度。由于python是0索引的,因此字符串中的最后一个字符的索引比字符串的长度小1,因此这只会限制您尝试检查无效索引。对于循环的每次迭代,代码检查当前索引处的字符是否为ch,在这种情况下它返回索引(这是它第一次找到该字符)。每当它在当前索引处找不到该字符时,它会按步骤递增索引并再次尝试,直到它超过最后一个字符。当发生这种情况时,它退出循环并返回-1,这是一个sentinel值,表示我们没有在字符串中找到该字符。

def find(strng, ch, start=0, step=1):
    index = start
    while 0 <= index < len(strng):
        if strng[index] == ch:
            return index
        index += step
    return -1

3:我猜你传了一些无效的参数。 strng应为字符串,ch应为单个字符,startstep应为整数。