mit for schleifen expermentieren

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.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

moh hat geschrieben: Montag 15. April 2019, 22:07 Schreiben Sie in Python (....) ein Programm, welches mittels zweier Schleifen folgende Ausgabe erzeugt:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
just for fun ...

Code: Alles auswählen

for i in [1,2,3,4,5,6,5,4,3,2,1]:
    for j in range(1, i):
        print(f'{j} ', end='')
    print()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

kbr hat geschrieben: Mittwoch 17. April 2019, 22:28 Komme leider auch nur auf die halbe Punktzahl ... ;)
Immerhin; mir bleiben alle Punkte verwehrt, weil die Schleifen ganz fehlen (dabei habe ich das damals mal so mit Pascal in der Schule gelernt, blöd) ... :(

Code: Alles auswählen

In [1]: def pyramid(x=1, treshold=5): 
   ...:     print(*range(1, x+1)) 
   ...:     if x >= treshold: 
   ...:         return 
   ...:     else: 
   ...:         pyramid(x+1, treshold) 
   ...:     print(*range(1, x+1)) 
   ...:                                                                                  

In [2]: pyramid()                                                                        
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@nezzcarth: Originelle Idee. Es lässt sich noch etwas verkürzen:

Code: Alles auswählen

def pyramid(n, limit):
    print(*range(1, n + 1))
    if n < limit:
        pyramid(n + 1, limit)
        print(*range(1, n + 1))

if __name__ == '__main__':
    pyramid(1, 5)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder bei Benutzung von itertools:

Code: Alles auswählen

from itertools import chain

def pyramid(n):
    for i in chain(range(1, n + 1), reversed(range(1, n))):
        print(*range(1, i + 1))

if __name__ == '__main__':
    pyramid(5)
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

snafu hat geschrieben: Donnerstag 18. April 2019, 21:48 Es lässt sich noch etwas verkürzen:
Stimmt :) Wobei am naheliegendsten natürlich dc wäre; geht sogar als "One-Liner":

Code: Alles auswählen

$ dc -e '0si5sx[li1+ddsj0sklbx[ ]pStsilx>a]sa[lk1+ddskn[ ]nlj>b]sb[li1-ddsj0sklbx[ ]pStsi1<c]sclaxlxsilcx' 
1  
1 2  
1 2 3  
1 2 3 4  
1 2 3 4 5  
1 2 3 4  
1 2 3  
1 2  
1  
;)
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nezzcarth: Hey, ``dc`` hat ich gestern im Rahmen einer Shellskript-Lösung, aber nur weil ich nicht auf etwas einfacheres gekommen war um den Betrag zu ermitteln. Was natürlich einfach(er) ging:

Code: Alles auswählen

#!/bin/sh

readonly MaxValue=5

for i in $(seq 1 $((MaxValue * 2)))
do
    j=$((i - MaxValue))
    seq -s' ' 1 $((MaxValue - ((j < 0) ? -j : j)))
done
Edit: Wieder nur halbe Punktzahl. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ebenfalls nur eine ``for``-Schleife, dafür aber recht kompakt und trotzdem noch halbwegs lesbar in CoffeeScript:

Code: Alles auswählen

#!/usr/bin/env coffee

printPyramid = (n) ->
    console.log [1..n - Math.abs i - n].join ' ' for i in [1...n * 2]
    null

main = -> printPyramid 5

main() if require.main == module
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten