CS50 2021:Python 错误计算的可读性

CS50 2021: Readability in Python wrong calculation

可能这完全是愚蠢的事情,但我被困住了,可能需要社区的帮助。在 CS50 2021 第 6 周中,我们必须进行我们已经在 C 中进行的可读性计算。

任务:“编写一个程序,首先要求用户输入一些文本,然后根据 Coleman-Liau 公式输出文本的等级水平,与您在问题集 2 中所做的完全相同,只是这次您的程序应该写成 Python。回想一下 Coleman-Liau 指数计算为 0.0588 * L - 0.296 * S - 15.8,其中 L 是文本中每 100 个单词的平均字母数,S 是文本中每 100 个单词的平均句子数。

它应该是这样的:

Text: Congratulations! Today is your day. You're off to Great Places! You're off and away!

Grade 3

不幸的是,我的代码抛出了 11 级,我真的再也看不到错误了。

怎么了?

from cs50 import get_string
import re

# ask user for input
text = get_string("Text: ")

# get informations out of text
number_letters = 0
for i in range(len(text)):
    if text[i].isalpha():
        number_letters += 1

number_words = len(text.split())
number_sentences = len(re.split(r'[.!?]', text))-1

# calculate index
L = number_letters * (100 / number_words)
S = number_sentences * (100 / number_words)

index = round(0.0588 * L - 0.296 * S - 15.8)
index2 = 0.0588 * (100 * float(number_letters) / float(number_words)) - 0.296 * (100 * float(number_sentences) / float(number_words)) - 15.8
print("index2:", index2)

#print("Index", index)
print("Letters:", number_letters)
print("Words:", number_words)
print("Sentence:", number_sentences)

# print grades
if index >= 16:
    grade = "Grade 16+"
elif index <= 1:
    grade = "Before Grade 1"
else:
    grade = f"Grade {index}"

print(grade)

使用 len(text) 夸大了 number_letters 的计算。那是输入中 个字符 的总数,而不是(根据规范):

... a letter is any lowercase character from a to z or any uppercase character from A to Z

迭代是你的朋友。

终于找到解决办法了。我更新了上面的解决方案。 Coleman-Liau 公式不采用文本的长度,而实际上只是不带任何空格和非字母字符的字母数。通过包含一个简单的 for-if 循环,结果看起来完全不同。