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 循环,结果看起来完全不同。
可能这完全是愚蠢的事情,但我被困住了,可能需要社区的帮助。在 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
toz
or any uppercase character fromA
toZ
迭代是你的朋友。
终于找到解决办法了。我更新了上面的解决方案。 Coleman-Liau 公式不采用文本的长度,而实际上只是不带任何空格和非字母字符的字母数。通过包含一个简单的 for-if 循环,结果看起来完全不同。