2012-07-25 330 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