Подтвердить что ты не робот

Есть ли оператор для вычисления процента в Python?

Недавно я узнал, что знак "%" используется для вычисления остатка целого числа в Python. Однако мне не удалось определить, есть ли другой оператор или метод для вычисления процентов в Python. Подобно "/", который даст вам коэффициент, если вы просто используете float для одного из целых чисел, он фактически даст вам ответ, как традиционное разделение. Итак, какой-либо метод для процентного?

4b9b3361

Ответ 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