2017-05-03 6 views
-3

Definieren Sie eine Funktion lineStats(), die einen Parameter akzeptiert: 1. Absatz, eine Folge von Wörtern und Leerstellen Die Funktion gibt eine Liste zurück, die die Anzahl enthält Vokale in jeder Zeile. zum BeispielSchreiben Sie eine Funktion, die eine Liste für die Anzahl der Vokale pro Zeile zurückgibt

t="Apple\npear and kiwi" 
print(lineStats(t)) 
[2,5] 

Dies ist, was ich habe. Ich habe die Ausgabe auf 7 gebracht, aber nicht in der Lage, 2,5 zu machen. Ich habe versucht, einen Zähler für jede Zeile zu machen, aber das hat nicht funktioniert, irgendwelche Vorschläge?

def lineStats(paragraph): 
    vowels = "AEIOUaeiou" 
    for line in paragraph: 
     for word in line: 
      for letter in word: 
       if letter in vowels: 
        counter +=1 
       else: 
        continue 

    return counter 

t = "Apple\npear and kiwi" 
print(lineStats(t)) 
+1

Mögliche Duplikat [Count Vokale in String Python] (http://stackoverflow.com/questions/19967001/count-vowels-in-string -python) – Prune

Antwort

0

Try this

diese Funktion erstellen

def temp(x):  
    return sum(v for k, v in Counter(x).items() if k.lower() in 'aeiuo') 

Jetzt

from collections import Counter 

print [temp(x) for x in lines.split('\n')] 
+0

Sobald Ihre Listen-Comprehensions _that_ lang werden, sollten Sie ernsthaft in Betracht ziehen, reguläre for-Schleifen zu verwenden. Die Knappheit, die durch die Verwendung eines Listenverständnisses erreicht wird, wird durch die Lesbarkeit der Verwendung einer regulären For-Schleife weit überwiegt. –

+0

@ChristianDean Surrender? Noch nie!!! ;-) Im Ernst: In diesem Fall würde ich lieber Funktionen erstellen (was ich gerade getan habe). :-) – Elmex80s

+0

Okay, jetzt, da du etwas von deinem Code in eine Funktion aufgespalten hast, schätze ich, dass ich es diesmal gleiten lasse;) –

0

Ändern so wenig Code wie nötig, bieten andere Antworten Verbesserungen.

def lineStats(paragraph): 
    counter = [] 
    vowels = "AEIOUaeiou" 
    lines = paragraph.split('\n') 
    for line in lines: 
     count = 0 
     for word in line: 
      for letter in word: 
       if letter in vowels: 
        count +=1 
       else: 
        continue 
     counter.append(count) 
    return counter 

t = "Apple\npear and kiwi" 
print(lineStats(t))  # [2, 5] 

Das Problem heißt es, das Ergebnis will ein list von Zählungen sein, so counter Wechsel ein list zu sein, dass wir append, dann diese Liste verwenden, die Vokal für jede Zeile zählen zu speichern. Das kann die einzige Haupt Änderung an Ihrem Code sein, den Sie benötigen, um die erforderliche Ausgabe zu erhalten.

Allerdings gibt es die Bedenken der Zeilenumbrüche ('\n') in der "Absatz", so dass wir str.split() den Absatz in einzelne Zeilen vor dem Eintritt in die for -loop. Dadurch wird die Zählung für jede Zeile getrennt, anstatt die Gesamtzahl, die Sie erhalten haben.

0

Hier ist eine Anpassung Ihrer aktuellen Code

def lineStats(paragraph): 
    vowels = "AEIOUaeiou" 
    counter = [] 
    current_line_count = 0 
    newline = "\n" 

    for letter in paragraph: 
     if letter in vowels: 
      current_line_count += 1 
     elif letter == newline: 
      counter.append(current_line_count) 
      current_line_count = 0 
    counter.append(current_line_count) 
    return counter 
0
t="Apple\npear and kiwi" 

def lineStats(p): 
    #find vowels in each line and sum the occurences using map 
    return map(sum, [[1 for e in f if e in "AEIOUaeiou"] for f in p.split('\n')]) 

lineStats(t) 
Out[601]: [2, 5] 
Verwandte Themen