CS50作业求助:Coleman Liau指数公式无法正常运行
CS50可读性计算程序问题排查与修复
你的程序核心问题出在count_letters函数的判断逻辑上:
if (text[index].isalpha() and text[index] == ' ') == False:
这个条件逻辑完全错误——一个字符不可能同时是字母和空格,因此这个判断永远为True,会把所有非字母非空格的字符(比如标点、数字、符号)都计入字母数量,直接导致Coleman Liau指数计算错误。
修正后的代码
将count_letters函数的判断改为直接检查字符是否为字母,同时优化其他计数函数的实现逻辑:
from cs50 import get_string def count_sentences(text): amount_of_sentences = 0 for char in text: if char in '.!?': amount_of_sentences += 1 return amount_of_sentences def count_words(text): # 用split()自动处理连续空格问题,比原空格计数方式更准确 return len(text.split()) def count_letters(text): amount_of_letters = 0 for char in text: if char.isalpha(): amount_of_letters += 1 return amount_of_letters def algorithm(text): words = count_words(text) letters = count_letters(text) sentences = count_sentences(text) # 避免除零错误 if words == 0: return 0.0 l = letters / words * 100 s = sentences / words * 100 return 0.0588 * l - 0.296 * s - 15.8 text = get_string("Text: ") grade_level = algorithm(text) if grade_level < 1: print("Before Grade 1") elif grade_level >= 16: print("Grade 16+") else: print("Grade", round(grade_level))
优化说明
- 原
count_words函数通过空格计数的方式,遇到连续空格时会多算单词数,改用text.split()可自动处理该问题,计数更准确。 - 将while循环替换为for循环遍历字符,代码更简洁易读。
- 添加单词数为0的判断,避免触发除零错误。
内容的提问来源于stack exchange,提问作者Void
相关产品推荐
相关产品推荐

