Python pyschools:站点给出了错误的答案?(专题2,问题7)

Python pyschools:站点给出了错误的答案?(专题2,问题7),python,Python,我是python新手!我完成了学业,读了几本书,现在正在尝试挑战。成功地完成了变量和数据类型,但主题2(函数)中的问题7让我感到非常痛苦 我正在使用Eclipse和Python(3.2版)。在我的月食中,我得到了答案100、51和525。这些都是pyschools期望的答案,但它显示我的函数返回100、0和500 以下是问题(希望我可以在这里发布!): 编写一个函数percent(value,total),该函数接受两个数字作为参数,并以整数形式返回百分比值。 下面是我的函数 def p

我是python新手!我完成了学业,读了几本书,现在正在尝试挑战。成功地完成了变量和数据类型,但主题2(函数)中的问题7让我感到非常痛苦

我正在使用Eclipse和Python(3.2版)。在我的月食中,我得到了答案100、51和525。这些都是pyschools期望的答案,但它显示我的函数返回100、0和500

以下是问题(希望我可以在这里发布!):
编写一个函数percent(value,total),该函数接受两个数字作为参数,并以整数形式返回百分比值。
下面是我的函数

    def percent (value, total):
        a = value
        b = total
        return(int((a / b) * 100))
    percent(70, 70)
    percent(46, 90)
    percent(63, 12)
有谁能告诉我学校真正希望我做什么,或者我哪里出了问题


谢谢

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


为了避免这种情况,在除法之前,将一个输入乘以1.0。

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

或者,假设他们使用的是Python 2.x的最新版本,您只需将其添加到脚本的开头,就可以在站点上使用:

from __future__ import division
另外,为什么要将输入参数指定给变量?它们已经是变量了。如果您希望将它们命名为
a
b
,只需按这种方式接收即可:

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

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

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

(0)从2.2版起适用于所有蟒蛇

(1) 读者不必猜测运行的Python版本,也不必检查模块的开头,就可以了解这一行的功能

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

(3) 避免使用
float
int
即节省两个(相对昂贵的)函数调用

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

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

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

,因为它使用的是Python2.x,您至少需要将一个值转换为float

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

这很好

谢谢!这是有效的:返回int((float(a)/b)*100)您的注释仅适用于Python2.x的默认行为。在除法之前将分子乘以100.0是一种更好的策略。