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
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

Hallo Leute. Folgende Liste. Die Zahlen in der Liste sollten miteinander so lange summiert und ausgegeben werden bis die Summe 50 erreicht ist. Wenn die Summe 50 erreicht ist, Vorgang abbrechen. Habe folgendes versucht. Was machen ich da falsch, wie kann ich es lösen? Vielen Dank

Code: Alles auswählen

gerade = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 
	38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 
	70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]

sum = 0
for i in gerade:
    sum = i + i
    if sum == 50:
        break
print(sum)
# Ich erhalte 200 :/
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

schau mal welche zahlen zu summierst.

hint:

Code: Alles auswählen

total = 0
for i in range(1, 200):
	total = total + i
und dann schau mal auf deine Prüfung, soll wirklich nur bei genau 50 abgebrochen werden?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

des weiteren solltest du vielleicht mal händisch überprüfen, ob du exakt 50 überhaupt treffen kannst, dann du 2+4+6+8+... aufsummierst.

Warum geht die Liste eigentlich bis 100? Wenn du bis einschließlich 14 aufsummiest bist du schon über 50...?

Gruß, noisefloor
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

noisefloor hat geschrieben: Dienstag 7. Mai 2019, 10:12 Hallo,

des weiteren solltest du vielleicht mal händisch überprüfen, ob du exakt 50 überhaupt treffen kannst, dann du 2+4+6+8+... aufsummierst.

Warum geht die Liste eigentlich bis 100? Wenn du bis einschließlich 14 aufsummiest bist du schon über 50...?

Gruß, noisefloor
JA stimmt, aber es ist doch egal was für Zahlen ich in der Liste habe! Wenn 50 erreicht ist (auch wenn es 46 ist), dann soll es abbrechen. Ansonsten korrigiere ich mein Text und sage, die Summe soll nicht über 50 sein. DANKE VIELMALS AN EUCH ALLE
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

noisefloor hat geschrieben: Dienstag 7. Mai 2019, 10:12 Hallo,

des weiteren solltest du vielleicht mal händisch überprüfen, ob du exakt 50 überhaupt treffen kannst, dann du 2+4+6+8+... aufsummierst.

Warum geht die Liste eigentlich bis 100? Wenn du bis einschließlich 14 aufsummiest bist du schon über 50...?

Gruß, noisefloor
Wenn Dir jemand eine beliebige Liste mit beliebigen Inhalt gibt und Dir sagt, summiere bis 50, dann machen wir das einfach! Weil ob die Liste bis 200, 100 oder 51 ist, wird Code gleiche aussehen. Meine Frage war, wie ich Code gestallten sollte und nicht über Inhalt der Liste! Bitte konkret antworten! Besten Danke
Zuletzt geändert von Anfänger! am Dienstag 7. Mai 2019, 10:26, insgesamt 1-mal geändert.
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Anfänger!: Das das eine beliebige Liste sein kann hast Du aber nicht gesagt. Das hätte man vielleicht ahnen können wenn der Code in einer Funktion gestanden hätte der diese Liste als Argument bekommt, aber so ist das halt eine konkrete Liste mit konkreten Werten gewesen.

Selber Schleifen schreiben ist doof. :-)

Code: Alles auswählen

from itertools import accumulate, takewhile
from more_itertools import last

gerade = [
    2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 
    38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 
    70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100,
]

print(last(takewhile(lambda x: x <= 50, accumulate(gerade))))
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wenn 50 erreicht ist (auch wenn es 46 ist), dann soll es abbrechen.
Dann musst du deinen Code anpassen. Aktuell ist deine Bedingung ja so, dass 50 _exakt_ getroffen werden muss. Das passiert aber nicht, weil durch aufsummieren von 2+4+6+... so wie so nicht möglich.

Des Weiteren müsstest du ein bisschen genauer werden. Willst du alle Summen < 50 ausgeben? Oder nur die größte Summe < 50 ausgeben? Machen einen Unterschied beim Code. Im 2. Fall musst du dir im Code den vorherigen Wert merken, im ersten Falll nicht. Es sei dann, man macht es so wie __blackjack__ - aber des geht wohl über das Hinaus, was der Lehrer erwartet ;-)

Ansonsten gilt wie immer: zeig deinen Code, dann bekommst du Hilfe. Warum dein 1. Code nicht funktioniert ist ja jetzt erklärt worden. Jetzt bis du wieder dran.

Gruß, noisefloor
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

__blackjack__ hat geschrieben: Dienstag 7. Mai 2019, 10:26 @Anfänger!: Das das eine beliebige Liste sein kann hast Du aber nicht gesagt. Das hätte man vielleicht ahnen können wenn der Code in einer Funktion gestanden hätte der diese Liste als Argument bekommt, aber so ist das halt eine konkrete Liste mit konkreten Werten gewesen.

Selber Schleifen schreiben ist doof. :-)

Code: Alles auswählen

from itertools import accumulate, takewhile
from more_itertools import last

gerade = [
    2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 
    38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 
    70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100,
]

print(last(takewhile(lambda x: x <= 50, accumulate(gerade))))
VIELEN DANK! Vor allem wenn man es mehrmals probiert hat und es nicht alleine schafft :/
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Anfänger! : bist du sicher, dass der Code von __blackjack__ bei dir auf deinem Rechner aktuell ootb läuft? Solltest du ggf. mal ausprobieren, bevor du die Aufgabe abgibst...

Gruß, noisefloor
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

noisefloor hat geschrieben: Dienstag 7. Mai 2019, 10:29 Hallo,
Wenn 50 erreicht ist (auch wenn es 46 ist), dann soll es abbrechen.
Dann musst du deinen Code anpassen. Aktuell ist deine Bedingung ja so, dass 50 _exakt_ getroffen werden muss. Das passiert aber nicht, weil durch aufsummieren von 2+4+6+... so wie so nicht möglich.

Des Weiteren müsstest du ein bisschen genauer werden. Willst du alle Summen < 50 ausgeben? Oder nur die größte Summe < 50 ausgeben? Machen einen Unterschied beim Code. Im 2. Fall musst du dir im Code den vorherigen Wert merken, im ersten Falll nicht. Es sei dann, man macht es so wie __blackjack__ - aber des geht wohl über das Hinaus, was der Lehrer erwartet ;-)

Ansonsten gilt wie immer: zeig deinen Code, dann bekommst du Hilfe. Warum dein 1. Code nicht funktioniert ist ja jetzt erklärt worden. Jetzt bis du wieder dran.

Gruß, noisefloor
AUCH DIR VIELEN DANK! Falls ich unklar war, dann bitte um Entschuldigung!!! Evtl liegt das daran weil ich wenig Wissen darüber habe und somit vieles übersehe...
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

noisefloor hat geschrieben: Dienstag 7. Mai 2019, 10:32 Hallo,

@Anfänger! : bist du sicher, dass der Code von __blackjack__ bei dir auf deinem Rechner aktuell ootb läuft? Solltest du ggf. mal ausprobieren, bevor du die Aufgabe abgibst...

Gruß, noisefloor
Hat funktioniert, danke der Nachfrage.
Anfänger!
User
Beiträge: 14
Registriert: Dienstag 30. April 2019, 08:37

Das ist genau das was ich wollte. Habe es Dank Euer Hilfe hinbekommen :) VIELEN DANK

ABER HABE NOCH EINE FRAGE! Wieso funktioniert dieser Code ohne "break". Wenn ich "break" drin habe dann funktioniert es wiederum nicht (keine Ausgabe)! Ich verstehe nicht warum!?

Code: Alles auswählen

total = 0
for i in gerade:
    total = total + i
    if i <= 50:
        #break
        print(i)

2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Anfänger!: Was heisst denn hier „funktioniert“? Der macht was anderes als die Aufgabe die Du beschrieben hast. `total` wird hier überhaupt gar nicht verwendet.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten