Aufgabe Informatik While-Loop

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.
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

Hallo,
wir haben grade in der schule while loops gelernt. doch iwie bekomm ich das nicht hin. wir sollen ein Programm schreiben das eine Rechnung erstellt. Dabei soll man nacheinander die Preise eingeben und sobald man 0 eingibt, soll die summe der preise angezeigt werden.

wie mach ich das?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Als erstes mal den obligatorischen Link: http://www.python-forum.de/viewtopic.php?f=1&t=1689

@Problem: Zeig uns doch mal Deine Überlegungen! Du kannst ja einfach mal formulieren, wie Du denkst, dass man das Problem angehen kann. Du kannst ja auch mal Deine ersten Code-Fragmente zeigen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Zeig doch mal her, was du schon probiert hast.

Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

Naja, es ist eigentlich keine Hausaufgabe. Doch iahch habe das Problem in der Schule noch nicht gelöst, also wollte ich es jetz zu hause probieren.

also ich hatte das so gedacht:

Code: Alles auswählen

preis = 1
while preis > 0:
    print "Artikelpreis:"
    preis = input()
    
    if preis == 0:
        print preis
        break
 
so und jetz weiß cich nicht genau wie ich die rechnung hinbekomme.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wieso ist `preis` zu Beginn auf 1? Dann würde man ja voraussetzen, dass immer etwas gekauft würde und zwar immer mindestens ein Produkt mit dem Preis 1.

Tipp: Du brauchst einen weiteren Namen (z.B. `summe`), an den Du die Summe aller Preise bindest. Du brauchst dann auch kein `break`, sondern kannst einfach nach der Schleife die Summe ausgeben.

Edit: Benutzt Du Python 3.x?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

Nein ich benutze 2.7. Ist 3.x generell besser?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

JoinZ hat geschrieben:Nein ich benutze 2.7. Ist 3.x generell besser?
Nein. Aber dann solltest Du kein `input` verwenden, sondern `raw_input` und das ganze per `float` oder `int` casten.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

das heißt? :D also float und int hatten wir noch nicht. wir hatte bis jetz nur 7 stunden inf.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das sind Built-in Funktionen: http://docs.python.org/library/functions.html

Damit kannst Du eine Zahl, die in einem String codiert ist in eine Integer oder Floatzahl umwandeln. Da `raw_input` nur Strings liefert, musst Du das machen, um mit den Werten rechnen zu können.

Code: Alles auswählen

In [23]: data = "1.23"

In [24]: float(data)
Out[24]: 1.23

In [25]: type(float(data))
Out[25]: <type 'float'>

In [26]: type(data)
Out[26]: <type 'str'>
In Deinem Falle kann man `input` also so ersetzen:

Code: Alles auswählen

preis = float(raw_input("Preis"))
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

ok danke. Aber wie baue ich das jetz in mein programm ein?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

JoinZ hat geschrieben:ok danke. Aber wie baue ich das jetz in mein programm ein?
Hab ich Dir doch grad explizit geschrieben... quasi 1:1 auf dem Tablett serviert :roll:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

mhmm versteh ich nicht :P

Code: Alles auswählen

while preis > 0:
    preis = float(raw_input("Preis"))
    
    if preis == 0:
        print preis
        
so oder wie?
Zuletzt geändert von JoinZ am Mittwoch 24. August 2011, 16:13, insgesamt 1-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

JoinZ hat geschrieben:ok danke. Aber wie baue ich das jetz in mein programm ein?
Nun, das ersetzt erst einmal die Zeile in der du bisher mit input() gearbeitet hast.

Dann musst du weitermachen. Du möchtest eine Summe haben. Die musst du irgendwo lassen. Bisher hast du nur etwas, das sich preis nennt. Jetzt musst du noch die Summe verwalten. Vor der Schleife ist die Summe Null, in der Schleife wird der jeweilige Preis aufaddiert.

Welchen Code würdest du jetzt daraus machen?
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

Code: Alles auswählen

preis = 1
summe = 0
while preis > 0:
    preis = float(raw_input())
    
    summe = summe + preis
    if preis == 0:
        print summe
        
so klappts schonmal :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich finde es unschön, dass Du vor der Schleife einen Dummy-Wert an `preis` bindest. Besser wäre es wohl, einfach eine unendliche Schleife laufen zu lassen:

Code: Alles auswählen

while True:
    ...
    if preis == 0:
        break
Damit kannst Du Die den Dummy-Wert sparen und auch den Namen `summe` erst in der Schleife definieren.

Generell kannst Du Dir das `if`-Konstrukt zum Ausgeben der Summe sparen. Diese kannst Du doch immer nach der Schleife ausgeben.

Für

Code: Alles auswählen

summe = summe + preis
schreibt man in Python üblicher Weise die Kurzform:

Code: Alles auswählen

summe += preis
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

gut zu wissen. dankeschön hat mir sehr geholfen.
aber so bekomme ich immer die Fehlermeldung das summe nicht definiert sei. warum?

Code: Alles auswählen

while True:
    preis = float(raw_input("Preis:"))
    summe += preis
    if preis == 0:
        break
    
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Du musst ``summe`` schon vor der Schleife definieren. Keine Ahnung was Hyperion da gerade vorschwebt.
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

ja eben das versteh ich auch nicht
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kleiner Denkfehler von mir - natürlich aus pädagogischer Sicht eingebaut :-P
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoinZ
User
Beiträge: 15
Registriert: Mittwoch 24. August 2011, 15:26

Natürlich ;D
Antworten