2016-11-20 1 views
0

Schreiben Sie eine Funktion analyze_text, die eine Zeichenfolge als Eingabe erhält. Die Funktion sollte die Anzahl der alphabetischen Zeichen (a bis z oder A bis Z) im Text zählen und auch die Anzahl der Buchstaben "e" (Groß- oder Kleinbuchstaben) angeben.Python-Funktion, die die Anzahl der alphabetischen Zeichen zählt, verfolgt, wie oft "e" angezeigt wird

Die Funktion sollte eine Analyse des Textes, so etwas wie dies zurück:

Der Text enthält 240 Buchstaben, von denen 105 (43,75%) sind ‚e‘.

Ich muss den Einsatz der isalpha Funktion machen, die wie folgt verwendet werden kann:

"a".isalpha() # => evaluates to True 
"3".isalpha() # => evaluates to False 
"&".isalpha() # => False 
" ".isalpha() # => False 

mystr = "Q" 
mystr.isalpha() # => True 

Die Funktion sollte folgende Prüfungen bestehen:

from test import testEqual 

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) 

Also habe ich versucht:

def analyze_text(text): 

    text = input("Enter some text") 
    alphaChars = len(text) 

#count the number of times "e" appears 
    eChars = text.count('e') 

#find percentage that "e" appears 
    eCharsPercent = eChars/alphaChars 

    print("The text contains" + alphaChars + "alphabetic characters, of 
    which" + eChars + "(" + eCharsPercent + ") are 'e'.") 

from test import testEqual 

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) 

Wie Sie sehen können, nutzt das, was ich ausprobiert habe, nicht die Isalpha-Funktion (ich weiß nicht, wie/wo ich i t). Außerdem gibt die Funktion nicht zurück, ob die Tests bestanden wurden oder nicht. Visualisieren Python unterstützt nicht "Test", und der Texteditor, den ich im Buch verwende, sagt, dass ich einen Einrückungsfehler habe (?) Ich weiß nicht, wo ich anfangen soll - bitte helfen Sie.

Screenshot of Book Text Editor

EDIT: Jetzt Empfang "Typeerror: nicht verketten 'str' und 'int' Objekte auf Linie 12" (die Zeile, die mit "print" beginnt).

+1

in analyse_text die Druckanweisung ist auf 2 Zeilen ohne Backslash. Hier ist einer Ihrer Fehler ... –

+1

Einrückungsfehler bedeutet, dass Sie Ihren Code nicht korrekt eingerückt haben. Da Python zum Gruppieren von Blöcken Einrückungen anstelle von geschweiften Klammern ({,}) verwendet, müssen Sie sicherstellen, dass Sie Leerzeichen und Tabulatoren korrekt verwenden. Mischen Sie Tabulatoren und Leerzeichen nicht und verwenden Sie immer die gleiche Anzahl an Tabs/Leerzeichen. – anroesti

+0

@ Jean-FrançoisFabre du hast Recht Ich habe ein ")" vermisst. Ich habe das behoben, und nun erhalte ich eine neue Fehlermeldung: TypeError: In Zeile 12 können die Objekte 'str' und 'int' nicht verkettet werden. Das ist die Zeile, die mit "print" beginnt. – Sean

Antwort

1

Hier ist ein analyse_text Funktion, die die Tests bestanden:

def analyze_text(text): 
    filtered = [c.lower() for c in text if c.isalpha()] 
    cnt = filtered.count('e') 
    result = "The text contains {} alphabetic characters, of which {} ({}%) are 'e'.".format(len(filtered),cnt,str(100.0*cnt/len(filtered))[:13]) 
    return result 
  • erstellen eine Liste aller ALPHANUM Zeichen, Kleinbuchstaben, eine schöne Liste Verständnis mit (das ist der Teil, den Sie fehlten), erstellt filtered Variable
  • Zählung Brief e (got Sie, dass rechts),
  • Format-String accordignly cnt Zähler
  • erzeugt (ein bisschen wie ein Hack verwendet, um die 33.3333333 ri zu erhalten ght, vielleicht kann etwas Besseres getan werden). Die genaue Zeichenfolge ist ein wenig sinnlos ..., erstellt result Zeichenkette, die die Zeile nach
zurückgegeben wird
+0

Da ich gerade Python (und Codierung) lerne, ist analyze_text ein Funktionsname - aber was sind "gefiltert", "cnt" und "Ergebnis"? Variablen? Außerdem macht deine Antwort Sinn, danke. – Sean

+0

Ich stoße auf ein Problem mit Ihrem Hack, wenn ich die Aufgabe abschicke .... das Ergebnis muss 5 weitere Ziffern zurückgeben, um genau der Lösung zu entsprechen. Siehe diesen Screenshot: http://i.imgur.com/6zi5e2c.jpg – Sean

+0

Es macht nichts, dass ich es herausfinden konnte - ich habe den Spleiß von [: 13] auf [: 18] geändert, um fünf weitere Ziffern zu erzwingen. Vielen Dank. – Sean

Verwandte Themen