Addition Zahlen 1-100 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.
gisapppython
User
Beiträge: 6
Registriert: Sonntag 30. April 2017, 12:24

Hallo,

ich habe gerade erst angefangen mich mit Programmieren zu beschäftigen und habe als erste Aufgabe folgende bekommen:

Erstellen Sie in einem Editor zwei Python-Programme, die in einer Schleife die Zahlen von 1 bis 100 addiert und das Ergebnis ausgibt.
Verwenden Sie dazu eine Zählschleife und eine While-Schleife.

Könnt ihr mir da weiterhelfen? Weiß nicht so recht wo ich ansetzen soll.

LG
BlackJack

@gisapppython: Wo ist denn das konkrete Problem? Kennst Du die beiden Schleifenarten schon? Falls nein, arbeite die Unterlagen die Du hast oder ein Tutorial durch bis die beiden Schleifenarten durchgenommen wurden. In der Python-Dokumentation befindet sich beispielsweise ein Grundlagentutorial.
gisapppython
User
Beiträge: 6
Registriert: Sonntag 30. April 2017, 12:24

Hallo,

ich kenne sie schon ein wenig, aber wäre ganz gut, wenn mir jmd das Programm mal "kurz" schreiben könnte damit ich das nachvollziehen kann
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@gisapppython:
Na dann zeig doch mal, was Du bisher probiert hast.
gisapppython
User
Beiträge: 6
Registriert: Sonntag 30. April 2017, 12:24

also die Zählschleife habe ich so geregelt:

Code: Alles auswählen

for x in range (0,101,1):
    print (x)
Bei der while schleife habe ich einiges probiert aber es kam nie das gewünschte Ergebnis heraus
Zuletzt geändert von Anonymous am Sonntag 30. April 2017, 13:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte den Code in die dafuer vorgesehenen Tags packen. Sonst ist der nicht zu verstehen, da die Einrueckungen floeten gehen.

Und die for-Schleife ist ja ganz nett, aber da wird ja noch nix addiert. Wie die Addition prinzipiell aus sieht weisst du bestimmt schon, oder?
gisapppython
User
Beiträge: 6
Registriert: Sonntag 30. April 2017, 12:24

ja weiß ich, du würdest mir jetzt am meisten helfen, wenn du mir das kurz mal schicken könntest. Danke :)
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du mir kurz Geld fuer ne Kiste Bier schickst.

Hier gibt's Hilfe zur Selbsthilfe. Programmierdienstleistungen kosten.
BlackJack

@gisapppython: Die ``for``-Schleife löst zum einen ja noch nicht die Aufgabe und zum anderen stimmen die Zahlen nicht ganz. Auch wenn das vom Ergebnis her am Ende keinen Unterschied macht, würde ich mich da an die Aufgabenstellung halten.

Was hast Du bei der ``while``-Schleife denn probiert? Zeig doch mal. Und erkläre in Worten was Du Dir dabei gedacht hast und wo das Verhalten dann von Deinen Erwartungen abgewichen ist.

Anmerkung zum Quelltext: Zwischen Funktion und der öffnenden Klammer des Aufrufs kommt normalerweise kein Leerzeichen. Dafür setzt man eines nach Kommas, wie in normalen Texten auch, damit das lesbarer ist und nicht alles so zusammen klebt. Das und mehr steht auch im Style Guide for Python Code.

Der Defaultwert für die Schrittweite bei `range()` ist 1, das braucht man also nicht anzugeben, und falls man bei 0 starten möchte und keine Schrittweite angeben muss, kann man den Startwert auch weglassen.

Auf lange Sicht ist Dir nicht geholfen wenn Dir jemand die Aufgaben löst. Du sollst dabei ja etwas lernen.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

gisapppython hat geschrieben:also die Zählschleife habe ich so geregelt:

Code: Alles auswählen

for x in range (0,101,1):
    print (x)
Bei der while schleife habe ich einiges probiert aber es kam nie das gewünschte Ergebnis heraus
Den Range-Ausdruck kannst du vereinfachen zu 'range(1, 101)'. Ansonsten bist du strukturell doch schon auf dem richtigen Weg. Du brauchst für den A-Teil nun halt noch eine Variable, zu der der jeweilige Wert von 'x' (vielleicht besser 'i' nennen) addiert und deren Wert nach Ende der Schleife ausgegeben wird.Für's Addieren gibt es eine "Kurzschreibweise" und eine "Langform".
gisapppython hat geschrieben: ja weiß ich, du würdest mir jetzt am meisten helfen, wenn du mir das kurz mal schicken könntest. Danke :)
Nein, würde er nicht, da dann für dich der Lerneffekt ausbleibt.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

__deets__ hat geschrieben:Wenn du mir kurz Geld fuer ne Kiste Bier schickst.

Hier gibt's Hilfe zur Selbsthilfe. Programmierdienstleistungen kosten.
Also ich bin günstiger. Konditionen siehe Profilseite.

Code: Alles auswählen

result = 0
for x in range(1,101):
    result += x
print(result)

result = 0
x = 1
while x <= 100:
    result += x
    x += 1
print(result)
PS:

Code: Alles auswählen

print(sum(range(1,101)))
PPS: Ja, ich weiß die Sache mit den Hausaufgaben... SICNR
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

pixewakb hat geschrieben: Also ich bin günstiger. Konditionen siehe Profilseite.

PPS: Ja, ich weiß die Sache mit den Hausaufgaben... SICNR
Um genau zu sein machst du's umsonst, und der TE hat nuescht gelernt. *slowclap*.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Um genau zu sein gibt es auf dem Level des TE nichts zu lernen. Das war ein Schubs in die richtige Richtung, hoffe ich und ich spreche aus Erfahrung. Meine Meinung: Der Fragesteller muss dahinkommen, dass er selbst "Spaß-Aufgaben" löst oder sich Aufgaben im Netz sucht und übt, übt, übt. So habe ich es gelernt. Ich stelle von Zeit zu Zeit fest, dass die Leute die Aufgaben aus den Kursen bearbeiten und mit dieser Vorbereitung dann eine Klausur bestreiten wollen, was dann nicht so erfreulich verläuft. Hoffen wir mal, dass er nach diesem Lichtblick anfängt die Aufgabe zu variieren und mit den Konzepten for- und while-Schleife zu spielen.
BlackJack

@pixewakb: Doch auf dem Level gibt's was zu lernen. Der OP kann es ja offensichtlich nicht. Wenn er es danach selbstständig könnte, hätte er also etwas gelernt. Er wird aber auf dem Level im Unterricht Variablen, Addition und/oder andere Rechenoperatoewn, und Schleifen gehabt haben, oder findet die im Tutorial in der Python-Dokumentation oder auch woanders. Und dann lernt er bei dieser Aufgabe wie er aus diesen Bausteinen eine Lösung für die gestellte Aufgabe entwickelt. Dazu muss er verstanden haben die Schleifen den Kontrollfluss steuern. Das muss er alles nicht wenn er die komplette Lösung einfach abschreibt. Dann ist das am Ende nur ein weiteres Beispiel für Schleifen was ihn aber nicht in die Lage versetzt die nächste Aufgabe zu lösen die er nicht irgendwo abschreiben kann.

Herumexperimentieren kann er auch mit den Schleifen aus dem Unterricht oder einem Tutorial um dann so viel zu lernen um diese Aufgabe zu lösen.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Was natürlich nicht fehlen darf:

Code: Alles auswählen

f = lambda n, res=0: f(n-1, res+n) if n else res
Läuft zumindest bis `sys.getrecursionlimit()` stabil :)
gisapppython
User
Beiträge: 6
Registriert: Sonntag 30. April 2017, 12:24

vielen Dank für die KOSTENLOSE Hilfe. Denke ich kriege es jetzt hin.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@gisapppython:
Zur Übung - versuch es doch mal mit der Fakultät ;)
gisapppython
User
Beiträge: 6
Registriert: Sonntag 30. April 2017, 12:24

ja mir ging es jetzt erstmal darum die Aufgabe zu lösen und die jetzt nachzuvollziehen. Parallel fange ich mit Grundlagen an und arbeite mich voran. Am Ende muss/will ich es selbst hinkriegen, logisch
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der TE hat eines mit Bestimmtheit gelernt - nichts zu investieren schadet nicht. Ein Schubs in die richtige richtung ist das erarbeiten einer Problemvorstellung & das Verbinden von Einzelteilen zu einem größeren. Dann macht es Klick.

Du hast eine schlüsselfertige Lösung für alles geliefert. Keine eigene Leistung, kein lernen. Dafür braucht man kein Pädagogikstudium um sich das klar zu machen.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Viel einfacher, entspricht aber nicht der Vorgabe des Lösungswegs.
Zuerst sollte man Iteration in Python verstehen, bevor man sowas macht:

Code: Alles auswählen

sum(range(1, 101))
Noch eine Frage. Was ist denn eine Zählschleife? Gibt es da irgendeine feste Definition?
In Python würde ich sagen 'for i in range(start, end):' sei eine Zählschleife.

Vielleicht meinen die ja sowas hässliches:

Code: Alles auswählen

result = 0
n = 1
while n < 101:
    result += n
    n += 1
print(result)
So würde man das in Python machen:

Code: Alles auswählen

result = 0
for number in range(1, 101):
    result += number
print(result)
Mit sum():

Code: Alles auswählen

iterable = range(1, 101)
result = sum(iterable)
print(result)
Oder halt wie ganz zum Anfang:

Code: Alles auswählen

result = sum(range(1, 101))
den OP spreche ich gar nicht an, da er das wahrscheinlich nicht lesen wird

Man sollte aber erst die Schleifen verstehen, wie man sie in C implementiert, um gewisse Bascis zu beherrschen. In Python gilt es dann, diese Basics wieder schnell zu vergessen und so mit der Sprache zu arbeiten, wie es vorgesehen ist. Dort würde man z.B. die Aufgabe nicht wie in C implementieren, was unter Umständen sogar unlesbarer und langsamer ist. Wenn man z.B. eine Liste mit einem vorangestellten Index auszugeben, sieht man z.B. oft dieses nicht Pythonische Beispiel:

Code: Alles auswählen

objekte = ['Boot', 'Haus', 'Stuhl']
i = 0
n = 1
while i < len(objekte):
    print(n, objekte[i])
    n += 1
    i += 1
Das ganze nochmal wie es in Python schreiben würde:

Code: Alles auswählen

objekte = ['Boot', 'Haus', 'Stuhl']
for lineno, objekt in enumerate(objekte, start=1):
    print(lineno, objekt)
Da haben sich gleich mehrere Sachen geändert. Wir sind die temporären Variablen für den Index und die Zeilennummer außerhalb der Schleife losgeworden. Anstatt die Elemente im Objekt objekte über deren Index anzusprechen, wird mit for über jedes Element in der Liste iteriert und der Variable objekt zugewiesen. Die Funktion enumerate ist sowas wie ein Zähler, der ein anderes Objekt umschließt. Bei einer iteration wird der Zählerstand und ein Element des Objektes ausgegeben. Die Variable start gibt an, wo der counter anfängt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten