2017-03-05 3 views
3

J'essaie de compter combien de fois une lettre apparaît dans ma liste. Cependant, chaque fois que j'utilise la fonction de comptage et entrée la lettre que je veux compter mon retour = 0Comment puis-je compter le nombre de fois qu'une lettre apparaît en utilisant python?

Voici le code:

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)** 

Ceci est la partie du code qui ne fonctionne pas. Je continue à obtenir ->

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 

Comme ma sortie.

+0

Dans l'appel de comptage, vous passez dans la lettre x au lieu de la variable x. Vous vouliez probablement écrire 'lab7.count (x)' et 'lab7.count (x)' à la place. – Nulano

+1

Pourquoi êtes-vous en train de coder en dur les positions de la chaîne la plus courte et la plus longue? Je doute fortement que "passera votre devoir" –

+0

Je ne vois pas pourquoi il est upvoted. C'est juste une faute de frappe entre «x» et «x» –

Répondre

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) 

Qui joindra tous les mots contenus dans la liste et aboutira à une chaîne unique. La chaîne sera ensuite abaissée afin de compter à la fois les majuscules et les minuscules (par exemple A étant égal à a). Si les lettres majuscules et minuscules ne doivent pas être traitées de la même manière, .lower() peut être supprimé.

Pour vérifier si l'entrée est une seule lettre:

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

Vous devez réduire l'entrée et éventuellement la limiter à 1 caractère. –

+0

Vous pouvez supprimer la compréhension de liste pour un générateur. 'sum (word.lower() ....)' –

+0

A parcouru la question trop rapidement et supposé que les occurrences de chaque mot devaient être comptées séparément et renvoyées après. –

4

Si vous voulez compter les occurences d'un caractère donné parmi tous les mots du list alors vous pouvez essayer:

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

Si vous voulez que la logique à cas insensetive, l'on peut convertir le caractère d'entrée à l'aide de minuscules .lower()

Vous d'abord concaténer tous les éléments de list pour obtenir une chaîne unifiée, puis utiliser la méthode count pour obtenir les occurences d'un caractère donné.

+0

Enlever les citations du x –

+0

@ cricket_007 J'ai supposé que l'entrée était 'x' comme indiqué par OP' lab7.count ('x') ' – ZdaR

+0

Basé sur la ligne' x = ', Je suppose que non –

1

@ solution de Zdar est préférable si vous voulez compter les lettres juste une fois. Si vous voulez obtenir les lettres plus d'une fois sur la même chaîne, il sera plus rapide d'utiliser le collection.Counter. Exemple:

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

Vous pouvez également utiliser la somme + un générateur:

letter = letter.lower() 
count = sum(w.lower().count(letter) for w in lab7)