pyschools:网站给出了错误的答案? (主题2,问题7)

时间:2011-12-06 02:22:44

标签: python

我是python的新手!做了我的学习,经历了几本书,现在尝试了学校的挑战。成功完成变量和数据类型,但主题2(函数)的问题7给了我地狱。

我正在使用Eclipse和Python(版本3.2)。在我的日食中,我得到了答案100,51和525.这些是pyschools期望的答案,但它表明我的函数返回100,0和500。

这是一个问题(希望我可以在这里发布!):
写一个函数百分比(值,总数),它接受两个数字作为参数,并将百分比值作为整数返回 以下是我的功能

    def percent (value, total):
        a = value
        b = total
        return(int((a / b) * 100))
    percent(70, 70)
    percent(46, 90)
    percent(63, 12)

谁能告诉我学校真正要我做什么或哪里出错?

谢谢!

4 个答案:

答案 0 :(得分:9)

你正在使用Python 3.x,他们正在使用Python 2.x.在Python 2.x中,当参数为整数时,/操作始终是整数除法。 1/20。因此,使用float()将您的一个参数更改为浮点数,例如int((float(a) / b) * 100)。然后a/b将有一个小数部分。

或者,假设他们使用的是最新版本的Python 2.x,您可以将其添加到脚本的开头,它应该在网站上运行:

from __future__ import division

顺便说一下,为什么要将输入参数分配给变量?他们已经是变数了。如果您希望它们命名为ab,请按以下方式接收:

def percent(a, b):
    return int((float(a) / b) * 100)

答案 1 :(得分:1)

因为它使用python 2.x你需要至少将一个值转换为float

def percent(number, total):
    return int((float(number)/total)  * 100)

这样可以正常使用

答案 2 :(得分:0)

Python对整数执行数学运算,严格整数数学,截断小数部分。

为避免这种情况,请在分割前将其中一个输入乘以1.0。

答案 3 :(得分:0)

您可以使用截断除法,如下所示:

def percent(value, total):
    return value * 100 // total

优点:

(0)从2.2开始与所有蟒蛇合作。

(1)读者知道这一行是什么,而不必猜测正在运行什么版本的Python,而不必检查from __future__魔法模块的开始。

(2)避免任何潜在的浮点问题。

(3)避免使用floatint,即保存两个(相对昂贵的)函数调用。

请注意://适用于float个对象以及int个对象。问题是args是“数字”(可以包括float个对象),结果应该是“整数”(不一定是int个对象)。这给你很大的许可证。

>>> percent(63.001, 11.9999)
525.0 # That's an integer

如果他们坚持将返回值视为int个对象,那么您当然需要int()