Schalungsmöglichkeiten
Verfasst: Dienstag 24. Oktober 2023, 10:50
Ich möchte einen Skript schreiben, womit ich zum Beispiel für eine bestimmte Wand von zum Beispiel 5 Meter Breite und einer Höhe von 2 Meter, die besten Schalungsmöglichkeiten bekomme, was in diesem Fall vier mal die Schalung T19 wäre. Jedoch sagt mir der Code, dass nur zwei T19 Schalungen benötigt wird. Deswegen wollte ich fragen, woran der Fehler liegen würde. Ich bedanke mich schonmal im voraus
def kombiniere_schalungen(breite, hoehe, schalungen):
def rekursive_suche(b, h, kombination):
if b == 0 and h == 0:
return [kombination]
if b < 0 or h < 0:
return []
kombinationen = []
for schalung, (schalung_breite, schalung_hoehe) in schalungen.items():
neue_kombination = kombination.copy()
temp_b, temp_h = b, h
# Versuche die Schalung so oft wie möglich zu verwenden, bis sie die Höhe oder Breite überschreitet
while temp_b >= schalung_breite and temp_h >= schalung_hoehe:
temp_b -= schalung_breite
temp_h -= schalung_hoehe
neue_kombination[schalung] = neue_kombination.get(schalung, 0) + 1
kombinationen.extend(rekursive_suche(temp_b, temp_h, neue_kombination))
return kombinationen
return rekursive_suche(breite, hoehe, {})
schalungen = {
'T1': (2.5, 3.5),
'T2': (1.25, 3.5),
'T3': (1.0, 3.5),
'T4': (0.75, 3.5),
'T5': (0.5, 3.5),
'T6': (0.25, 3.5),
'T7': (2.5, 3.0),
'T8': (1.25, 3.0),
'T9': (1.0, 3.0),
'T10': (0.75, 3.0),
'T11': (0.5, 3.0),
'T12': (0.25, 3.0),
'T13': (2.5, 1.25),
'T14': (1.25, 1.25),
'T15': (1.0, 1.25),
'T16': (0.75, 1.25),
'T17': (0.5, 1.25),
'T18': (0.25, 1.25),
'T19': (2.5, 1.0),
'T20': (1.25, 1.0),
'T21': (2.5, 0.75),
'T22': (1.25, 0.75),
'T23': (2.5, 0.5),
'T24': (1.25, 0.5),
'T25': (2.5, 0.25),
'T26': (1.25, 0.25)
}
if __name__ == '__main__':
breite = float(input("Bitte geben Sie die Breite der Wand in Metern ein: "))
hoehe = float(input("Bitte geben Sie die Höhe der Wand in Metern ein: "))
kombinationen = kombiniere_schalungen(breite, hoehe, schalungen)
if not kombinationen:
print("Es gibt keine mögliche Kombination von Schalungen für diese Wandgröße.")
exit()
# Sortieren Sie die Kombinationen nach der Anzahl der Schalungsteile
beste_kombinationen = sorted(kombinationen, key=lambda x: sum(x.values()))
for idx, kombination in enumerate(beste_kombinationen[:3], 1): # Die ersten 3 Kombinationen
print(f"\nMöglichkeit {idx}:")
for schalung, anzahl in kombination.items():
print(f"Schalung: {schalung}, Anzahl: {anzahl}")
def kombiniere_schalungen(breite, hoehe, schalungen):
def rekursive_suche(b, h, kombination):
if b == 0 and h == 0:
return [kombination]
if b < 0 or h < 0:
return []
kombinationen = []
for schalung, (schalung_breite, schalung_hoehe) in schalungen.items():
neue_kombination = kombination.copy()
temp_b, temp_h = b, h
# Versuche die Schalung so oft wie möglich zu verwenden, bis sie die Höhe oder Breite überschreitet
while temp_b >= schalung_breite and temp_h >= schalung_hoehe:
temp_b -= schalung_breite
temp_h -= schalung_hoehe
neue_kombination[schalung] = neue_kombination.get(schalung, 0) + 1
kombinationen.extend(rekursive_suche(temp_b, temp_h, neue_kombination))
return kombinationen
return rekursive_suche(breite, hoehe, {})
schalungen = {
'T1': (2.5, 3.5),
'T2': (1.25, 3.5),
'T3': (1.0, 3.5),
'T4': (0.75, 3.5),
'T5': (0.5, 3.5),
'T6': (0.25, 3.5),
'T7': (2.5, 3.0),
'T8': (1.25, 3.0),
'T9': (1.0, 3.0),
'T10': (0.75, 3.0),
'T11': (0.5, 3.0),
'T12': (0.25, 3.0),
'T13': (2.5, 1.25),
'T14': (1.25, 1.25),
'T15': (1.0, 1.25),
'T16': (0.75, 1.25),
'T17': (0.5, 1.25),
'T18': (0.25, 1.25),
'T19': (2.5, 1.0),
'T20': (1.25, 1.0),
'T21': (2.5, 0.75),
'T22': (1.25, 0.75),
'T23': (2.5, 0.5),
'T24': (1.25, 0.5),
'T25': (2.5, 0.25),
'T26': (1.25, 0.25)
}
if __name__ == '__main__':
breite = float(input("Bitte geben Sie die Breite der Wand in Metern ein: "))
hoehe = float(input("Bitte geben Sie die Höhe der Wand in Metern ein: "))
kombinationen = kombiniere_schalungen(breite, hoehe, schalungen)
if not kombinationen:
print("Es gibt keine mögliche Kombination von Schalungen für diese Wandgröße.")
exit()
# Sortieren Sie die Kombinationen nach der Anzahl der Schalungsteile
beste_kombinationen = sorted(kombinationen, key=lambda x: sum(x.values()))
for idx, kombination in enumerate(beste_kombinationen[:3], 1): # Die ersten 3 Kombinationen
print(f"\nMöglichkeit {idx}:")
for schalung, anzahl in kombination.items():
print(f"Schalung: {schalung}, Anzahl: {anzahl}")