nim*_*6us 43 python python-3.x
我最近了解到,"%"符号用于计算Python中整数的余数.但是,我无法确定是否有另一个运算符或方法来计算Python中的百分比.
就像"/"一样,它会给你一个商,如果你只使用一个整数的浮点数,它实际上会给你像传统除法的答案.那么有一种方法来计算出百分比吗?
Bri*_*ell 122
您可以将两个数字除以并乘以100.请注意,如果"整数"为0,则会抛出一个错误,因为询问一个数字的0的百分比是没有意义的:
def percentage(part, whole):
return 100 * float(part)/float(whole)
Run Code Online (Sandbox Code Playgroud)
或者,如果你想要它回答的问题是"20%的5%",而不是"20%中的5%是什么百分比"(对卡尔·史密斯的答案所启发的问题的不同解释),你会写:
def percentage(percent, whole):
return (percent * whole) / 100.0
Run Code Online (Sandbox Code Playgroud)
Raf*_*ler 25
Python中没有这样的运算符,但是单独实现它是微不足道的.在计算实践中,百分比并不像模数那样有用,所以我所能想到的语言都没有实现.
def percent(expression):
if "%" in expression:
expression = expression.replace("%","/100")
return eval(expression)
>>> percent("1500*20%")
300.0
Run Code Online (Sandbox Code Playgroud)
>>> p = lambda x: x/100
>>> p(20)
0.2
>>> 100*p(20)
20.0
>>>
Run Code Online (Sandbox Code Playgroud)
一般来说,布莱恩的答案(自定义函数)是正确且最简单的事情。
但是,如果您确实想使用(非标准)'%' 运算符定义数字类型,就像桌面计算器所做的那样,以便 'X % Y' 表示 X * Y / 100.0,那么从 Python 2.6 开始,您可以重新定义mod () 运算符:
import numbers
class MyNumberClasswithPct(numbers.Real):
def __mod__(self,other):
"""Override the builtin % to give X * Y / 100.0 """
return (self * other)/ 100.0
# Gotta define the other 21 numeric methods...
def __mul__(self,other):
return self * other # ... which should invoke other.__rmul__(self)
#...
Run Code Online (Sandbox Code Playgroud)
如果您在 MyNumberClasswithPct 与普通整数或浮点数的混合中使用“%”运算符,这可能会很危险。
该代码的另一个乏味之处在于,您还必须定义 Integral 或 Real 的所有其他 21 种方法,以避免在实例化它时出现以下烦人且晦涩的 TypeError
("Can't instantiate abstract class MyNumberClasswithPct with abstract methods __abs__, __add__, __div__, __eq__, __float__, __floordiv__, __le__, __lt__, __mul__, __neg__, __pos__, __pow__, __radd__, __rdiv__, __rfloordiv__, __rmod__, __rmul__, __rpow__, __rtruediv__, __truediv__, __trunc__")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
184058 次 |
| 最近记录: |