2017-08-14 5 views
0

Je travaille sur cette question et ne peux pas trouver la bonne réponse, mais j'ai réussi à creuser un trou plus grand & me confondre. Donc, si quelqu'un peut fournir la clarté:Comptage, trouver une certaine lettre et le pourcentage

MODE D'EMPLOI:

Ecrire un analyze_text fonction qui reçoit une chaîne en entrée. Votre fonction devrait compter le nombre de caractères alphabétiques (a à z, ou A à Z) dans le texte et aussi garder la trace du nombre de lettres 'e' (majuscules ou minuscules).

Votre fonction doit renvoyer une analyse du texte sous la forme d'une chaîne phrasé exactement comme ceci: «Le texte contient 240 caractères alphabétiques, dont 105 (43,75%) sont « e » »

Vous devrez utiliser la fonction isalpha.

MON CODE jusqu'à présent: def analyze_text (texte): count = 0 letter_count = 0

for char in text: 
    if char.isalpha(): 
     count += 1 
for e in text: 
    if e == "e" or e =="E": 
     letter_count += 1 
    p = float(letter_count)/float(count) * 100 

analyze.text = "The text contains {0} alphabetic characters, of 
which {1} ({2}) are 'e'." 
print(analyze_text.format(count += 1, letter_count += 1, p)) 

TESTS that are given: 
# Note that depending on whether you use str.format or 
string concatenation 

# your code will pass different tests. Code passes either 
# tests 1-3 OR tests 4-6. 

from test import testEqual 

# Tests 1-3: solutions using string concatenation should pass these 
text1 = "Eeeee" 
answer1 = "The text contains 5 alphabetic characters, 
of which 5 (100.0%) are 'e'." 
testEqual(analyze_text(text1), answer1) 

text2 = "Blueberries are tasteee!" 
answer2 = "The text contains 21 alphabetic characters, of 
which 7 (33.3333333333%) are 'e'." 
testEqual(analyze_text(text2), answer2) 

text3 = "Wright's book, Gadsby, contains a total of 0 of 
that most common symbol ;)" 
answer3 = "The text contains 55 alphabetic characters, 
of which 0 (0.0%) are 'e'." 
testEqual(analyze_text(text3), answer3) 

# Tests 4-6: solutions using str.format should pass these 
text4 = "Eeeee" 
answer4 = "The text contains 5 alphabetic characters, 
of which 5 (100%) are 'e'." 
testEqual(analyze_text(text4), answer4) 

text5 = "Blueberries are tasteee!" 
answer5 = "The text contains 21 alphabetic characters, 
of which 7 (33.33333333333333%) are 'e'." 
testEqual(analyze_text(text5), answer5) 

text6 = "Wright's book, Gadsby, contains a total of 
0 of that most common symbol ;)" 
answer6 = "The text contains 55 alphabetic characters, 
of which 0 (0%)  are 'e'." 
testEqual(analyze_text(text6), answer6) 
+0

vous devez montrer quelles erreurs vous obtenez sinon vous ne recevrez aucune aide mais vous aurez beaucoup de votes vers le bas – aydow

+1

Très proche, mais au lieu d'imprimer la chaîne de réponse, vous devez le retourner. En outre, vous pourriez être un peu plus efficace en incrémentant count et letter_count dans la même boucle. –

Répondre

0

Il y a seulement deux choses mal décrites ci-dessous dans les commentaires:

def analyze_text(text): 
    count = 0 
    letter_count = 0 
    for char in text: 
     if char.isalpha(): 
      count += 1 
    for e in text: 
     if e == "e" or e == "E": 
      letter_count += 1 
    p = float(letter_count)/float(count) * 100 

    # here, you put a period instead of an underscore in analyze_text 
    # you also forgot to put the percent sign "%" 
    analyze_text = "The text contains {0} alphabetic characters, of which {1} ({2}%) are 'e'." 

    # you don't need to add 1 to count and letter_count using += 1 
    # they are already the correct values 
    # also, you should return the string here, not print it 
    return analyze_text.format(count, letter_count, p) 

Ce code devrait vous obtenir les résultats souhaités que vous avez montré dans la question

0
def analyze_text(text, letter='e'): 
    n = len([x for x in text if x.isalpha()]) 
    freq = text.lower().count(letter) 
    percent = float(freq)/n * 100 
    return "The text contains {} alphabetic characters, of which {} ({}%) are '{}'.".format(n, freq, percent, letter) 
0

En jetant un coup d'œil sur votre travail, il semble que vous n'utilisiez pas correctement vos champs de remplacement. Votre code:

print(analyze_text.format(count += 1, letter_count += 1, p)) 

Version correcte:

print(output.format(count, letter_count, p)) 

Voici ce que votre fonction devrait ressembler à:

def analyze_text(text): 
    count = 0 
    letter_count = 0 
    for char in text: 
     if char.isalpha(): 
      count += 1 
    for e in text: 
     if e == "e" or e == "E": 
      letter_count += 1 
     p = float(letter_count)/float(count) * 100 
    output = "The text contains {0} alphabetic characters, of which {1} ({2}%) are 'e'." 
    print(output.format(count, letter_count, p)) 

Vous devez traiter votre formatter comme une liste. Vos champs de remplacement correspondent à l'ordre dans la liste. J'espère que cela clarifie les choses.

P.S. - Vous avez oublié le signe% dans le message de sortie.