Nano Hash - криптовалюты, майнинг, программирование

Максимальное значение в цикле for python

Я пытался понять, как вывести максимальное значение из цикла for. Это необходимо для моего домашнего задания. Я пытался использовать функцию max, но я продолжаю получать

TypeError: unorderable types: str() > float().

for NP in range(MP, MaxP+1, 10):

        CostofTicket = TP - (((NP - MP)/10)*.5)
        Gross = NP * CostofTicket
        Profit = (NP * CostofTicket) - FixedCost

        print (NP, end="          ")
        print ("$", format(CostofTicket, "3,.2f"), end="          ")
        print ("$", format(Gross, "3,.2f"), end="          ")
        print ("$", format(FixedCost, "3,.2f"), end="          ")
        print ("$", format(Profit, "3,.2f"))



    print ("Maximum Profit: ", end="")
    print (max(Profit, "3,.2f"))
    print ("Maximum Profit Ticket Price: ")
    print ("Maximum Profit Number of Passengers: ")
14.03.2016

  • Что задумал (max(Profit, "3,.2f"))? Вы пытаетесь получить наибольшее значение, которое Profit удерживало во время цикла for? Если это так, вы должны накапливать Profit в (например) profits следующим образом: profits.append(Profit). 14.03.2016
  • help(max) расскажет, как пользоваться функцией. 14.03.2016
  • Это помогает опубликовать полную трассировку в вопросе и свести проблему к простой демонстрации, которую мы можем запустить. 14.03.2016

Ответы:


1

max действительно то, что вам нужно. Вы получаете TypeError, потому что вы относитесь к этому как к своим звонкам в format(). Вместо этого разделите эти шаги и дайте результату max имя для удобства.

profits = []
for NP in range(MP, MaxP+1, 10):

        CostofTicket = TP - (((NP - MP)/10)*.5)
        Gross = NP * CostofTicket
        Profit = (NP * CostofTicket) - FixedCost
        profits.append(Profit)

    # ... print()s ...    


    greatest_profit = max(profits)
    print ("Maximum Profit: ", end="")
    print (format(greatest_profit, "3,.2f"))
    print ("Maximum Profit Ticket Price: ")
    print ("Maximum Profit Number of Passengers: ")
14.03.2016

2

Если вы не хотите тратить память на список, просто сохраните maximun в переменной и сравните его с полученными значениями на каждой итерации.

maxProfit = float("-inf") # First contendant is -Infinity, a real low number

for NP in range(MP, MaxP+1, 10):
    CostofTicket = TP - (((NP - MP)/10)*.5)
    Gross = NP * CostofTicket
    Profit = (NP * CostofTicket) - FixedCost
    if Profit > maxProfit: # Here is the Fight. Winner stays with the trophy "maxProfit"
        maxProfit = Profit
    print (NP, end="          ")
    print ("$", format(CostofTicket, "3,.2f"), end="          ")
    print ("$", format(Gross, "3,.2f"), end="          ")
    print ("$", format(FixedCost, "3,.2f"), end="          ")
    print ("$", format(Profit, "3,.2f"))

print ("Maximum Profit: ", end="")
print (format(maxProfit, "3,.2f")) # And the winer is...
print ("Maximum Profit Ticket Price: ")
print ("Maximum Profit Number of Passengers: ")

Этот код не использует память (список) и дает вам интуитивное представление о том, как реализована упомянутая функция max.

Вы также можете избежать использования памяти с генератором:

import operator

def ticket_values(MP, MaxP, TP, FixedCost):
    for NP in range(MP, MaxP+1, 10):
        CostofTicket = TP - (((NP - MP)/10)*.5)
        Gross = NP * CostofTicket
        Profit = (NP * CostofTicket) - FixedCost
        yield (NP, CostofTicket, Gross, Profit)

for ticket_value in ticket_values(MP, MaxP, TP, FixedCost):
    print (ticket_value[0], end="          ")
    print ("$", format(ticket_value[1], "3,.2f"), end="          ")
    print ("$", format(ticket_value[2], "3,.2f"), end="          ")
    print ("$", format(FixedCost, "3,.2f"), end="          ")
    print ("$", format(ticket_value[3], "3,.2f"))

print ("Maximum Profit: ", end="")
print (format(max(ticket_values(MP, MaxP, TP, FixedCost), key=operator.itemgetter(3))[3], "3,.2f"))
print ("Maximum Profit Ticket Price: ")
print ("Maximum Profit Number of Passengers: ")

Вы получите идею.

14.03.2016
  • зачем использовать lambda, когда есть вполне приемлемая встроенная функция: operator.itemgetter(3)? 14.03.2016
  • Почему бы и нет? lambda также является родной функцией Python. На самом деле, вам не нужно import ничего для его использования. 14.03.2016
  • потому что это быстрее и немного проще для понимания, и хотя вам нужно import, это встроенная функция. 14.03.2016
  • Ой. Эти причины отличаются от простого существования встроенной альтернативы: Быстрее и Понятнее. Я принимаю быстрее, но понятно субъективно. Насколько быстрее? Я не думаю, что мы говорим о порядках величины, не так ли? 14.03.2016
  • В 2-3 раза быстрее, по крайней мере, в моих тестах. 14.03.2016
  • Хорошо это учитывать. Когда в этом месте кода будет узкое место, я его изменю ;-) Шучу. Спасибо Вам за информацию. Измененный! 14.03.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..