2012-07-25 334 views
0

Python新手在这里。我正在编写一个程序来计算子字符串是一个字符串的次数,但不断收到错误消息:TypeError:a未定义。我已经看过/搜索类似的线程,但代码通常很复杂,很难遵循。python类型错误:a未定义

这里是我的代码:

def stringcount(char, word): 
for eachChar in word: 
    if char==eachChar: 
     count=count+1 
     return count 
    print count 

stringcount('a', 'apple') 

非常感谢!

+3

如果你不知道你也可以在字符串上调用函数'count',例如'apple'.count('a') – jmetz 2012-07-25 19:41:49

+0

您的退货声明将会缩短您的功能......此外,您的缩进是否正确? – 2012-07-25 19:42:07

+0

@ sr2222是正确的 - 你的缩进被搞砸了。 – jmetz 2012-07-25 19:42:56

回答

4
def stringcount(c, word): 
    count = 0 
    for eachChar in word: 
     if c==eachChar: 
      count=count+1 

    return count 

>>> stringcount('a', 'apple') 
1 
>>> 

但在这种情况下,你可以简单地使用:

>>> 'apple'.count('a') 
1 
2

此代码是很危险的。您并未初始化count,因此如果count作为变量存在于命名空间中,则每次都可能得到不同的结果。例如,如果多次调用该函数,则count将不会重置,并且第二次调用该函数时,将返回2。下面的代码更安全并且可行。

def stringcount(char, word): 
    count = 0 
    for eachChar in word: 
     if char==eachChar: 
      count += 1 
    return count 

>>> stringcount('a', 'apple') 
1 

另外请注意,你可以简单地做'apple'.count('a')做同样的事情。

一个不错的一行做同样的事情:

def stringcount(char, word): 
    return sum(x==char for x in word) 
>>> stringcount('p', 'apple') 
2 
+0

+1强调需要在函数名称空间内初始化count。 – Lenna 2012-07-25 19:47:54

0

如果不写这对于一个编程练习,你可以这样做:

def stringcount(c, word): 
    return word.count(c) 

print stringcount("a", "apple") 

文档:http://docs.python.org/library/string.html#string.count

+0

为什么要定义一个函数呢? OP可以调用''apple'.count('a')'。 – jmetz 2012-07-25 19:48:05

+0

@mutzmatron:显然,但我遵循OP的功能语法。 – Lenna 2012-07-25 19:49:09

+0

我明白你的意思了,尽管我同意@ sr2222的意思,如果这是某种分配,OP可能必须定义他们自己的全部功能,否则根本不需要任何功能。我在半路答案中并没有真正看到一个观点?......但是谁知道呢! – jmetz 2012-07-25 19:51:38