cs50 readability pset6 python этот код должен подсчитывать количество слов, предложений и букв, но это не так - PullRequest
1 голос
/ 03 марта 2020
from cs50 import get_string
letter=0
sentence=0
word=0
text = get_string("Text: ")
n = len(text)
for i in range(n):
    if text[i].isalnum()==True:
        letter=letter+1
for i in range(n):
    if text[i].isspace()==True and text[i+1].isalnum()==True:
        word=word+1
for i in range(n):
    if text[i]=="?" or text[i]=="." or text[i]=="!":
        sentence=sentence+1
grade = round (0.0588 * ((100 * letter) / word) - 0.296 * ((100 * sentence) / word) - 15.8)
if grade<1:
    print("Before Grade 1")
elif grade < 16:
    print(f"Grade {grade}")
else :
    print("Grade 16+");

https://submit.cs50.io/check50/d3897b249b2ca6ea937d023c25c1607af52ea5cd проверки плохие

может быть, я делаю что-то ложное в этом

Ответы [ 4 ]

1 голос
/ 03 марта 2020

У вас есть пара проблем:

Первый использует Текст в начале (кстати, не стандартный) против текст . Это должно немного помочь вам.

Во-вторых, вы на самом деле не используете метод get_string . Теперь, возможно, это работает для вас; Я просто бросил его в блокнот Juypter, потому что хотел работать с ним, как REPL. Но, предположим, что нет, давайте кратко пройдемся по нему.

Среда Conda или установка pip с cs50 и запустите:

enter image description here

Запускается хорошо без ошибок. Хорошо. Теперь первый блок:

letter=0
sentence=0
word=0
Text = get_string("Text: ")

Это (потому что я использую ноутбук) оценивается как:

Текст: Нет

Теперь, возможно, есть что-то конкретное c, которое вы должны использовать в библиотеке cs50, но я использовал ввод - и изменил текст на строчные.

Но вы были на правильном пути.

0 голосов
/ 29 апреля 2020

Попробуйте инициализировать слово в 1, убрав «round» перед CLI и добавив «round» к вам со второго до последнего оператора печати. Пример: {round (grade)}

У меня был похожий код, у меня работал.

0 голосов
/ 20 марта 2020

1) Инициализированное слово до 1; 2) Добавлено следующее, чтобы предположить, что буква является любым символом в нижнем / верхнем регистре: для i в диапазоне (n): если text [i] .isalnum () или text [i] .isupper () или text [i] .islower () == Верно: буква = буква + 1 3) Удалено для подсчета слов: и текста [i + 1] .isalnum () == Верно:

Теперь ваш код 10/10!

0 голосов
/ 04 марта 2020

Есть несколько проблем с тем, как программа считает слова. Это делается путем подсчета пробелов (хороший план), но

  1. Как будет учитываться последнее слово? Это не будет (потому что это не "сопровождается" пробелом). Вы могли бы рассмотреть инициализацию слова в 1 (вместо 0).
  2. Будет ли он правильно считать слова в следующем отрывке? Опять нет. Это if text[i].isspace()==True and text[i+1].isalnum()==True: учитывает только пробелы, за которыми следуют az, AZ или 0-9. В этом случае он не будет считать пробел после «Алисы», поэтому количество слов неверно.

думал, что Алиса "без картинок или разговора?"

Примечание: доступ к i + 1 в i l oop вообще говоря очень плохая идея; это будет вне диапазона, когда я достигну максимума. Он не потерпел неудачу в тестировании, потому что ни один протестированный текст не заканчивается пробелом Если вы хотите увидеть ошибку, введите текст, который заканчивается пробелом.

...