Есть ли оператор для расчета процентов в Python?
Недавно я узнал, что знак «%» используется для вычисления остатка целого числа в Python. Однако мне не удалось определить, есть ли другой оператор или метод для вычисления процентов в Python. Подобно «/», который даст вам коэффициент, если вы просто используете float для одного из целых чисел, он фактически даст вам ответ, как традиционное разделение. Итак, какой-либо метод для процентного?
Чтобы было понятно, вы имеете в виду x * y / 100.0 или (x/y) * 100.0 ? Большинство из нас читает это как умножение; Брайан прочитал это как разделение.
4 ответа
В Python такого оператора нет, но тривиально реализовать самостоятельно. На практике в вычислениях проценты не так полезны, как по модулю, поэтому ни один язык, который я могу представить, не реализует.
Я бы добавил, что даже в математике соотношение гораздо полезнее, чем процент. Процент — это просто способ представить соотношение, с которым знакомо больше людей.
@nim6us: nim6us: если все, что вам нужно, это напечатать процент, тогда форматирование строки Python имеет такую директиву: «<:.1%>«.format(0.1234) -> ‘12.3%’ .
Вы можете просто разделить ваши два числа и умножить на 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
Возможно, вы захотите добавить, если целое равно 0 и возвращает 0, так как в противном случае это вызовет исключение. Я просто столкнулся с этим, поэтому я и дам вам знать!
@CarlSmith Я не копировал твой ответ; Вы заметите, что моя версия не идентична вашей. Вторая половина была вдохновлена вашей другой интерпретацией вопроса, так что вы правы, я должен был поблагодарить вас за то, что вы вдохновили меня добавить альтернативную интерпретацию вопроса.
@CarlSmith Если вы заметили, между нашими двумя ответами есть функциональные различия, которые вы можете увидеть, если попробуете их оба: percentage(5, 20) (моя версия) дает вам 1.0 , так как 5% от 20 — 1, а percent(5, 20) (ваша версия) дает вам 0.0 , что неверно, так как вы используете разделение по этажам.
Хорошо, не волнуйтесь. Я только что заметил, что ваши изменения сделали мой ответ излишним, но не удаляемым. Я удалил свои оригинальные комментарии здесь и ниже, чтобы привести в порядок немного. Если вы хотите сделать то же самое?
Ответ Брайана (пользовательская функция) — это правильная и простая в использовании вещь.
Но если вы действительно хотели определить числовой тип с (нестандартным) оператором «%», например, с помощью калькуляторов стола, так что «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__")
Это действительно продвинутый материал, который, хотя и не является хорошей идеей в данном случае, показывает истинную силу типов Python!
Причины, почему я люблю питона, ЭТО. Кроме того, возможно ли не переопределить все абстрактные методы, выполнив некоторую магию с клонированием класса существующего типа int , установив операторы __mod__ и __mul__ , а затем назначив его равным MyNumberClasswithPct?
Как и так ?: gist.github.com/thorsummoner/135c6a3c9b02b63c2e79 Первоначально я расширял оба числа. Real и int, но я понял, что мне просто нужно расширить float.
@ThorSummoner да, но я специально унаследовал от абстрактных чисел базового класса. Реал вместо float , для безопасности. Попробуйте другие операторы на вашем объекте Percent и посмотрите, нет ли противоречий? Может быть, с использованием numbers.Real было слишком много паранойи.
Я думаю, что проблема была решена. во всяком случае, я думал об этом решении
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%")
Ещё вопросы
- 1 Диалоговое окно оповещения в Android
- 0 Возможно ли получить ссылку на массив от референта его элемента?
- 0 «СОДЕРЖИТ» не работает в критериях просмотра
- 1 Отправка электронного письма с приложением из приложения
- 0 Переключение функций по нажатию кнопки
- 0 Вставьте верхние / нижние колонтитулы страницы при печати документа HTML
- 1 Не могу получать уведомления от FCM, пока приложение находится в состоянии переднего плана
- 1 Проблема задержки в нескольких графиках, SVG или HTML5 Canvas?
- 1 Обработка файловых операций с сопрограммами
- 0 Удалить делегат события из измененного элемента
- 0 Создание пакета установщика Windows
- 0 Настройка функции углового фильтра
- 1 java.net.ProtocolException: метод не поддерживает тело запроса: GET
- 1 Минимизируйте данные, которые будут сериализованы для веб-сервисов Spring, отображающих данные JSON
- 1 React-Native добавляет var в тег просмотра
- 1 Приложение возвращается к неправильной активности после выхода из намерения камеры
- 1 Автобокс Концепции SCJP
- 0 PHP time () для Date / Time, возвращающих странные результаты
- 1 ModuleNotFoundError: нет модуля с именем ‘Quartz’
- 1 Python: OpenCV findHomography входы
- 0 Способ загрузить все необходимые зависимости kde, чтобы начать работать над программированием kde?
- 0 Как получить доступ к области действия ng-repeat из другой директивы того же элемента, на котором включен ng-repeat?
- 0 Сменить модель триггера на переключателе?
- 0 Разрешить регулярное выражение с обратной косой чертой
- 1 Совпадение внутри строки, но игнорирование совпадений в скобках — Regex и JavaScript
- 0 JQuery заменяет часть текста в
на
- 1 Почему моя ошибка не возвращается в моем экспресс-ответе?
- 0 Вставить элемент в 2D вектор C ++
- 0 Угловая функция запускается при нажатии, но не при инициализации в контроллере
- 1 Как справиться с игровым потоком?
- 0 Оставить MySQL запрос в той же таблице
- 1 Заменить существующие R блестящие данные htmlwidget новыми данными
- 0 Заказать автоматически внутреннее соединение
- 1 Цикл декремента Python работает медленнее, чем цикл инкремента?
- 0 Определение правил стиля для списка навигации (css)
- 0 Ошибка счетчика текстовых символов при загрузке страницы
- 0 Qt указывает местоположение для определенных данных приложения
- 0 Если уникальный элемент нажал / Если нажал за пределами div (включая другой уникальный элемент)
- 1 Как поставить задержку для функции в JavaScript? [Дубликат]
- 1 Обновить формат нескольких ячеек с помощью запроса API updateCells
- 1 Поток данных Apache Beam / GCP: чтение видео / файлов изображений
- 0 Ключ API Google MAP в приложении Angular
- 1 Google Map запрашивает местоположение в порядке, но не центрирует карту
- 0 HTML5 и PHP: Воспроизведение видеофайла в формате base64
- 1 Узел JS Как отправить изображение вместе с запросом данных на другой сервер / API
- 1 Проблема с запуском файла класса java, содержащего зависимость Jsoup
- 1 Не удается установить подпакет пространства имен Python в зависимости от другого подпакета
- 0 C ++ Char Array, удаляющий повторяющиеся символы
- 0 Console.log (‘variable’) — как показать
- 0 Mysql Ошибка подключения к базе данных
How to Calculate a Percentage in Python
To get a percentage of two numbers in Python, divide them using the division operator ( / ) then multiply the result by 100 using the Python multiplication operator ( * ).
To demonstrate this, let’s get the percentage of 3 out of 9 using Python.
percent = 3 / 9 * 100 print(percent)
Python Percentage Function
If you need to get percentages many times in your program, it may be worth creating a small helper function.
def getPercent(first, second, integer = False): percent = first / second * 100 if integer: return int(percent) return percent print(getPercent(3, 9))
With the above function, to get an integer back pass True as the third argument.
def getPercent(first, second, integer = False): percent = first / second * 100 if integer: return int(percent) return percent print(getPercent(3, 9, True))
How to Calculate a Percentage in Python
To get a percentage of two numbers in Python, divide them using the division operator ( / ) then multiply the result by 100 using the Python multiplication operator ( * ).
To demonstrate this, let’s get the percentage of 3 out of 9 using Python.
percent = 3 / 9 * 100 print(percent)
Python Percentage Function
If you need to get percentages many times in your program, it may be worth creating a small helper function.
def getPercent(first, second, integer = False): percent = first / second * 100 if integer: return int(percent) return percent print(getPercent(3, 9))
With the above function, to get an integer back pass True as the third argument.
def getPercent(first, second, integer = False): percent = first / second * 100 if integer: return int(percent) return percent print(getPercent(3, 9, True))