Seite 1 von 2

Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 17:15
von Tunc0
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:

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 19:16
von ThomasL
Was ist denn, wenn stunden > 2 ist, rechne das doch mal auf Papier von Hand, wie du da vorgehen würdest

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 20:05
von Sirius3
Wenn Du Minuten eingeben sollst, ist die Abfrage falsch. Wie sähe denn die Rechnung aus, wenn von Anfang an jede Stunde 2€ kostet?

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 20:11
von __blackjack__
@Tunc0: Ansonsten als Tipp vielleicht noch die `max()`-Funktion, die eine Rolle in einer Lösung spielen könnte.

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 20:41
von Tunc0
Sirius3 hat geschrieben: Dienstag 30. Oktober 2018, 20:05 Wenn Du Minuten eingeben sollst, ist die Abfrage falsch. Wie sähe denn die Rechnung aus, wenn von Anfang an jede Stunde 2€ kostet?
Könntest du mir helfen ich bin echt ratlos

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 21:11
von Tunc0
ThomasL hat geschrieben: Dienstag 30. Oktober 2018, 19:16 Was ist denn, wenn stunden > 2 ist, rechne das doch mal auf Papier von Hand, wie du da vorgehen würdest
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€")

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 21:17
von __deets__
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.

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 21:57
von xXSkyWalkerXx1

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")
Ziemlich eindeutig.
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.

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 22:03
von __deets__
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.

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 22:08
von xXSkyWalkerXx1
__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.
Stimmt, hab das vergessen, werde es gleich korrigieren! :D

EDIT:
Habe es nun behoben. Was deine Anmerkung zur Überschreitung angeht, man kann es ja nach belieben selbst bearbeiten. Es soll eine Vorlage sein...

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 22:18
von kbr
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.

Re: Parkzeit und Parkgebühren

Verfasst: Dienstag 30. Oktober 2018, 23:55
von __blackjack__
@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. :-)

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 00:19
von kbr
@__blackjack__: Ich habe die Aufgabenstellung einfach frei erweitert :-)

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 09:20
von Sirius3
@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.

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 10:41
von xXSkyWalkerXx1
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.
Naja, wenn er keine Ahnung hat wird er auch mit der HA nicht weit kommen.
Ach stimmt ja! :D 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. :D
Aber siehste! Dann muss er noch was ändern, um die HA vollständig zu
haben. ^^

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 13:11
von __blackjack__
@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.

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 20:49
von Tunc0
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")

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 20:58
von __blackjack__
@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. :-)

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

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 21:36
von Tunc0
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)

Re: Parkzeit und Parkgebühren

Verfasst: Mittwoch 31. Oktober 2018, 22:01
von __deets__
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?