Zeilenumbruch

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.
Mr

ich hab das dann grad mal programmiert mit diesem Programmcode:

Code: Alles auswählen


for s in xrange (1,30,2):
    print "*" * s
mit diesem bild hier:
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***************************
*****************************
entweder bin ich da nicht durchgestiegen oder das ist ganz einfach nicht das, was ich wollte, denn ich hatte mir da sonen beidseitiegen fertigen, ganzen Baum vorgestellt. Das mag zwar ne schriettlänge von 2 haben und mag auch die gewünschte zahl an sternen ausgeben und so aber ihc hatte mir das anders vorgestellt, oder unterliegt mir da schon wieder ein Fehler?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr, du musst ja erstmal Leerzeichen vor den Sternen machen müssen. Sieh dir doch mal die Funktion .center() an, das ist genau das was dir noch fehlt (dann sieht deine Lösung fast genau aus wie meine).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Mr hat geschrieben: entweder bin ich da nicht durchgestiegen oder das ist ganz einfach nicht das, was ich wollte, denn ich hatte mir da sonen beidseitiegen fertigen, ganzen Baum vorgestellt.
Du hast Dir meinen Post nicht wirklich angesehen, oder?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich hab nun eine Lösung, die Bäume in variable größe liefert.
baum( 7 ):

Code: Alles auswählen

   *   
  ***  
 ***** 
   *   
baum( 12 ):

Code: Alles auswählen

     *      
    ***     
   *****    
  *******   
 *********  
*********** 
    ***     
    ***     
baum( 30 ):

Code: Alles auswählen

              *               
             ***              
            *****             
           *******            
          *********           
         ***********          
        *************         
       ***************        
      *****************       
     *******************      
    *********************     
   ***********************    
  *************************   
 ***************************  
***************************** 
           *******            
           *******            
           *******            
           *******            
           *******            
           *******            

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

def baum(breite):
    for i in range(1, breite, 2):
        print ("*" * i).center(breite)
    
baum(20)
         *          
        ***         
       *****        
      *******       
     *********      
    ***********     
   *************    
  ***************   
 *****************  
******************* 
>>>
TUFKAB – the user formerly known as blackbird
BlackJack

Leonidas hat geschrieben:Ein lesbares, verstädliches Programm mit Leerzeichen zwischen den Operatoren ist bei mir 58 Zeichen lang.
Meine Lösung mit `center` ist 52 Zeichen mit und 47 Zeichen ohne unnötige Leerzeichen lang. Zumindest mit Syntax Highlighting finde ich beide Varianten lesbar.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

>>> baum = lambda b: "\n".join([("*" * i).center(b) for i in range(1, b, 2)])
>>> print baum(30)
...
Selbe Lösung mit lambda.
TUFKAB – the user formerly known as blackbird
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

jens hat geschrieben:
Mr hat geschrieben:wieso eigentlich xrange. Warum nicht einfach nur range, wo liegt n da der Unterschied?
s. http://www.python-forum.de/viewtopic.php?p=12053#12053
xrange wird wieder durch range erstetzt.
Stand in irgend so einem PEP drin. Weil Range seit Python2.4 auch einen Generator mit in sein Objekt packt. :wink:
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also hier mein Code:

Code: Alles auswählen

def baum( size ):
    for s in xrange (1,size,2):
        print ( "*" * s ).center( size )
    for i in xrange(size/5):
        print ( "*" * (size/4) ).center( size )

baum( 7 )
baum( 12 )
baum( 30 )

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

blackbird hat geschrieben:Stand in irgend so einem PEP drin. Weil Range seit Python2.4 auch einen Generator mit in sein Objekt packt. :wink:

Code: Alles auswählen

In [2]: range(10)
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [3]: type(range(10))
Out[3]: <type 'list'>
Sieht für mich nicht so aus.

Allerdings ist type(range(10000)) etwas arg schnell, was auf einen Generator schließen lässt.

blackbird, hast du den PEP irgendwo da, ich würde ihn gerne lesen.

Okay, meine umfassende Lösung:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
# A simple christmas tree generator

# define the characters serving for drawing the tree
#+they have to be 1-character long

# character for the green part of the tree - leaves
greenchar = '*'
# character for the air around the tree
whitechar = ' '
# character for the tree trunk
trunkchar = '|'

# the maximal width of the tree
maxsize = 15

# how many green charts do we have in the line?
#+forst 1, then 3, so it increments by 2
for green in xrange(1, maxsize + 1, 2):
    print (green * greenchar).center(maxsize)

# draw the trunk
print trunkchar.center(maxsize)
Kurzversion ohne Stamm:

Code: Alles auswählen

for i in xrange(1, 15 + 1, 2): print (i * 'x').center(15)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dein Stamm dürfte allerdings etwas dünn ausfallen ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn ich mir die Lärchen bei mir im Garten ansehe wunder ich mich auch, wie die so hoch sein können und dabei so einen dünnen Stamm haben. :P
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Leonidas hat geschrieben:
blackbird hat geschrieben:Stand in irgend so einem PEP drin. Weil Range seit Python2.4 auch einen Generator mit in sein Objekt packt. :wink:

Code: Alles auswählen

In [2]: range(10)
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [3]: type(range(10))
Out[3]: <type 'list'>
Sieht für mich nicht so aus.
die Magie steckt in __iter__
Leonidas hat geschrieben:Allerdings ist type(range(10000)) etwas arg schnell, was auf einen Generator schließen lässt.

blackbird, hast du den PEP irgendwo da, ich würde ihn gerne lesen.
http://www.python.org/peps/pep-3000.html
To be removed:
xrange(): use range() instead [1]
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hmm, sehr gut! Schön zu wissen, dass der Generator schon im range() von Python 2.4 drin ist. Und ich dachte schon, dass ich auf Python 3k warten müsste :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Leonidas hat geschrieben:Hmm, sehr gut! Schön zu wissen, dass der Generator schon im range() von Python 2.4 drin ist. Und ich dachte schon, dass ich auf Python 3k warten müsste :)
Musst Du auch -- in Python 2.4.1 liefert `range()` jedenfalls eine ganz ordinäre Liste. Die hat natürlich auch eine `__iter__()` Methode, aber daran ist nichts wirklich magisch. Die hat jede Liste.
Antworten