我遇到了这个代码的奇怪问题:
legibIndex = 206.385 - 84.6 * (countSylb / countWord) - 1.015 * (countWord / countSent);
这是给定文本文件的易读性索引的计算。 由于这是一项家庭作业,我们被告知索引应该是什么(80,或者恰好是80.3)
我的音节数,字数和句子数都是正确的(它们与示例文本文件的给定数字相匹配。
即使我对这些数字进行硬编码,我也不会得到80,即使我把它放入我的caclulator中也是如此。我无法想象有什么问题。
以下是我们给出的等式:
Index = 206.835 - 84.6 * (# syllables/# words) - 1.015 * (# words/# sentences)
正如您所看到的,我只是插入了我的变量(它们保存了正确的值)。 作为参考,值为:55个音节,40个单词,4个句子,由教师给出。我的程序在运行时产生的值是易读性指数112.
我错过了一些括号,或者是什么? 我很难过!
答案 0 :(得分:9)
立即从名称(包括 count 这个词)开始,我猜是countSylb
,countSent
和countWord
被声明为整数,因此你的分区正在进行整数运算,截断小数部分。把它们扔到花车上,应该修好它。
legibIndex = 206.385 - 84.6 * ((float)countSylb / ((float)countWord) -
1.015 * (((float)countWord / ((float)countSent);
答案 1 :(得分:2)
你可能有一个数据类型问题,你正在进行舍入,因为int / int = int而不是float。
如果你强制转换为float或声明为float,它应该对你有帮助。
答案 2 :(得分: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
答案 3 :(得分:1)
如果括号内的计算是纯整数,则计算将删除小数部分并向下舍入(与使用floor()相同),这显然会改变结果。
答案 4 :(得分:0)
这可能是一个operator precedence问题。可以肯定的是,将您认为应该首先发生的事情分组比现有的更多。
修改不,不是;使用C的运算符优先级得到80.36。我希望 sparks 是正确的(并且第一个没有标记),这是一个数据类型问题而且你正在经历过早的舍入。
答案 5 :(得分:0)
当我在Haskell中运行时,我得到了正确答案(80.36000000000001)。
答案 6 :(得分:0)
我认为如果您使用整数运算,问题是(#syllables / #words)变为1。如果你确保使用浮点运算执行计算(所以#syllables / #words = 1.375),你应该得到正确的答案。
答案 7 :(得分:0)
如上所述,您的计数变量可能是整数整数,但您的表达式包含文字浮点数。将这些整体铸造成浮标会给出正确的价值。您还必须确保存储表达式结果(legibIndex)的内容也是float类型。