Seite 1 von 2
Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 18:58
von saltyelo
Hallo,
gibt es eine Möglichkeit folgendes Muster nur mit for-Schleifen zu erzeugen?:
+
++
+++
++++
+++++
++++
+++
++
+
liebe grüße
S.E
Re: Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 19:17
von Dennis89
Hallo,
erwartest du ein einfaches "Ja" oder "Nein" oder wo kommst du genau nicht weiter?
Grüße
Dennis
Re: Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 19:45
von __blackjack__
Ich löse dann mal: Ja.

Re: Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 20:37
von sls
@saltyelo: ich denke eine For-Schleife sollte ausreichen.
Java:
Code: Alles auswählen
public class SchwierigkeitMitProblem {
public static void main(String[] args) {
StringBuilder string = new StringBuilder();
for (int i = 1; i < 10; i++) {
string = i <= 5 ? string.append("+") : string.deleteCharAt(string.length() -1);
System.out.println(string);
}
}
}
Re: Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 21:28
von __blackjack__
Okay, wenn ich so drüber nachdenke möchte ich meine Antwort in „Nein“ ändern und sls darauf hinweisen, dass die Lösung nicht den Vorgaben entspricht: *Nur* ``for``-Schleifen.

Re: Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 21:28
von saltyelo
Dennis89 hat geschrieben: Dienstag 18. Januar 2022, 19:17
Hallo,
erwartest du ein einfaches "Ja" oder "Nein" oder wo kommst du genau nicht weiter?
Grüße
Dennis
Ja, sorry, ich habe vergessen zu erwähnen, dass ich nicht weiter komme. Ich arbeite ein Übungsbuch durch ("Python lernen in abgeschlossenen Einheiten") von Sebastian Dörn, jedoch sind in den Übungsaufgaben keine Lösungen enthalten, deswegen wollte ich mal hier fragen, ob hier jemand eine Idee hat bzw. einen Code.
Ich bin ein Python Anfänger und versuche noch so gut es geht zu lernen.
Grüße
S.E
Re: Schwierigkeit mit Problem
Verfasst: Dienstag 18. Januar 2022, 21:42
von Dennis89
__blackjack__ hat geschrieben: Dienstag 18. Januar 2022, 21:28
Okay, wenn ich so drüber nachdenke möchte ich meine Antwort in „Nein“ ändern und sls darauf hinweisen, dass die Lösung nicht den Vorgaben entspricht: *Nur* ``for``-Schleifen.
Na endlich, du glaubst nicht wie lange ich wegen deiner Antwort nach einer Alternative zu meiner Lösung gesucht habe
@S.E. Du kannst gerne mal zeigen, wie weit du gekommen bist und eventuell erklären wo du nicht weiter kommst. Bitte den Code in Code-Tags (</>-Button) posten.
Grüße
Dennis
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 08:29
von rogerb
Also die Anzahl der '+' pro Zeile läßt sich anscheinend durch die Zahlenfolge 1, 2, 3, 4, 5, 4, 3, 2, 1 beschreiben.
Das kommt der mathematischen Funktion
f(x) = 5 - |x| für alle x: -4 <= x < 5
sehr nah.
Das lässt sich direkt in Python umschreiben:
[5 - abs(x) for x in range(-4, 5)]
Das kann man ja schonmal ausgeben:
[print(5 - abs(x)) for x in range(-4, 5)]
1
2
3
4
5
4
3
2
1
Aber man will ja nicht die Zahlen, sondern das '+' soviel mal ausgeben wie der jeweilige Zahlenwert ist....
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 13:14
von saltyelo
@Dennis89
Ich wusste leider nicht, was ich mit dem </> anfangen soll, da kommt ja nur folgender Text raus "
". Tut mir leid!
Mein Code ist, wie man sehen kann, extrem lächerlich. Weit bin ich nicht damit gekommen, spuckt halt nur 3 mal + aus.
Ich versuche echt mein bestes
str1 = "+"
a = 2
while a * a <= 36:
print("+")
str1[:+1] #Ich dachte, dass damit ein weiteres + hinzugefügt wird.
a=a+1
Weiter bin ich nicht gekommen
Liebe Grüße
S.E
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 13:16
von saltyelo
Code: Alles auswählen
str1 = "+"
a = 2
while a * a <= 36:
print("+")
str1[:+1] #Ich dachte, dass damit ein weiteres + hinzugefügt wird.
a=a+1
Hat wohl doch geklappt, mein Fehler!
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 13:43
von Sirius3
Einrückungen sind in Python wichtig, die Fehlen bei Deinem Code.
Ein `+` wird in Deinem Code per `print` ausgegeben, und da ist dann nur ein +.
`str1` wird gar nicht verwendet. Das mit den Eckigen Klammern nennt sich Indexzugriff, aber mit dem Ergebnis machst Du dann nichts.
Dein Problem läßt sich in zwei Teile aufteilen, der erste ist, die Anzahl der + pro Zeile zu berechnen, wie das rogerbs Code schon macht, und dem zweiten Teil, so viele + auszugeben. Dabei hilft, dass man Strings mit ganzen Zahlen multiplizieren kann.
@rogerb: was fängst Du mit der Liste `[print(5 - abs(x)) for x in range(-4, 5)]` an, die nur None-Werte enthält? Listcomprehensions sind kein Ersatz für alle Arten von Schleifen.
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 13:57
von imonbln
nun solltest du dir nochmal die Lösung von rogerb ansehen, die ist IMHO sehr elegant (hätte er eine For schleife genommen)
Code: Alles auswählen
for x in range(-4, 5):
mul = 5 - abs(x)
print('+' * mul)
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 14:42
von rogerb
Sirius3 hat geschrieben: Mittwoch 19. Januar 2022, 13:43
@rogerb: was fängst Du mit der Liste `[print(5 - abs(x)) for x in range(-4, 5)]` an, die nur None-Werte enthält? Listcomprehensions sind kein Ersatz für alle Arten von Schleifen.
Diese Listcomprehension braucht auch gar nichts zurück geben.
Ich hatte doch extra geschrieben, dass sich die mathematisch Darstellung fast eins zu eins in die Listcomprehension übertragen läst.
Ist das nicht ein elegantes Feature der Listcomprehension? Das ist auch, wie ich finde, gerade einer der besten Ansätze um sich zu verdeutlichen, was eine Listcomprehension eigentlich macht.
Die print-Funktion innerhalb der Listkomprehension ist natürlich kein Produktiv-Code. Aber wenn man Pluszeichen in Dreickform auf den Bildschirm zeichnet, kann man ruhig mal ein bischen Spaß haben.
Denn nach dem Einfügen der print-Funktion wäre nur noch ein kleiner Schritt nötig gewesen um daraus eine Lösung zu machen. Das Erfolgserlebnis wollte ich dem OP überlassen.
Bonus-Content:
f(x) = 1 + x^2 für alle x: -4 <= x < 5
[print((1 + x ** 2) * "+") for x in range(-4, 5)]
+++++++++++++++++
++++++++++
+++++
++
+
++
+++++
++++++++++
+++++++++++++++++
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 15:30
von Sirius3
@rogerb: nein, dafür ist eine Listcomprehension nicht da, wenn da keine Zuweisung stattfindet, wird einfach nur eine unnötige Liste erzeugt, die gleich wieder verworfen wird.
Code: Alles auswählen
stars = [1 + n ** 2 for n in range(-4, 5)]
for number in stars:
print("*" * number)
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 15:45
von rogerb
@Sirius3, du hast die volle Freiheit es so zu machen wie du es gerne möchtest, warum ich es nicht so mache, hatte ich ja bereits erklärt

Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 16:13
von Sirius3
Du hast auch die Freiheit, es so zu machen, wie Du es willst, aber hier lesen auch Anfänger mit, und denen sollte man nicht unkommentiert solche Konstrukte stehen lassen.
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 16:26
von rogerb
Wenn es darum geht, sollte man aber auch keine Liste mit einer Listcomprehension erzeugen nur um sie in der nächsten Zeile in eine for-Schleife zu füttern.
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 16:37
von saltyelo
Danke euch Leute ^^.
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 16:39
von __deets__
rogerb hat geschrieben: Mittwoch 19. Januar 2022, 16:26
Wenn es darum geht, sollte man aber auch keine Liste mit einer Listcomprehension erzeugen nur um sie in der nächsten Zeile in eine for-Schleife zu füttern.
Wieso das denn nicht? Was waere denn deine Alternative?
Re: Schwierigkeit mit Problem
Verfasst: Mittwoch 19. Januar 2022, 17:29
von rogerb
__deets__ hat geschrieben: Mittwoch 19. Januar 2022, 16:39
Wieso das denn nicht? Was waere denn deine Alternative?
Das kann eigentlich nur ein Missverständnis sein, aber gut...
Also nicht so, wie von Sirius3 eine Liste erzeugt wird, die dann in der nächsten Zeile in die for-Schleife gegeben wird. Wo man dann insgesamt zweimal iteriert.
Code: Alles auswählen
stars = [1 + n ** 2 for n in range(-4, 5)]
for number in stars:
print("*" * number)
Sondern so wie von imonbln gezeigt. Wo natürlich nur einmal iteriert wird.
Code: Alles auswählen
for x in range(-4, 5):
mul = 5 - abs(x)
print('+' * mul)