2017-05-03 91 views
-3

定義一個函數lineStats(),它接受一個參數: 1.段落,一串文字和空格 函數返回一個包含每行中的元音。 例如,編寫一個函數,返回每行元音數目列表

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

這就是我。我已經得到了7的輸出,但不能使它2,5。我試圖爲每一行製作一個計數器,但這並不奏效,有什麼建議?

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

的可能的複製[計數的字符串的Python元音(http://stackoverflow.com/questions/19967001/count-vowels-in-string -python) – Prune

回答

0

試試這個

創建此功能

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

現在

from collections import Counter 

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

一旦你的列表解析開始變爲_that_long,你應該認真考慮使用常規的for循環。使用列表理解獲得的簡潔遠遠超過了使用常規for循環的可讀性。 –

+0

@ChristianDean投降?決不!!! ;-)認真:在這種情況下,我寧願創建函數(我剛剛做過)。 :-) – Elmex80s

+0

好的,現在你已經將一些代碼分成了一個函數,我猜這次我會讓它滑動;) –

0

少你的代碼需要改變,其他的答案提供了改進。

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] 

的問題指出,它希望得到的結果是計數的list,因此更改counter是一個list,我們可以append到,然後使用該列表存儲元音計數每一行。這可能是唯一的主要更改爲您的代碼,您需要獲得所需的輸出。

但是,在「段落」中存在換行符('\n')的問題,所以我們str.split()該段落變成個別行之前輸入for -loop。這將打破每一行的計數,而不是你得到的總數。

0

這是你當前的代碼的適應

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] 
相關問題