You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))

优化说明

  1. 原count_words函数通过空格计数的方式,遇到连续空格时会多算单词数,改用text.split()可自动处理该问题,计数更准确。
  2. 将while循环替换为for循环遍历字符,代码更简洁易读。
  3. 添加单词数为0的判断,避免触发除零错误。

内容的提问来源于stack exchange,提问作者Void

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:15:44