Python newb在这里.我试图计算给定字符串中字母"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')
Run Code Online (Sandbox Code Playgroud)
Cla*_*diu 39
其他答案显示您的代码有什么问题.但是,如果您不仅仅是为了练习,还有一种内置的方法可以做到这一点:
>>> 'banana'.count('a')
3
Run Code Online (Sandbox Code Playgroud)
Danben给出了这个更正版本:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
Run Code Online (Sandbox Code Playgroud)
以下是其他一些方法,希望他们能够教你更多关于Python的知识!
类似但更短的for循环.利用布尔可以变为1的事实,如果为真,则为0,如果为假,则为0:
def count_letters(word, char):
count = 0
for c in word:
count += (char == c)
return count
Run Code Online (Sandbox Code Playgroud)
循环的简称通常可以转换为列表/生成器的理解.这将创建一个与每个字母对应的整数列表,如果字母不匹配则为0,如果为,则为char1,然后将它们相加:
def count_letters(word, char):
return sum(char == c for c in word)
Run Code Online (Sandbox Code Playgroud)
下一个过滤掉所有不匹配的字符char,并计算剩余的字符数:
def count_letters(word, char):
return len([c for c in word if c == char])
Run Code Online (Sandbox Code Playgroud)
dan*_*ben 11
一个问题是你count用来引用你正在检查的单词中的位置,以及char你看到的数字,并且你char用来引用你正在检查的输入字符和当前字符.串.请改用单独的变量.
另外,将return语句移出循环; 否则你将在检查第一个字符后总是返回.
最后,您只需要一个循环来遍历字符串.摆脱外部while循环,您不需要跟踪字符串中的位置.
根据这些建议,您的代码将如下所示:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
Run Code Online (Sandbox Code Playgroud)
小智 7
一个简单的方法如下:
def count_letters(word, char):
return word.count(char)
Run Code Online (Sandbox Code Playgroud)
或者,还有另一种方法可以直接计算每个元素:
from collections import Counter
Counter('banana')
Run Code Online (Sandbox Code Playgroud)
当然,您可以指定一个元素,例如
Counter('banana')['a']
Run Code Online (Sandbox Code Playgroud)
你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
Run Code Online (Sandbox Code Playgroud)