我是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)
谁能告诉我学校真正要我做什么或哪里出错?
谢谢!
答案 0 :(得分:9)
你正在使用Python 3.x,他们正在使用Python 2.x.在Python 2.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)
答案 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)避免使用float
和int
,即保存两个(相对昂贵的)函数调用。
请注意://
适用于float
个对象以及int
个对象。问题是args是“数字”(可以包括float
个对象),结果应该是“整数”(不一定是int
个对象)。这给你很大的许可证。
>>> percent(63.001, 11.9999)
525.0 # That's an integer
如果他们坚持将返回值视为int
个对象,那么您当然需要int()
。