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}")
Schalungsmöglichkeiten
- __blackjack__
- User
- Beiträge: 13163
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@dark_61: Vollzieh das doch einfach mal mit Papier und Stift nach was das Programm da macht und wo das dann offensichtlich falsch ist was gemacht wird. Wenn Du nur T19 berücksichtigst, ist das ja schnell durchgespielt.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis