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
相关产品推荐
相关产品推荐

