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

CS50课程作业:变量除法引发代码计算结果异常求助

CS50文本分析程序:整数除法导致平均字母数计算错误的修复方案

问题核心

你遇到的问题是calculate_avg_letters函数中的整数除法导致每100单词平均字母数L计算偏差。已知字母数80、单词数21,预期L≈380,但整数除法会截断小数部分,得到错误结果。

解决方案

Python 3中,//是整数地板除法(直接舍去小数),而我们需要精确的浮点运算来计算平均值。只需将除法运算符改为/(浮点除法),或者将其中一个操作数转为浮点数,即可得到正确结果。

错误代码示例(问题根源)

假设你的原函数是这样的:

def calculate_avg_letters(letter_count, word_count):
    # 整数除法会截断小数,80//21=3,3*100=300,与预期380偏差极大
    return (letter_count // word_count) * 100

修正后的函数

def calculate_avg_letters(letter_count, word_count):
    # 使用浮点除法保留小数,(80/21)*100≈380.95,符合预期
    return (letter_count / word_count) * 100

或者通过强制转浮点数实现:

def calculate_avg_letters(letter_count, word_count):
    return (float(letter_count) / word_count) * 100

完整修正后的程序

def count_letters(text):
    # 统计文本中的字母数量(仅a-z/A-Z)
    return sum(1 for char in text if char.isalpha())

def count_words(text):
    # 按空格分割统计单词数(简单场景下适用,复杂场景可优化)
    words = text.split()
    return len(words)

def count_sentences(text):
    # 按句末标点统计句子数
    return sum(1 for char in text if char in '.!?')

def calculate_avg_letters(letter_count, word_count):
    # 计算每100单词的平均字母数
    return (letter_count / word_count) * 100

def calculate_avg_sentences(sentence_count, word_count):
    # 计算每100单词的平均句子数(同样注意用浮点除法)
    return (sentence_count / word_count) * 100

def calculate_grade_level(L, S):
    # 代入公式计算年级等级
    return (0.0588 * L) - (0.296 * S) - 15.8

def main():
    text = input("请输入待分析的文本:")
    letter_count = count_letters(text)
    word_count = count_words(text)
    sentence_count = count_sentences(text)
    
    L = calculate_avg_letters(letter_count, word_count)
    S = calculate_avg_sentences(sentence_count, word_count)
    grade = calculate_grade_level(L, S)
    
    # 输出调试信息
    print(f"字母数:{letter_count}")
    print(f"单词数:{word_count}")
    print(f"句子数:{sentence_count}")
    print(f"每100单词平均字母数L:{L:.2f}")
    print(f"每100单词平均句子数S:{S:.2f}")
    print(f"年级等级:{grade:.1f}")

if __name__ == "__main__":
    main()

测试验证

当输入对应字母数80、单词数21、句子数3的文本时:

  • L = (80/21)*100 ≈ 380.95(符合预期)
  • S = (3/21)*100 ≈ 14.29
  • 年级等级 = (0.0588380.95) - (0.29614.29) - 15.8 ≈ 2.4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:06:46