【问题标题】:CS50 2021: Readability in Python wrong calculationCS50 2021:Python 错误计算中的可读性
【发布时间】:2021-06-18 11:10:18
【问题描述】:

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

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

应该是这样的:

文字:恭喜!今天是你的好日子。你要去伟大的地方!你已经离开了!

三年级

不幸的是,我的代码改为抛出 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)

【问题讨论】:

  • 您确定 3 是 Congratulations! Today is your day. You're off to Great Places! 输入的预期成绩吗?我已将此文本放在“Coleman-Liau index online”的第一个 Google 结果中,它告诉我索引是13.6,这与您的计算相当。我仔细检查了你的代码,看起来不错。
  • 是的。真奇怪。以下是一些输入: 输入:“在我年轻和脆弱的岁月里,我父亲给了我一些建议,从那以后我一直在脑海中反复思考......”

标签: python cs50


【解决方案1】:

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

...字母是从az 的任何小写字符或从AZ 的任何大写字符

迭代是你的朋友。

【讨论】:

  • 没错!也只是想通了。谢谢:)
【解决方案2】:

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

【讨论】:

  • 仅供参考,您可以通过对 isalpha 生成器求和来简化修改后的循环:number_letters = sum(char.isalpha() for char in text)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 2021-07-31
  • 2021-06-26
相关资源
最近更新 更多