CS50可读性Python程序:非1级及16+等级计算错误求助
CS50可读性计算代码修正方案
你的代码有两个关键错误,导致中间等级计算全部出错,修正方法很简单:
错误1:单词计数逻辑错误
原代码通过统计空格数来计算单词数,但最后一个单词后面没有空格,所以实际单词数应该是空格数 + 1。比如输入"Hello world",空格数是1,单词数是2,原代码会错误地算成1,直接导致L(每100单词的字母数)和S(每100单词的句子数)的计算值偏差。
错误2:等级计算未做四舍五入
Coleman-Liau指数要求将计算结果四舍五入到最近的整数,但原代码用int()直接截断小数部分,比如结果是10.8会被当成10,导致等级偏低;结果是10.1也会被当成10,不符合算法要求。
修正后的完整代码
import cs50 text = cs50.get_string("Text: ") letters = 0 words = 1 # 初始化为1,因为至少有一个单词 sentences = 0 for char in text: if char.isalpha(): letters += 1 if char.isspace(): words += 1 if char in [".", "!", "?"]: sentences += 1 # 计算每100单词的字母数和句子数 L = (letters * 100.0) / words S = (sentences * 100.0) / words # 使用round()四舍五入到最近整数 grade = round(0.0588 * L - 0.296 * S - 15.8) if grade < 1: print("Before Grade 1") elif grade > 16: print("Grade 16+") else: print(f"Grade {grade}")
验证说明
用CS50官方样例测试:
输入:"One fish. Two fish. Red fish. Blue fish." → 输出应为 Grade 2
输入:"Would you like them here or there? I would not like them here or there. I would not like them anywhere." → 输出应为 Grade 5
内容的提问来源于stack exchange,提问作者Wajahat Khan
相关产品推荐
相关产品推荐

