Schwierigkeit mit Problem

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.
saltyelo
User
Beiträge: 7
Registriert: Sonntag 16. Januar 2022, 21:42

Hallo,

gibt es eine Möglichkeit folgendes Muster nur mit for-Schleifen zu erzeugen?:

+
++
+++
++++
+++++
++++
+++
++
+

liebe grüße
S.E
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

erwartest du ein einfaches "Ja" oder "Nein" oder wo kommst du genau nicht weiter?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich löse dann mal: Ja. 😀
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@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);
        }
    }
}
When we say computer, we mean the electronic computer.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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. 😜
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
saltyelo
User
Beiträge: 7
Registriert: Sonntag 16. Januar 2022, 21:42

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
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

__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 :lol:

@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
"When I got the music, I got a place to go" [Rancid, 1993]
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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....
saltyelo
User
Beiträge: 7
Registriert: Sonntag 16. Januar 2022, 21:42

@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 :roll:

Liebe Grüße
S.E
saltyelo
User
Beiträge: 7
Registriert: Sonntag 16. Januar 2022, 21:42

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!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

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)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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)]

+++++++++++++++++
++++++++++
+++++
++
+
++
+++++
++++++++++
+++++++++++++++++
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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 :wink:
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

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.
saltyelo
User
Beiträge: 7
Registriert: Sonntag 16. Januar 2022, 21:42

Danke euch Leute ^^.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

__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)
Antworten