Недавно я узнал, что знак "%" используется для вычисления остатка целого числа в Python. Однако мне не удалось определить, есть ли другой оператор или метод для вычисления процентов в Python. Подобно "/", который даст вам коэффициент, если вы просто используете float для одного из целых чисел, он фактически даст вам ответ, как традиционное разделение. Итак, какой-либо метод для процентного?
Есть ли оператор для вычисления процента в Python?
Ответ 1
В Python такого оператора нет, но тривиально реализовать самостоятельно. На практике в вычислениях проценты не так полезны, как по модулю, поэтому ни один язык, который я могу представить, не реализует.
Ответ 2
Вы можете просто разделить ваши два числа и умножить на 100. Обратите внимание, что это вызовет ошибку, если "целое" равно 0, так как спрашивать, какой процент от 0 числа не имеет смысла:
def percentage(part, whole):
return 100 * float(part)/float(whole)
Или, если вопрос, на который вы хотели ответить, был "что составляет 5% от 20", а не "какой процент составляет 5 из 20" (другая интерпретация вопроса, вызванная Ответ Карла Смита), вы должны написать:
def percentage(percent, whole):
return (percent * whole) / 100.0
Ответ 3
Ответ Брайана (пользовательская функция) - это правильная и простая в использовании вещь.
Но если вы действительно хотели определить числовой тип с (нестандартным) оператором "%", например, с помощью калькуляторов стола, так что "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)
#...
Это может быть опасно, если вы когда-либо использовали оператор "%" в смеси MyNumberClasswithPct с обычными целыми числами или плаваниями.
Что также утомительно в этом коде, вам также нужно определить все 21 другие методы Integral или Real, чтобы избежать следующего раздражающего и непонятного 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__")
Ответ 4
Я думаю, что проблема была решена... во всяком случае, я думал об этом решении
def percent(string="500*22%"):
if "%" == string[-1] and "*" in string:
getnum = string[:-1]
ops = getnum.split("*")
result = int(ops[0]) * int(ops[1]) / 100
print("The {}% of {} is {}".format(ops[1], ops[0], result))
return result
else:
print("The argument must be a string like '500*22%'")
percent("1200*30%")
[выход]:
30% из 1200 составляет 360,0