Python newb here。我试图计算给定字符串中字母“a”的数量。代码如下。它在字符串“banana”中保持返回1而不是3。任何输入赞赏。
def count_letters(word, char):
count = 0
while count <= len(word):
for char in word:
if char == word[count]:
count += 1
return count
print count_letters('banana','a')
答案 0 :(得分:36)
其他答案显示您的代码有什么问题。但是,如果您不仅仅是为了练习,还有一种内置的方法可以做到这一点:
>>> 'banana'.count('a')
3
Danben给出了这个更正的版本:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
以下是其他一些方法,希望他们会教你更多关于Python的信息!
类似但更短的for
循环。利用布尔可以变为1的事实,如果为真,则为0,如果为假,则为0:
def count_letters(word, char):
count = 0
for c in word:
count += (char == c)
return count
循环的简称通常可以转换为列表/生成器的理解。这将创建一个与每个字母对应的整数列表,如果字母与char
不匹配则为0,如果为,则为1,然后将它们相加:
def count_letters(word, char):
return sum(char == c for c in word)
下一个过滤掉与char
不匹配的所有字符,并计算剩余的字数:
def count_letters(word, char):
return len([c for c in word if c == char])
答案 1 :(得分:11)
一个问题是,您使用count
来引用您正在检查的字词中的位置,以及您看到的char
的数量,并且您正在使用char
引用要检查的输入字符和字符串中的当前字符。请改用单独的变量。
此外,将return
语句移出循环;否则你将在检查第一个字符后总是返回。
最后,您只需要一个循环来迭代字符串。摆脱外部while
循环,您不需要跟踪字符串中的位置。
考虑到这些建议,您的代码将如下所示:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
答案 2 :(得分:7)
一种简单的方法如下:
def count_letters(word, char):
return word.count(char)
或者,还有另一种方法直接计算每个元素:
from collections import Counter
Counter('banana')
当然,您可以指定一个元素,例如
Counter('banana')['a']
答案 3 :(得分:6)
您的return
已进入您的for循环!小心缩进,你希望行return count
在循环之外。因为for循环遍历word
中的所有字符,所以外部while循环完全不需要。
清理版本:
def count_letters(word, to_find):
count = 0
for char in word:
if char == to_find:
count += 1
return count
答案 4 :(得分:3)
我看到一些错误。
char
,因此会导致问题。if char == word[count]
而不是word[some index]
您甚至不需要while
。如果将char参数重命名为search
,
for char in word:
if char == search:
count += 1
return count
答案 5 :(得分:3)
你有很多问题:
此代码修复了所有这些错误:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
更简洁的方法是使用生成器表达式:
def count_letters(word, char):
return sum(char == c for c in word)
或者只使用为您执行此操作的内置方法count:
print 'abcbac'.count('c')
答案 6 :(得分:2)
或者您可以使用:
mystring = 'banana'
number = mystring.count('a')
答案 7 :(得分:1)
count_letters=""
number=count_letters.count("")
print number
答案 8 :(得分:0)
def count_letter(word, char):
count = 0
for char in word:
if char == word:
count += 1
return count #Your return is inside your for loop
r = count_word("banana", "a")
print r
3
答案 9 :(得分:0)
x=str(input("insert string"))
c=0
for i in x:
if 'a' in i:
c=c+1
print(c)
答案 10 :(得分:0)
UITableViewCell
返回1而不是2!
我认为该方法使用等于子字符串长度的步长迭代字符串(或列表),因此它不会看到这种东西。
所以,如果你想要一个&#34;完全计数&#34;你必须使用正确的第1步循环实现自己的计数器
如果我错了,请纠正我......
答案 11 :(得分:0)
下面的程序以一个字符串作为输入,输出一个pandas DataFrame,表示字母数。
样本输入
你好
样本输出
字符 频率
0 h 1
1 e 1
2 l 2
3 o 1
import pandas as pd
def count_letters(word, char):
return word.count(char)
text = input()
text_split = text.split()
list1 = []
list2 = []
for i in text_split:
for j in i:
counter = count_letters (text, j)
list1.append(j)
list2.append(counter)
dictn = dict(zip(list1, list2))
df = pd.DataFrame (dictn.items(), columns = ['char', 'freq.'])
print (df)