Hi zusammen
hab ein kleines Programmchen zur Übung geschrieben.
Bin noch Anfänger.
Das Programm ist für ein Lagerhaus. Es soll kontrollieren ob eine Warensendung angenommen werden kann oder nicht.
Es werden 2 Sachen überprüft einmal die Kapazität des Lagers und der Bestand des gleichen und Anzahl der verfügbaren Mitarbeiter die zum ausladen benötigt werden.
Hier nun das Programm :
lagerkapazität = 1000
bestand = 500
anzahl_mitarbeiter = 10
print ("Wie groß ist die Lieferung")
lieferung = int(input("Bitte geben Sie die Größe der Lieferung an:"))
benoetigt = int(input("Bitte geben Sie die Anzahl der benötigten Mitarbeitern an:"))
if lieferung + bestand <= lagerkapazität and anzahl_mitarbeiter >= benoetigt:
print ("Die Ware kann geliefert werden.")
bestand += lieferung
anzahl_mitarbeiter -= benoetigt
print (bestand)
print (anzahl_mitarbeiter)
else: print ("Die Ware kann nicht angenommen werden.")
Mein Problem ist nun dass falls die Ware nicht angenommen werden kann , der Benutzer nicht weis warum. Liegt es an der Größe der
Ware oder liegt das Problem an zu wenig Mitarbeitern.
Ich komme nicht dahinter wie ich den Code schreiben soll das bei Nichtlieferung der Benutzer genau weis warum die Ware nicht geliefert werden kann.
Im Voraus danke für eure Unterstützung.
Logikproblem
- __blackjack__
- User
- Beiträge: 14076
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei es Sinn machen würde das dann anders zu strukturieren, also statt im ``else``-Fall jetzt die beiden Teilbedingungen noch mal einzeln zu prüfen, erst einen ``if`` und einen ``elif``-Teil zum Ablehnen mit Begründung zuschreiben und dazu dann ein ``else`` in dem der Code steht, der ausgeführt wird, wenn die Lieferung nicht abgelehnt wird. Dann muss man die Teilbedingungen nur einmal prüfen, und hat nicht die Gefahr dass man bei einer zweiten Prüfung einen Fehler macht, oder das bei Änderungen am Code irgendwann mal vergisst, dass man die gleiche Prüfung an zwei Stellen im Code ändern muss.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Habe das jetzt so gemacht :
lagerkapazität = 1000
bestand = 500
anzahl_mitarbeiter = 10
print ("Wie groß ist die Lieferung")
lieferung = int(input("Bitte geben Sie die Größe der Lieferung an:"))
benoetigt = int(input("Bitte geben Sie die Anzahl der benötigten Mitarbeitern an:"))
if lieferung + bestand <= lagerkapazität and anzahl_mitarbeiter >= benoetigt:
print ("Die Ware kann geliefert werden.")
bestand += lieferung
anzahl_mitarbeiter -= benoetigt
print (bestand)
print (anzahl_mitarbeiter)
elif lagerkapazität < lieferung + bestand:
print ("Die Lagerkapazität reicht leider nicht aus!")
elif anzahl_mitarbeiter < benoetigt:
print ("Zu wenig Mitarbeiter")
Sieht besser aus ...bin aber immer noch nicht zufrieden.
lagerkapazität = 1000
bestand = 500
anzahl_mitarbeiter = 10
print ("Wie groß ist die Lieferung")
lieferung = int(input("Bitte geben Sie die Größe der Lieferung an:"))
benoetigt = int(input("Bitte geben Sie die Anzahl der benötigten Mitarbeitern an:"))
if lieferung + bestand <= lagerkapazität and anzahl_mitarbeiter >= benoetigt:
print ("Die Ware kann geliefert werden.")
bestand += lieferung
anzahl_mitarbeiter -= benoetigt
print (bestand)
print (anzahl_mitarbeiter)
elif lagerkapazität < lieferung + bestand:
print ("Die Lagerkapazität reicht leider nicht aus!")
elif anzahl_mitarbeiter < benoetigt:
print ("Zu wenig Mitarbeiter")
Sieht besser aus ...bin aber immer noch nicht zufrieden.
- __blackjack__
- User
- Beiträge: 14076
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@qcaine: Was verstehst Du denn an meiner Beschreibung nicht? Erst die beiden Fälle testen bei denen *nicht* ausgeladen werden kann, einzeln, damit man dem Benutzer mitteilen kann woran es liegt, und wenn beide Gründe nicht auszuladen *nicht* zutreffen, dann wird der ``else``-Zweig betreten in dem dann ausgeladen wird. So muss jede Bedingung nur *einmal* im Code stehen. Weniger Code, weniger Wiederholung, weniger Angriffsfläche um Fehler zu machen.
Wenn die wie bei Dir im Moment zweimal im Code stehen, sollte man das mindestens mit einem ``else``-Zweig absichern. Der dürfte ja nie betreten werden. Ausser man hat einen Fehler bei den Bedingungen, so dass die nicht das gleiche Testen und es Fälle geben kann bei denen keine der drei Bedingungen zutrifft. So etwas kann man mit einem ``assert`` absichern, dass so ein Fall wenigstens nicht einfach so durchgeht, ohne das man das merkt. Einfach ein
anfügen.
Warum sind da Leerzeichen zwischen `print` und der öffnenden Klammer? Zwischen Funktion und öffnender Klammer für den Aufruf kommt kein Leerzeichen. Hast Du bei den anderen Funktionsaufrufen ja auch nicht gemacht.
Die beiden Zeilen in den beiden ``elif``-Zweigen sind ein Leerzeichen zu weit eingerückt.
Die Einrückung würde man im Beitrag übrigens sehen, wenn Du den Code in entsprechende Code-Tags setzt. Im vollständigen Beitragseditor ist das die Schaltfläche die mit </> beschriftet ist, wenn man die Tags nicht manuell eintippen mag.
Wenn die wie bei Dir im Moment zweimal im Code stehen, sollte man das mindestens mit einem ``else``-Zweig absichern. Der dürfte ja nie betreten werden. Ausser man hat einen Fehler bei den Bedingungen, so dass die nicht das gleiche Testen und es Fälle geben kann bei denen keine der drei Bedingungen zutrifft. So etwas kann man mit einem ``assert`` absichern, dass so ein Fall wenigstens nicht einfach so durchgeht, ohne das man das merkt. Einfach ein
Code: Alles auswählen
else:
assert False, "this should never have happened"
Warum sind da Leerzeichen zwischen `print` und der öffnenden Klammer? Zwischen Funktion und öffnender Klammer für den Aufruf kommt kein Leerzeichen. Hast Du bei den anderen Funktionsaufrufen ja auch nicht gemacht.
Die beiden Zeilen in den beiden ``elif``-Zweigen sind ein Leerzeichen zu weit eingerückt.
Die Einrückung würde man im Beitrag übrigens sehen, wenn Du den Code in entsprechende Code-Tags setzt. Im vollständigen Beitragseditor ist das die Schaltfläche die mit </> beschriftet ist, wenn man die Tags nicht manuell eintippen mag.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hallo
ich habe das jetzt so gemacht, es ist einigermaßen vernünftige Lösung
Und das mit "assert" geht bei mir nicht, keine Ahnung warum.
ich habe das jetzt so gemacht, es ist einigermaßen vernünftige Lösung
Code: Alles auswählen
lagerkapazitaet = 1000
bestand = 500
mitarbeiter = 10
lieferung = int(input("Welchen Umfang hat die Lieferung?"))
anzahl_mitarbeiter = int(input("Wie viele Mitarbeiter werden benötigt?"))
if lieferung + bestand <= lagerkapazitaet:
if anzahl_mitarbeiter <= mitarbeiter:
print("Die Ware kann geliefert werden")
bestand += lieferung
mitarbeiter -=anzahl_mitarbeiter
print("Neuer Bestand:", bestand)
print("Verfügbare Mitarbeiter:", mitarbeiter)
else:
print("Die Ware kann nicht geliefert werden, zu wenig Mitarbeiter.")
else:
print("Die Ware kann nicht geliefert werde, Lagerkapazität reicht nicht aus.")
Wir haben auch keine Ahnung, warum es bei Dir nicht funktioniert, weil wir Deinen Code nicht kennen und auch nicht die Fehlermeldung, die Du bekommst.
Besser ist sowieso eine Umstellung der Abfragen:
Besser ist sowieso eine Umstellung der Abfragen:
Code: Alles auswählen
lieferung = int(input("Welchen Umfang hat die Lieferung?"))
anzahl_mitarbeiter = int(input("Wie viele Mitarbeiter werden benötigt?"))
if lieferung + bestand > lagerkapazitaet:
print("Die Ware kann nicht geliefert werde, Lagerkapazität reicht nicht aus.")
elif anzahl_mitarbeiter > mitarbeiter:
print("Die Ware kann nicht geliefert werden, zu wenig Mitarbeiter.")
else:
print("Die Ware kann geliefert werden")
bestand += lieferung
mitarbeiter -=anzahl_mitarbeiter
print("Neuer Bestand:", bestand)
print("Verfügbare Mitarbeiter:", mitarbeiter)