Hallo,
gibt es eine Möglichkeit folgendes Muster nur mit for-Schleifen zu erzeugen?:
+
++
+++
++++
+++++
++++
+++
++
+
liebe grüße
S.E
Schwierigkeit mit Problem
- __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
- 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:
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.
- __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
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
Na endlich, du glaubst nicht wie lange ich wegen deiner Antwort nach einer Alternative zu meiner Lösung gesucht habe__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.
@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]
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....
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....
@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
Ich wusste leider nicht, was ich mit dem </> anfangen soll, da kommt ja nur folgender Text raus "
Code: Alles auswählen
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
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
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.
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.
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)
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)]
+++++++++++++++++
++++++++++
+++++
++
+
++
+++++
++++++++++
+++++++++++++++++
@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)
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)
Code: Alles auswählen
for x in range(-4, 5):
mul = 5 - abs(x)
print('+' * mul)