gesammte Tickets-Kosten für eine Konferenz berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lini
User
Beiträge: 26
Registriert: Freitag 13. November 2020, 00:39

Hallo,

ich beginne folgende Aufgabe zu lösen, nun benötige ich Ihre Hilfe/korrekturen auf dem Weg zur entgültigen Klarheit.




Man muss ein Programm (auf Python) zu schreiben, welches das gesammte/summare Tickets-Kosten berechnet. Das Programm muss wie folgt arbeiten:

1. Zuerst soll der Benutzer befragt werden: wie viel (Anzahl) der Tickets will er für die Konferenz kaufen.

2. Weiter, für jedes Ticket wird es nach Alter des Besuchers befragt. Gemäß dem Alter des Besuchers werden Preiskathegorien gewählt:

- Falls besucher jünger als 18 Jahre alt ist - dann kommt er zur Konferenz kostenlos

- Falls Alter des Besuchers vom 18 bis 25 Jahre Alt: - dann der Preis pro Ticket 99 EU

-Falls Beucher älter als 25 J.A.: - dann beträgt der Preis: 139 EU

Im Resultat am Ende soll die gesammte Summe (für alle bestellte Tickets) herausgegeben werden. Falls es kommen mehr als 5 Personen zusammen - dann soll die Gruppe 20% Ermäßigung bekommen.




Unten ist mein Anfang, Roh- Variante. Ich sammle Tipps, Korrekturen und Ideen für die weitere Code-Entwicklung:

Code: Alles auswählen

Nr_Tickets = int(input("please enter which number of tickets do you need: "))

first = Nr_Tickets[0] # speichern vom ersten Ticket
count = 0 # Zähler setzen
result = '' # resultierende Zeile

for i in range Nr_Tickets                          # Idea: to go all Nr_Tickets through and to ask for age for each Ticket
    age(i) = int(input("please enter your age: "))
        i += 1
# Then needed to count Ticktes in each age-cathegory. 
# After it to add Prices in each AgeCathegory and in all Age-Cathegories.     How to realise it?
        
# if age < 18:
#    Preis_a18 = 0
#    print('entry free of cost')
# elif 18 <= age < 25:
#    Preis_18a25 = 99
#    print('your costs are 99 EU per Ticket')
# else:
#    Preis_a25 = 139
#    print('your costs are 139 EU per Ticket')

Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lini: Irgendetwas was so ähnlich wie Python-Code aussieht in eine Datei zu schreiben oder hier zu zeigen, macht wenig Sinn. Das ist offensichtlich kein gültiger Python-Code. Das kommt nicht mal am Compiler vorbei. Wenn Du so etwas zeigst, dann bitte gleich mit der passenden Fehlermeldung und was Du an der nicht verstehst und warum Du das an der Stelle nicht erwartet hättest.

Ich weiss jetzt nicht was ich hier konkret antworten soll, denn es gibt ja nicht wirklich eine konkrete Frage. Fang an das zu lösen bis Du zu einem konkreten Problem kommst, oder wenn Du fertig bist, zeig die Lösung und frag ob es Verbesserungsvorschläge gibt.

Ganz allgemein ist Programmentwicklung in der Regel das Zerlegen von Problemen in kleinere Teilprobleme, solange bis man die Teilprobleme mit einer Funktion mit wenigen Zeilen Code lösen kann. Die testet man dann und wenn sie funktioniert, geht man zur nächsten Funktion mit der nächsten Teillösung weiter. Dann setzt man grössere Teillösungen aus den kleineren Teillösungen zusammen, und testet die wieder. Und das macht man bis das Gesamtproblem gelöst ist.

Wobei diese Aufgabe relativ simpel ist und man die Teillösungen eigentlich so ziemlich direkt anhand der Aufgabenstellung nacheinander herunterschreiben kann. Wenn man am Anfang die Benutzerinteraktion und die Berechnungen noch nicht sauber trennen will/muss, braucht man ausser der Hauptfunktion nicht zwingend weitere Funktionen.

Ausser man möchte auch sinnvoll auf Benutzerfehler bei der Eingabe reagieren, also beispielsweise falls der Benutzer Buchstaben statt Ziffern eingibt, oder negative Zahlen. Denn wenn man das behandeln will, muss man das sowohl bei der Eingabe der Ticketanzahl, als auch bei der Eingabe des Alters. Und das würde man nicht zweimal nahezu gleich in den Code schreiben, sondern *einmal* in eine Funktion.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Das Grundgerüst von Python-Programmen sieht üblicherweise so aus:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    #
    # The main program goes here.
    #


if __name__ == "__main__":
    main()
Ach zum auskommentierten Code noch: Wenn man im ``if`` <18 geprüft hat, dann ist ``18 <= age`` im ``elif`` überflüssig, denn das gilt auf jeden Fall.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Lini
User
Beiträge: 26
Registriert: Freitag 13. November 2020, 00:39

Danke für eine inhaltliche Antwort.

Ja, der Code war damals nicht fertig... ich habe nur Ideen generiert und das was ich nach meiner Meinung gebrauchen konnte.

Und ja: die Grosse Fragen muss man in die kleinen zerteilen.

Ich ahbe es so dann gemacht:

Code: Alles auswählen

price_common = 0
while True:
    try:
        Nr_Tickets = int(input("please enter which number of tickets do you need: "))
        if type(Nr_Tickets) == int:
            break
    except ValueError:
        print('Enter type int')

for i in range (Nr_Tickets):                         
    age_for_ticket = int(input("For which age is a needed Ticket №{i}? : "))
    while True:
        if age_for_ticket < 18:
            print('entry free of cost')
            break
        elif 18 <= age_for_ticket < 25:
            print('your costs are 99 EU per Ticket')
            price_common += 99
            break
        elif 25 < age_for_ticket:
            price_common += 139
            print('your costs are 139 EU per Ticket')
            break
    continue

if Nr_Tickets > 5:
    price_common = price_common - (price_common * (20 / 100))
    print('to pay with reducing, EU: ', price_common)
else:
    print('to pay, EU: ', price_common)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablennamen werden generell komplett klein geschrieben, benutze keine Abkürzungen, also statt Nr_Tickets -> number_of_tickets.
Wenn Du einen String per int in eine Zahl umwandelst, dann ist diese immer vom Typ int. Das if ist also immer wahr.
Was glaubst Du, bewirkt die while-Schleife innerhalb der for-Schleife? Entweder ist eine der if-Bedingungen wahr, dann wird die Schleife sofort wieder verlassen, oder es ist keine wahr, dann hast Du eine Endlosschleife. Manche der Bedingungen sind überflüssig, weil Du elif benutzt, und dieser Fall schon von einer vorherigen if-Bedingung erfüllt war.
Das `continue` ist unsinnig.
Antworten