Cześć,
chciałbym sobie ułatwić pracę za pomocą programu, który wykona rozkład odcinków za mnie.
Sprawa wygląda następująco. Projektuję maszynę/urządzenie, którego konstrukcja składa się z profilu o pewnym przekroju np. 40x40 mm.
Dostawcy dostarczają materiał w 6 m (6000 mm) odcinkach. Ja na przykład mam listę odcinki = [1500, 2000, 145, ... , 500] itd. Często odcinki się powtarzają. Moim celem jest jak najbardziej optymalne rozłożenie tych odcinków z lity aby pozostawał jak najmniejszy odpad i żeby program wyliczał mi ile surowca 6m profili zamówić.
Np. lista = [ 1500 mm - 3 szt., 500 mm - 5 szt., 1000 mm - 2 szt.]
1 belka = 1500 + 1500 +1500 +500 +500 +500 = 6000 mm, odpad = 0 mm
2 belka = 500 + 500 + 1000 + 1000 = 3000 mm, odpad 3000 mm
Cześć do wczytywania odcinków z pomocą forumowiczów napisałem, ale mam problem z napisaniem algorytmu do rozkładu. Może ktoś z was coś podlinkuje albo podpowie.
Kod wczytywania odcinków i zapisania w liście:
def section_dec():
'''Funkcja mająca na celu utworzenie listy z odcinkami pociętego profilu'''
#Wpisanie długość odcinka oraz ile razy ma wystąpić na liście
profile_dim = []
while True:
profile = []
print('\nWpisanie "quit" spowoduje wyłączenie programu')
while True:
length =input('Podaj długość uciętego profilu w [mm]: ')
if length == 'quit':
return
try:
length = int(length)
except ValueError as e:
print(f'Upss.. Podana wartość nie jest liczbą. Spróbuj jeszcze raz \n{e}')
continue
break
while True:
multiply = input(f'Ile sztuk {length} wykonać?: ')
if multiply == 'quit':
return
try:
multiply = int(multiply)
except ValueError as e:
print(f'Upss.. Podana wartość nie jest liczbą. Spróbuj jeszcze raz \n{e}')
continue
break
#Dodanie do listy oraz zwielokratniania elementów listy
profile.append(length)
profile = profile*multiply
print(profile)
profile_dim.extend(profile)
ending = input('Czy zakończyć dodawanie elementó do listy (wpisz "tak")').lower()
if ending == 'tak':
break
return profile_dim
section = section_dec()
print(f'lista wszystkich przyciętych prfili: \n\t{section}')