Как равномерно разделить общее значение на заранее определенные значения с помощью буферов в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как равномерно разделить общее значение на заранее определенные значения с помощью буферов в Python?

Сообщение Anonymous »

Я работал над инструментом расчета забора, который максимально равномерно разбивает общую длину на компоненты (перила и стойки), используя заранее определенный набор длин рельсов. Пользователь может выбрать максимальную длину рельса с некоторой свободой действий (буфером).
Проблема: Инструмент работает для большинства входных данных, но иногда выдает неправильные длины рельсов. Например, для небольших значений или определенной оставшейся длины буфера выводятся недопустимые рельсы (например, длины меньше разрешенного минимума).
Желаемые примеры вывода (текущие) : Учитывая входную максимальную длину рельса 1600 мм, буфер 600 мм и общую длину 8650 мм, правильный результат должен быть: {1600, 1600, 1600, 1800, 1800
Для общей длины 4650 мм правильный результат должен быть: {1400, 1400, 1600} (Эти значения с добавленным буфером конечной стойки дают в сумме общую длину с использованием только разрешенных длин рельсов). и обеспечение сбалансированности набора.)
Примеры неправильных выходных данных (текущие): Например, когда оставшаяся длина составляет 1050 мм, код создает недопустимую направляющую. из {800}. Иногда она превышает или занижает допустимую длину рельсов.

Код: Выделить всё

remainingLength = 2250
odCCDifference = 250
remainingBufferLength = 600
standardStep = 200
isNonStandard = False
standardLengths = [1000, 1200, 1400, 1600, 1800, 2000]
standardLengths.sort()
softMaxLengthIndex = 3
hardMaxLengthIndex = 5

endPostCount = 0
midPostCount = 0
railSets = []

remainingLength -= odCCDifference

while remainingLength >= standardLengths[softMaxLengthIndex]:
remainingLength -= standardLengths[softMaxLengthIndex]
railSets.append(standardLengths[softMaxLengthIndex])

if remainingBufferLength >= remainingLength:
while remainingLength > 0:
remainingLength -= standardStep
railSets.sort()
railSets[0] += standardStep
else:
remainingLength -= standardLengths[softMaxLengthIndex]
railSets.append(standardLengths[softMaxLengthIndex])
while remainingLength < 0:
remainingLength += standardStep
railSets.sort(reverse=True)
railSets[0] -= standardStep

railSets.sort()
print(railSets)
Вопросы:
  • Как я могу улучшить логику балансировки, чтобы избежать создания незаконных железнодорожных перевозок длины?
  • Есть ли альтернативные подходы, которые мне следует рассмотреть для более эффективного разделения общей длины?
*Второй реструктурированная загрузка вопроса. Если это неправильная платформа для этого вопроса, укажите мне правильное место, чтобы задать этот вопрос.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»