[英]Letter Count on a string
Python新手在这里。 我正在尝试计算给定字符串中字母“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')
其他答案显示了您的代码有什么问题。 但是,如果您不只是为了练习而这样做,那么还有一种内置的方法可以做到这一点:
>>> 'banana'.count('a')
3
丹本给出了这个修正版:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
这里有一些其他方法可以做到这一点,希望它们能教你更多关于 Python 的知识!
类似,但更短的for
循环。 利用布尔值可以在为真时变为 1,为假时变为 0 的事实:
def count_letters(word, char):
count = 0
for c in word:
count += (char == c)
return count
短 for 循环通常可以变成列表/生成器推导式。 这将创建与每个字母对应的整数列表,如果字母不匹配char
则为 0,如果匹配则为 1,然后将它们相加:
def count_letters(word, char):
return sum(char == c for c in word)
下一个过滤掉所有与char
不匹配的char
,并计算剩余的数量:
def count_letters(word, char):
return len([c for c in word if c == char])
一个问题是您使用count
来指代您正在检查的单词中的位置和您看到的char
数,并且您使用char
来指代您正在检查的输入字符和当前字符串中的字符。 请改用单独的变量。
另外,将return
语句移到循环外; 否则您将始终在检查第一个字符后返回。
最后,您只需要一个循环来遍历字符串。 摆脱外部while
循环,您将不需要跟踪字符串中的位置。
根据这些建议,您的代码将如下所示:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
一个简单的方法如下:
def count_letters(word, char):
return word.count(char)
或者,还有另一种方法直接计算每个元素:
from collections import Counter
Counter('banana')
当然,您可以指定一个元素,例如
Counter('banana')['a']
你的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
你有很多问题:
此代码修复了所有这些错误:
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')
我看到了一些错误。
char
,因此会导致问题。if char == word[count]
而不是word[some index]
你甚至不需要while
。 如果您将 char 参数重命名为search
,
for char in word:
if char == search:
count += 1
return count
或者您可以使用:
mystring = 'banana'
number = mystring.count('a')
count_letters=""
number=count_letters.count("")
print number
"banana".count("ana")
返回 1 而不是 2 !
我认为该方法以等于子字符串长度的步长迭代字符串(或列表),因此它看不到这种东西。
因此,如果您想要“完整计数”,则必须使用步骤 1 的正确循环来实现自己的计数器
如果我错了纠正我...
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
x=str(input("insert string"))
c=0
for i in x:
if 'a' in i:
c=c+1
print(c)
以下程序将一个字符串作为输入并输出一个表示字母数的pandas DataFrame。
样本输入
你好
样本输出
字符频率
0 小时 1
1 e 1
2 升 2
3 到 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.