2017-03-05 78 views
3

我正在计算一个字母出现在列表中的次数。但是,每当我使用计数功能和输入我想我算回报信= 0如何计算使用python显示一个字母的次数?

这是代码:

lab7 = ['Euclid','Archimedes','Newton','Descartes','Fermat','Turing','Euler','Einstein','Boole','Fibonacci', 'Nash'] 

print(lab7[1]) #display longest name - a 

print(lab7[10]) #display shortest name - b 

c = [ word[0] for word in lab7]  
#display str that consists of 1st letter from each name in list - c 
print(c) 

d = [ word[-1] for word in lab7] 
#display str that consists of last letter from each name in list - d 
print(d) 

**x = input('Enter letter you would like to count here') 
lab7.count('x') 
e = lab7.count('x') 
print(e)** 

这是一个不正常的部分代码。我不断收到 - >

Archimedes 
Nash 
['E', 'A', 'N', 'D', 'F', 'T', 'E', 'E', 'B', 'F', 'N'] 
['d', 's', 'n', 's', 't', 'g', 'r', 'n', 'e', 'i', 'h'] 
Enter letter you would like to count here s 
0 

作为我的输出。

+0

在计数通话,要传递的字母x代替变量x。您可能应该写'lab7.count(x)'和'lab7.count(x)'来代替。 – Nulano

+1

为什么你难以编码最短和最长的字符串的位置?我高度怀疑这将“通过你的任务” –

+0

我不明白为什么它是upvoted。这是'x'和''x'之间的拼写错误 –

回答

1
lst = ['Euclid', 'Archimedes', 'Newton', 'Descartes', 'Fermat', 
     'Turing', 'Euler', 'Einstein', 'Boole', 'Fibonacci', 'Nash'] 

letter = input("Enter the letter you would like to count: ") 

count = "".join(lst).lower().count(letter) 

print(count) 

这将加入列表中包含的所有单词,并生成单个字符串。字符串将被降低以便计算大写和小写字母(例如,A等于a)。如果大写和小写字母不能一视同仁,则可以删除.lower()

要检查是否输入的是只有一个字母:

lst = ['Euclid', 'Archimedes', 'Newton', 'Descartes', 'Fermat', 
     'Turing', 'Euler', 'Einstein', 'Boole', 'Fibonacci', 'Nash'] 

letter = input("Enter the letter you would like to count: ") 

while not letter.isalpha() or len(letter) != 1: 
    letter = input("Not a single letter. Try again: ") 

print("".join(lst).lower().count(letter)) 
+0

您需要降低输入,并可能将其限制为1个字符。 –

+0

您可以删除生成器的列表理解。 'sum(word.lower()....)' –

+0

太快浏览问题,并假设每个单词的出现次数应单独计算并在之后返回。 –

4

如果你想跻身list所有单词数给定的人物的出现次数,那么你可以尝试:

input_char = input('Enter letter you would like to count here') 
print "".join(lab7).count(input_char) 

如果你想成为区分insensetive的逻辑中,你可以转换输入字符使用.lower()

你先串联的list所有元素得到一个统一的字符串,然后使用count方法来获取给定的人物的出现次数小写。

+0

从x –

+0

@ cricket_007我假定输入视为'x'如图OP'lab7.count(“X”)删除引号基于' – ZdaR

+0

的'X ='线,我猜不是 –

1

@ ZdaR的解决方案是最好的,如果你想算的字母只有一次。如果您想在同一字符串上多次获取字母,则使用collection.Counter会更快。例如:

from collections import Counter 

counter = Counter("".join(lab7)) 
while True: 
    input_char = input('Enter letter you would like to count here') 
    print counter[input_char] 
0

您还可以使用总和+发电机:

letter = letter.lower() 
count = sum(w.lower().count(letter) for w in lab7) 
相关问题