Ich würde gerne ein Programm zu dieser Aufgabenstellung schreiben
Ein Flughafenparkhaus hat folgenden Tarif
Parkdauer bis 2 Stunden ist kostenlos
Jede weitere angefangene Stunde 2€
Höchstgebühr überhaupt 30€
Die Parkzeit wird in vollen geparkten Minuten eingegeben
Entwirf ein Programm zur Berechnung der Parkgebühr
Ich habe es soweit geschafft aber wie muss ich weitervorgehen?
stunden = int(input("Wie lange haben sie geparkt? (Nur die Stundenanzahl angeben): "))
if(stunden<=2):
print("Keine Kosten für Sie")
else:
Parkzeit und Parkgebühren
Was ist denn, wenn stunden > 2 ist, rechne das doch mal auf Papier von Hand, wie du da vorgehen würdest
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Tunc0: Ansonsten als Tipp vielleicht noch die `max()`-Funktion, die eine Rolle in einer Lösung spielen könnte.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich habe sozusagen es geschafft aber kann man dies vereinfachen?
stunden = int(input("Wie lange haben sie geparkt? (Nur die Stundenanzahl angeben): "))
if(stunden<=2):
print("Keine Kosten für Sie")
else:
if(stunden > 2, stunden <=3):
print("Die kosten betragen 2€")
else:
if(stunden > 3, stunden <=4):
print("Die kosten betragen 4€")
else:
if(stunden > 4, stunden <=5):
print("Die kosten betragen 6€")
else:
if(stunden > 5, stunden <=6):
print("Die kosten betragen 8€")
else:
if(stunden > 6, stunden <=7):
print("Die kosten betragen 10€")
else:
if(stunden > 7, stunden <=8):
print("Die kosten betragen 12€")
Ja, kann man. Das Geheimnis ist das gute alte geteilt-rechnen. Und plus. Und minus. Mit ganzen Zahlen. Und zerteilen in kleiner Teilaufgaben. Rechne doch mal aus, wieviele bezahlte Stunden eine Zeitdauer x hat. Zb x = 7.
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Code: Alles auswählen
while(True):
print("Geben sie ihre vorraussichtlichen Parkstunden ein: ")
stunden = int(input())
print("Info: bis 2h - kostenlos, ansonsten 2€/h, max. 30€")
if stunden <= 2:
kosten = 0
print("Glückwunsch! Sie müssen nichts bezahlen.\n")
elif stunden == 17:
kosten = 30
print("Ihr Kosten betragen "+str(kosten)+"€\n")
elif stunden > 17:
print("Ihre Parkzeit wurde überschritten! Folgen: ...\n")
else:
kosten = stunden * 2 - 4
print("Ihr Kosten betragen "+str(kosten)+"€\n")
Als erstes (solltes) gibst du einen Text an den "Kunden" aus.
Dann gibst du die Stundenanzahl ein, die in int erfolgt - wichtig: hierbei sollte man noch etwas dazu schreiben, um Abstürze zu vermeiden bezüglich wenn man eine Kommazahl eingibt!
Dann öffnest du den Anweisungsblock mit deinen genannten Bedingungen.
PS. "str(kosten)" aus dem Grund, da kosten eine Integer ist, aber es können nur Strings ausgegeben werden. "str()" gibt es sozusagen als String aus.
Zuletzt geändert von xXSkyWalkerXx1 am Dienstag 30. Oktober 2018, 22:18, insgesamt 1-mal geändert.
Ziemlich eindeutig falsch. Du gibst für 3 Stunden kosten von 6€ aus. Sind aber nur 2€. Und deine Bedingungen zur Überschreitung der Parkzeit von 17h (nicht vergessen, ersten zwei umsonst....) sind Murks. Das ist eine deckelung. Kein verbot.
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Stimmt, hab das vergessen, werde es gleich korrigieren!__deets__ hat geschrieben: ↑Dienstag 30. Oktober 2018, 22:03 Ziemlich eindeutig falsch. Du gibst für 3 Stunden kosten von 6€ aus. Sind aber nur 2€. Und deine Bedingungen zur Überschreitung der Parkzeit von 17h (nicht vergessen, ersten zwei umsonst....) sind Murks. Das ist eine deckelung. Kein verbot.
EDIT:
Habe es nun behoben. Was deine Anmerkung zur Überschreitung angeht, man kann es ja nach belieben selbst bearbeiten. Es soll eine Vorlage sein...
Zuletzt geändert von xXSkyWalkerXx1 am Dienstag 30. Oktober 2018, 22:20, insgesamt 1-mal geändert.
Die reine Berechnung geht ziemlich eindeutig als Einzeiler, solange ein Tag nicht überschritten wird. Ist die Parkzeit länger, wird die Aufgabe etwas interessanter, insbesondere wenn Stundensatz, kostenfreie Parkzeit und Tagesmaximum als variable Werte betrachtet werden und, wenn die Aufgabe als Funktion umgesetzt werden soll, die beiden letzten Werte als Parameter optional sein sollen. Dann wird es zu einer schönen Übungsaufgabe für den fortgeschrittenen Anfänger.
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@kbr: Wo liest Du in der Aufgabe etwas von Tagen? Da steht nur ein Maximalpreis. Nicht das der pro Tag gilt. Das mag nicht realistisch sein, aber das ist ja auch nur eine Übungsaufgabe.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
@xXSkyWalkerXx1: schön, dass Du hier Hausaufgaben für andere löst. Noch ein paar Anmerkungen: while ist keine Funktion, braucht also auch keine Klammern. Statt Strings mit str und + zusammenzustückeln, benutze Formatierung. Die Einrückungen stimmen nicht. Der Fall stunden == 17 ist schon in einem anderen Zweig abgehandelt.
Die Aufgabenstellung schreibt immer noch, dass man Minuten eingeben soll.
Die Aufgabenstellung schreibt immer noch, dass man Minuten eingeben soll.
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Naja, wenn er keine Ahnung hat wird er auch mit der HA nicht weit kommen.Sirius3 hat geschrieben: ↑Mittwoch 31. Oktober 2018, 09:20 @xXSkyWalkerXx1: schön, dass Du hier Hausaufgaben für andere löst. Noch ein paar Anmerkungen: while ist keine Funktion, braucht also auch keine Klammern. Statt Strings mit str und + zusammenzustückeln, benutze Formatierung. Die Einrückungen stimmen nicht. Der Fall stunden == 17 ist schon in einem anderen Zweig abgehandelt.
Die Aufgabenstellung schreibt immer noch, dass man Minuten eingeben soll.
Ach stimmt ja! Man, ich bin da noch teils bei C++ , wo das mit den Klammern ist. ^^ Aber es tut ja wenigstens kein Syntax error bringen.
Formatierung? War das nicht die Sache mit ".format" etc. ?
Wegen der Einrückung muss ich mal schauen...danke!
In seinem Post schreibt er aber doch von Stunden(?).
EDIT: gesehen, er sagte dazu noch Minuten.
Aber siehste! Dann muss er noch was ändern, um die HA vollständig zu
haben. ^^
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Tunc0: Du hast das mit dem gezeigten Code sicher nicht geschafft, weil der falsche Ausgaben liefert. Es sind immer Keine Kosten für alles unter oder gleich zwei Stunden und 2€ sonst, egal wie lange man geparkt hat. Zudem fordert die Aufgabe das der Benutzer die Zeit in Minuten und nicht in Stunden angeben soll.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Habe es nun so gemacht dass die Minuten ausgegeben werden, aber wenn man beispielsweise 2,5 Stunden angibt also 2.5, welches 150 min wären kommen falsche kosten, wie müsste ich es verändern
while(True):
print("Geben sie ihre vorraussichtlichen Parkstunden ein: ")
stunden = float(input())
print("Info: bis 2h - kostenlos, ansonsten 2€/h, max. 30€")
minuten = stunden * 60
if stunden <= 2:
print("Glückwunsch! Sie müssen nichts bezahlen.")
print("Ihre Parkdauer beträgt", stunden*60,"min")
elif stunden > 17:
print("Ihre Kosten betragen 30€")
print(stunden*60,"min")
else:
kosten = stunden * 2 - 4
print("Ihr Kosten betragen "+str(kosten)+"€")
print("Ihre Parkdauer beträgt", stunden*60,"min")
while(True):
print("Geben sie ihre vorraussichtlichen Parkstunden ein: ")
stunden = float(input())
print("Info: bis 2h - kostenlos, ansonsten 2€/h, max. 30€")
minuten = stunden * 60
if stunden <= 2:
print("Glückwunsch! Sie müssen nichts bezahlen.")
print("Ihre Parkdauer beträgt", stunden*60,"min")
elif stunden > 17:
print("Ihre Kosten betragen 30€")
print(stunden*60,"min")
else:
kosten = stunden * 2 - 4
print("Ihr Kosten betragen "+str(kosten)+"€")
print("Ihre Parkdauer beträgt", stunden*60,"min")
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Tunc0: Die Eingabe ist immer noch in Stunden. Die *Eingabe* soll aber laut Aufgabenstellung in *vollen Minuten* sein.
Ansonsten ist die Formel ganz offensichtlich falsch. Du müsstest die also so ändern, das sie richtige Ergebnisse liefert.
Wenn etwas am Anfang oder Ende von jedem Zweig in einem ``if``/``elif``/``else``-Konstrukt steht, dann ist das eine Verletzung des DRY-Prinzips (Don't Repeat Yourself). Die Ausgabe der Parkdauer kann man *einmal* *danach* in den Code schreiben.
Man kann das ganze auch ohne ``if``/``elif``/``else`` in eine einzige Berechnung packen. Hier mal in Ruby, damit ich Dir die Hausaufgaben nicht so ganz komplett löse.
Ansonsten ist die Formel ganz offensichtlich falsch. Du müsstest die also so ändern, das sie richtige Ergebnisse liefert.
Wenn etwas am Anfang oder Ende von jedem Zweig in einem ``if``/``elif``/``else``-Konstrukt steht, dann ist das eine Verletzung des DRY-Prinzips (Don't Repeat Yourself). Die Ausgabe der Parkdauer kann man *einmal* *danach* in den Code schreiben.
Man kann das ganze auch ohne ``if``/``elif``/``else`` in eine einzige Berechnung packen. Hier mal in Ruby, damit ich Dir die Hausaufgaben nicht so ganz komplett löse.
Code: Alles auswählen
#!/usr/bin/env ruby
FEE_PER_HOUR = 2
MAX_FEE = 30
def main
puts "Bitte die Parkdauer in Minuten angeben:"
minutes = gets.to_i
hours = (minutes / 60.0).ceil
parking_fee = [[hours - 2, 0].max * FEE_PER_HOUR, MAX_FEE].min
puts "Die Parkgebühr für #{hours} Stunde(n) beträgt #{parking_fee}€."
end
main if __FILE__ == $PROGRAM_NAME
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich habe es versucht zu machen wie du es in ruby gemacht hast, aber kommen trotzdem falsche kosten, woran liegt es?
kostenprostunde = 2
maximalekosten = 30
minuten = int(input("Bitte die Parkdauer in Minuten angeben:"))
stunden = (minuten / 60)
parkkosten = (stunden - 2) * kostenprostunde
print("Die Parkgebühr für", stunden,"Stunden(n) beträgt", parkkosten)
kostenprostunde = 2
maximalekosten = 30
minuten = int(input("Bitte die Parkdauer in Minuten angeben:"))
stunden = (minuten / 60)
parkkosten = (stunden - 2) * kostenprostunde
print("Die Parkgebühr für", stunden,"Stunden(n) beträgt", parkkosten)
Was heißt denn “falsche Kosten”? Es hilft uns, wenn deine fehlerbeschreibungen etwas aussagekräftiger sind.
Und ich sehe gleich mehrere Ursachen. Was ist denn zb 123 Minuten durch 60? Und was passiert, wenn die Stunden kleiner 2 sind?
Und ich sehe gleich mehrere Ursachen. Was ist denn zb 123 Minuten durch 60? Und was passiert, wenn die Stunden kleiner 2 sind?