Liste mit while-Schleife

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
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

Hallo,
(vorab, ich bin absluter Programmieranfänger :D )

ich möchte bei folgendem Programm doe for-Schleife durch eine while-Schleife ersetzen. Habe schon alles mögliche ausprobiert..
Ich bitte um Hilfe! =)

Code: Alles auswählen

q=.25
summe=0
i=range(1,100)
while i==99 :
    summe=summe+q**i
    print summe
Zuletzt geändert von Anonymous am Mittwoch 16. April 2014, 21:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@AnNa: In dem Quelltext ist gar keine ``for``-Schleife.

Wenn man mal ausgwählte Teilausdrücke in einer Python-Shell ausprobiert, dann wird schnell klar, dass das offensichtlich nicht funktionieren kann:

Code: Alles auswählen

In [1]: range(1, 100)
Out[1]: 
[1,
 2,
 3,
 4,
 5,
 6,
 7,
 8,
 9,
 10,
 11,
 12,
 13,
 14,
 15,
 16,
 17,
 18,
 19,
 20,
 21,
 22,
 23,
 24,
 25,
 26,
 27,
 28,
 29,
 30,
 31,
 32,
 33,
 34,
 35,
 36,
 37,
 38,
 39,
 40,
 41,
 42,
 43,
 44,
 45,
 46,
 47,
 48,
 49,
 50,
 51,
 52,
 53,
 54,
 55,
 56,
 57,
 58,
 59,
 60,
 61,
 62,
 63,
 64,
 65,
 66,
 67,
 68,
 69,
 70,
 71,
 72,
 73,
 74,
 75,
 76,
 77,
 78,
 79,
 80,
 81,
 82,
 83,
 84,
 85,
 86,
 87,
 88,
 89,
 90,
 91,
 92,
 93,
 94,
 95,
 96,
 97,
 98,
 99]

In [2]: range(1, 100) == 99
Out[2]: False
Eine Liste mit Zahlen ist niemals gleich einer einzelnen Zahl. Da hast Du nochmal Glück gehabt, denn deshalb wird der Inhalt der Schleife nie ausgeführt. Wäre die Bedingung nämlich wahr, dann würde die Schleife endlos laufen, weil innerhalb der Schleife nichts an `i` verändert wird, und damit die Bedingung nie falsch werden würde.
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

oh, habe vergessen das ursprünglich Programm zu posten, bei dem das mit einer for schleife gemacht ist:

Code: Alles auswählen

q=.25
summe=0
for i in xrange(100):
    summe=summe+q**i
    print summe
aber wie kann ich denn hier dem i zuweisen, dass es die Zahlen von 1 bis 99 durchlaufen soll?
Zuletzt geändert von Hyperion am Mittwoch 16. April 2014, 22:06, insgesamt 1-mal geändert.
Grund: Code in Python-Code-Tags gesetzt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AnNa hat geschrieben:aber wie kann ich denn hier dem i zuweisen, dass es die Zahlen von 1 bis 99 durchlaufen soll?
Analog dazu, wie du anderen Bezeichnern (wi z.B. summe) einen neuen Wert zuweist.

Das while in deiner ursprünglichen Frage war ja auch schon fast passend, nur die Bedingung für ein weiteres Durchlaufen sollte wohl eher darauf prüfen ob der Wert kleiner oder gleich 99 ist und nicht, ob er exakt 99 ist.
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

kann ich i denn mit i=xrange(1,100) diese Liste zuweisen?
BlackJack

@AnNa: Wieso willst Du `i` eine Liste zuweisen? Du vergleichst `i` doch mit einer Zahl und verwendest `i` in der Rechnung als Zahl, also solltest Du `i` auch eine Zahl zuweisen.
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

aber das ist ja jetzte ine Summe. und i soll die Zahlen von 1 bis 99 durchlaufen soll... (ist zumindest meine Logik dahinter^^)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und wie "durchläuft" eine Variable alle Zahlen von 1 bis 99? Kleiner Tipp: Addition ist das Stichwort ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

also muss ich i=1+x setzen? aber entweder muss ich jetzt x als eine liste definieren (was ja keinen sinn macht, weilich dann wieder beim ursprungsproblem wäre) oder x auch noch eine Zahl zuweisen? verstehe nicht wie ich das machen soll...
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AnNa hat geschrieben:also muss ich i=1+x setzen? aber entweder muss ich jetzt x als eine liste definieren (was ja keinen sinn macht, weilich dann wieder beim ursprungsproblem wäre) oder x auch noch eine Zahl zuweisen? verstehe nicht wie ich das machen soll...
Du brauchst keine Liste. Du brauchst auch kein x, wo auch immer das herkommt.

Du möchtest i um eins erhöhen, also brauchst du ein i und eine 1. Bitteschön: i = i + 1 (oder i += 1).
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

okay, dankeschön... =)
programmiere grade das erste mal irgendwas alleine, also entschuldige, dass ich auf sowas nicht komme.. :oops:
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AnNa hat geschrieben:programmiere grade das erste mal irgendwas alleine, also entschuldige, dass ich auf sowas nicht komme.. :oops:
Und wir neigen hier wiederum nicht dazu, direkt fertige Lösungen ins Haus zu liefern. Wir versuchen den Fragesteller sanft (gut, manchmal auch weniger sanft) in die richtige Richtung zu schubsen.

Kurz gesagt: Frag ruhig weiter.
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

finde ich ja auch gut so, aber ich bin einfach nicht von selbst drauf gekommen, das so zu machen =)

habe trotzdem jetzt wieder eine Fehlermeldung, dass ich i nicht definiert sein...

Code: Alles auswählen

q=.25
summ=0
i=i+1
while i<=99:
    summ=summ+q**i
print summ
Zuletzt geändert von Hyperion am Donnerstag 17. April 2014, 08:25, insgesamt 1-mal geändert.
Grund: Code in Python-Code Tags gesetzt.
BlackJack

@AnNa: Naja es ist ja auch nicht definiert. Was soll denn bei `i + 1` heraus kommen wenn `i` vorher noch nie ein Wert zugewiesen wurde?
AnNa
User
Beiträge: 12
Registriert: Mittwoch 16. April 2014, 18:26

Und was m7ss ich machen um sas zu ämdern?
BlackJack

@AnNa: `i` vorher einen Wert zuweisen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@AnNa: und achte darauf, dass sich der Wert der while-Bedingung innerhalb der Schleife auch ändert, weil sonst ist die Bedingung nie oder immer erfüllt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und bitte bitte bitte benutze für Quellcode, den Du hier postest, die dafür vorgesehenen Tags! :-) Direkt über dem Eingabefeld gibt es dazu sogar einen Button, den Du nur drücken musst. Die Sprache "Python" ist schon voreingestellt. Wenn Du das Ergebnis sehen willst, geh einfach mal auf einen Beitrag, den ich editiert habe und rufe "Ändern" auf diesem auf. Dann siehst Du, wie es im Editor aussehen muss.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten