4

我在这段代码中遇到了一个奇怪的问题:

legibIndex = 206.385 - 84.6 * (countSylb / countWord) - 1.015 * (countWord / countSent);

这是给定文本文件的易读性指数的计算。由于这是一项家庭作业,我们被告知索引应该是多少(80,或者正好是 80.3)

我的音节数、字数和句子数都是正确的(它们与示例文本文件的给定数字相匹配。

即使我将数字硬编码,我也没有得到 80,即使当我将它完全放入我的计算器时,我也得到了 80。我无法想象出了什么问题。

这是我们得到的等式:

Index = 206.835 - 84.6 * (# syllables/# words) - 1.015 * (# words/# sentences)

如您所见,我只是插入了我的变量(它们包含正确的值。作为参考,这些值是:55 个音节,40 个单词,4 个句子,由讲师给出。我的程序在运行时产生的值是易读性指数 112。

我错过了一些括号,还是什么?我难住了!

4

8 回答 8

9

马上,从名称(包括字数)我猜想countSylb,countSent 并被countWord声明为整数,因此您的除法正在执行整数运算,截断小数部分。将它们投射到浮动上,这应该可以解决它。

legibIndex = 206.385 - 84.6 * ((float)countSylb / ((float)countWord) - 
               1.015 * (((float)countWord / ((float)countSent);
于 2010-02-08T15:28:06.117 回答
2

您可能有一个数据类型问题,因为 int/int = int 而不是 float。

如果您转换为浮动或声明为浮动,它应该对您有所帮助。

于 2010-02-08T15:30:31.843 回答
1

在这里工作。也许你正在做整数除法而不是浮点除法:

>>> def leg(syl, wor, sen):
...   return 206.835 - 84.6 * (float(syl) / wor) - 1.015 * (float(wor) / sen)
... 
>>> print leg(55, 40, 4)
80.36
于 2010-02-08T15:27:51.233 回答
1

如果括号内的计算是纯整数,则计算将删除小数部分并向下舍入(与使用 floor() 相同),这显然会改变结果。

于 2010-02-08T15:50:38.683 回答
0

这可能是运算符优先级问题。可以肯定的是,将你认为应该首先发生的事情比你已经拥有的更多的事情分组。

编辑不,不是;使用 C 的运算符优先级我得到 80.36。我希望sparks是正确的(也是第一个不合格的),它是一个数据类型问题,并且您遇到了过早的舍入。

于 2010-02-08T15:27:03.420 回答
0

当我在 Haskell 中运行它时,我得到了正确的答案(80.36000000000001)。

于 2010-02-08T15:27:33.107 回答
0

我认为问题在于,如果您使用整数算术,则 (# syllables/# words) 为 1。如果您确保使用浮点算术执行计算(所以# syllables/# words = 1.375),您应该得到正确的答案。

于 2010-02-08T15:30:29.550 回答
0

如上所述,您的计数变量可能是整数整数,但您的表达式包含文字浮点数。将这些整数转换为浮点数将给出正确的值。您还必须确保将表达式结果存储在 (legibIndex) 中的内容也是浮点类型。

于 2010-02-08T16:48:20.743 回答