2013-09-27 3 views
-1

Я учусь Python, используя Как думать, как интерактивное издание Computer Scientist, и один из упражнений имеют следующее требование:Нужна помощь выяснить, что случилось с моим кодом Python

«присвоенный переменный в вашем запрограммируйте строку с тремя кавычками, которая содержит ваш любимый абзац текста - возможно, стихотворение, речь, инструкции, чтобы испечь торт, некоторые вдохновляющие стихи и т. д.

Напишите функцию, которая учитывает количество буквенных символов (через z или A через Z), а затем отслеживает, сколько букв «e». Ваша функция должна распечатать анализ текста следующим образом:

Ваш текст содержит 243 алфавитных символа, из которых 109 (44,8%) являются «e».

Я написал код, который (мне), кажется, делает именно то, что меня просили, но когда я проверяю их решение, чтобы проверить свой код, я получаю разные результаты.

Моего код:

text = ''' "If the automobile had followed the same development cycle as the computer, a 
Rolls-Royce would today cost $100, get a million miles per gallon, and explode 
once a year, killing everyone inside." 
-Robert Cringely''' 

lowercase_text = text.lower() 

def charCounter(some_text): 
    e_counter = 0 
    char_counter = 0 

    for char in lowercase_text:  
     if char == 'e': 
      e_counter = e_counter + 1 
     else: 
      char_counter = char_counter + 1 

    return ("Your text contains " + str(char_counter) + " alphabetic characters, of which " + str(e_counter) + " (" + str((e_counter/char_counter) * 100) + "%)" + "are 'e'.") 

Мой код вывод: Код

Your text contains 188 alphabetic characters, of which 25 (13.297872340425531%)are 'e'. 

Решения предоставленного авторами: выход

def count(p): 
    lows="abcdefghijklmnopqrstuvwxyz" 
    ups="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

    numberOfe = 0 
    totalChars = 0 
    for achar in p: 
     if achar in lows or achar in ups: 
      totalChars = totalChars + 1 
      if achar == 'e': 
       numberOfe = numberOfe + 1 


    percent_with_e = (numberOfe/totalChars) * 100 
    print("Your text contains", totalChars, "alphabetic characters of which", numberOfe, "(", percent_with_e, "%)", "are 'e'.") 


p = '''"If the automobile had followed the same development cycle as the computer, a 
Rolls-Royce would today cost $100, get a million miles per gallon, and explode 
once a year, killing everyone inside." 
-Robert Cringely''' 

count(p) 

Кода автор решением:

Your text contains 166 alphabetic characters of which 25 (15.060240963855422 %) are 'e'. 

Может кто-нибудь объяснить, что я делаю неправильно? Я не понимаю, почему есть разница в результатах.

+0

Пожалуйста, потребуется некоторое время, чтобы научитесь форматировать свои сообщения в Stack Overflow. –

ответ

4

Ваше решение не проверяет, действительно ли символ является буквенно-цифровым и считает пробелы. Кроме того, 'e' не добавляется к полному количеству символов.

Проблема заключается в вашей для цикла:

for char in lowercase_text:  
    if char == 'e': 
     e_counter = e_counter + 1 
    else: 
     char_counter = char_counter + 1 

Он должен выглядеть следующим образом:

for char in lowercase_text:  
    # Check if we have an alphanumeric string and continue the loop if not 
    if not char.isalpha(): 
     continue 
    # Increment the total character counter 
    char_counter += 1 
    # Additionaly, increment the 'e' counter if we have an 'e' 
    if char == 'e': 
     e_counter += 1 
+0

Спасибо, что объяснили мне эту проблему. Я пробовал ваше решение и теперь возвращает правильный результат. – Radu

0

Вы включаете знаки пунктуации, числа и пробелы в подсчете, которые вы не должны делать.

0

У меня нет никакого решения проблемы для него уже решена (без downvotes пожалуйста), Я просто хочу представить более питоновский способ решения этой проблемы (не требуется никаких расходов):

import string 

text = ''' "If the automobile had followed the same development cycle as the computer, a 
Rolls-Royce would today cost $100, get a million miles per gallon, and explode 
once a year, killing everyone inside." 
-Robert Cringely''' 

def check_character(text, character): 
    text = text.lower() 
    count_sum = len(list(c for c in text if c in string.ascii_lowercase)) 
    count_char = len(list(c for c in text if c == character)) 
    return count_sum, count_char, 100 * count_char/float(count_sum) 

char = 'e' 
result = check_character(text, char) + (char,) 

print("Your text contains {} alphabetic characters of which {} ({:.2f}%) are '{}'.".format(*result)) 
Смежные вопросы