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?
Aufgabe Informatik While-Loop
- 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.
@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
assert encoding_kapiert
- 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.
Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
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:
so und jetz weiß cich nicht genau wie ich die rechnung hinbekomme.
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
- 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?
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
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nein. Aber dann solltest Du kein `input` verwenden, sondern `raw_input` und das ganze per `float` oder `int` casten.JoinZ hat geschrieben:Nein ich benutze 2.7. Ist 3.x generell besser?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- 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.
In Deinem Falle kann man `input` also so ersetzen:
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'>
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
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hab ich Dir doch grad explizit geschrieben... quasi 1:1 auf dem Tablett serviertJoinZ hat geschrieben:ok danke. Aber wie baue ich das jetz in mein programm ein?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
mhmm versteh ich nicht
so oder wie?
Code: Alles auswählen
while preis > 0:
preis = float(raw_input("Preis"))
if preis == 0:
print preis
Zuletzt geändert von JoinZ am Mittwoch 24. August 2011, 16:13, insgesamt 1-mal geändert.
Nun, das ersetzt erst einmal die Zeile in der du bisher mit input() gearbeitet hast.JoinZ hat geschrieben:ok danke. Aber wie baue ich das jetz in mein programm ein?
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?
Code: Alles auswählen
preis = 1
summe = 0
while preis > 0:
preis = float(raw_input())
summe = summe + preis
if preis == 0:
print summe
- 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:
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
schreibt man in Python üblicher Weise die Kurzform:
Code: Alles auswählen
while True:
...
if preis == 0:
break
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
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
assert encoding_kapiert
gut zu wissen. dankeschön hat mir sehr geholfen.
aber so bekomme ich immer die Fehlermeldung das summe nicht definiert sei. warum?
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
- 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
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert