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

Tag
wie definiere ich eine etwas, dass nach einem Zeilenumbruch aussieht, denn Zeilenumbruch ist kein Python-Befehl.
Meine Aufgabe besteht eigentlich darin, dass ich ein Programm schreiben soll, dass eine Art von Tannenbaum ausgibt. Aber das löse ich schon selbst, ich brazche allerdings Hilfe bei dem Zeilenumbruch.


Mfg
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

öhm meinst du einfach

Code: Alles auswählen

print
??

sonst ist der Zeilenumbruch ein \n im String -> 'test\ntest2'

Gruss
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Noch ein wenig mehr info:
bei print wird immer ein Zeilenumbruch eingefügt:

Code: Alles auswählen

for i in xrange(2):
    print i
Ausgabe:
0
1
Wenn man das nicht haben will, kann man bei print ein Komma dranhängen:

Code: Alles auswählen

for i in xrange(2):
    print i,
Ausgabe:
0 1
Dabei wird allerdings immer ein Leerzeichen zwischen gehängen :( Wenn das auch nicht sein soll, muß man sys.stdout direkt "beschreiben":

Code: Alles auswählen

import sys
for i in xrange(2):
    sys.stdout.write( str(i) )
Ausgabe:
01
Wie man hier schon sehen kann, möchte stdout einen String haben und akzeptiert keine Zahlen oder was anderes...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mr

also hier mal mein ach so toller, eigendlich nicht vorzeigbarer, Code, der nicht funktioniert und ich nicht wweiß, warum"

Code: Alles auswählen

s="*"

while s<=15:
    s=s+1
    print s
    print 
    if s==15:
        print "Fertig"
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich werds jetzt nicht fertig machen (ist ja schließlich deine Aufgabe), aber das geht in deine Richtung:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 

char = '*'

while len(char) <= 15:
    print char
    char += '*'

print "Fertig"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr

hey danke, einen fertigen code hatte ich nicht erwartet. Naja das nächste Problem ist für mich also Leerzeichen zu erstellen, also praktisch einen Baum zu erstellen, der, zur Verdeutlichung, ganz so aussieht, wie ein Tannenbaum.
Ich hatte mir gedacht, dass man Leerzeichen so erstellen kann:

Code: Alles auswählen

l = " "
aber bei mir gibt der dann nur Zahlen aus.

mfg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Poste mal einen ganzen Code, denn aus l = " " kann zumindest ich, nicht schlau werden, am besten auch gleich mit Fehlermeldung.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr

hier ist also mein code, wie zu erwarten geht er aber nicht:

Code: Alles auswählen

s = '*'
l = " "

while len(s) <= 29:
    print s
    s += '**'
    while len(l) <= 14:
        print l
        l - " "
        
    

print "Fertig"
Edit (Leonidas): Code in Python-Tags gesetzt.
Mr

Edit (Leonidas): Code in Python-Tags gesetzt.
]

versteh ich nicht. Der code ist doch unverändert oder liege ich jetzt ganz falsch?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr hat geschrieben:
Edit (Leonidas): Code in Python-Tags gesetzt.
versteh ich nicht. Der code ist doch unverändert oder liege ich jetzt ganz falsch?
Der Code ist unverändert, jedoch ist er nicht mehr in |code| Tags, sondern in |python|-Tags, dadurch hast du Syntaxhighlighting.

Okay, ich habe es in 9 Zeilen gelöst (mit Kommentaren sinds viel mehr), am Schluss kann ich die Lösung posten, aber ich denke es ist besser wenn du selbst drauf kommst, deswegen gebe ich dir erstmal paar Tipps.

1. Du musst dir klar werden was zu zuerst brauchst. Zuerstz brauchst du die anzahl von Sternen in einer Zeile. In der ersten Zeile ist ist es einer, in der zweiten Zeile sind es drei, in der dritten fünf usw. Also siehst du, dass es immer um Zwei mehr wird. Dazu gibt es eine Schleife in Python: for anzahl_sterne in xrange(1, 16, 2), wobei 1 die erste Zahl ist, 16 die höchste (wird nicht erreicht) und 2 der Schritt (ich gehe davon aus dass dein Baum maximal 15 Sterne lang sein darf).

2. Danach kannst du bestimmen, wieviel von der 15 Felder langen Zeile frei bleibt. Bei der ersten Zeile ist es 15 - 1 = 14, dann 15 - 3 = 12 usw.

So.. ich hoffe ich habe dich auch den Weg gebracht, fallst was kann ich noch Punkt drei folgen lassen, aber damit ist das eigentlich dann auch schon komplett gelöst.

Iopodx hat übrigens auch gerade seinen Christbaum-Generator fertiggeschrieben und ist einen anderen Weg gegangen :)
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:

@Mr: Interessant auch sowas wie print " " * 5 welches fünf Leerzeichen ausgibt ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mr

1. hab ich doch damit schon gelöst gehabt?!?

Code: Alles auswählen

while len(s) <= 29:
    print s
    s += '**' 
das, denke ich zumindest, gibt einen Baum aus, ohne jegliches Leerzeichen.
und 2. hab ich noch nicht so ganz aber ich schau mal.

mfg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Es ist halt nur so, dass es mit einer for-Schleife meines Erachtens wesentlich effizienter ist, da man immer die genaue Anzahl von belegten (Sternen) und somit auch die unbelegten Stellen (Freizeichen) hat. Du kannst es natürlich mit einer while-Schleife machen, jedoch ist dies eigentlich unnötig, da die for-Schleife für diese Aufgabe viel passender ist.

Außerdem muss man sich manchmal vom geschriebenen Code losreißen, etwas refaktorisieren, dann kann man das Problem oft auf eine bessere Weise lösen.

Das Programm lässt sich sogar in einer Zeile schreiben *g*.. das wäre praktsch wieder ein Kandidat für unseren Einzeiler-Thread.. oder für Obfuscated Python :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr

ja wenn man das alles mit Kommata trennt geht das.
Mr

also ich habe das aber, naja, wi gehwohnt geht das nicht und ich keine Ahnung, wieso

Code: Alles auswählen

for s in range (1,30,2):
    print s
Edit (Leonidas): Code in Python Tags gesetzt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr hat geschrieben:ja wenn man das alles mit Kommata trennt geht das.
Nein, ich habe in der einen Zeile nur eine for-Schleife und eine einzige Print-Anweisung :D
Mr hat geschrieben:also ich habe das aber, naja, wi gehwohnt geht das nicht und ich keine Ahnung, wieso

Code: Alles auswählen

for s in range (1,30,2):
    print s
Also bei mir geht das ohne Probleme, was ist denn bei dir die Fehlermeldung?

Code: Alles auswählen

In [1]: for s in xrange(1, 30, 2):
   ...:     print s
   ...:
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr

wieso eigentlich xrange. Warum nicht einfach nur range, wo liegt n da der Unterschied?
Zu dem Programm: Die Zahlen krieg ich auch manchmal hin allerdings nicht immer, aber wie sterne erzeugen? Ich hab mir zwar gedacht, dass ich s = "*" schreiben könnte aber dann geht nichts mehr.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Wenn ich mal einen Tipp geben darf.
Alles was Du brauchst ist xrange und die string Function/Methode center()

MfG
Andreas

Edit:
Okay, ich habe es in 9 Zeilen
Ich in drei :mrgreen:
Aber ich muss zugeben dass mein Baum keinen Stamm hat ;)
Gast

Anonymous hat geschrieben:Wenn ich mal einen Tipp geben darf.
Alles was Du brauchst ist xrange und die string Function/Methode center()

MfG
Andreas

Edit:
Okay, ich habe es in 9 Zeilen
Ich in drei :mrgreen:
Aber ich muss zugeben dass mein Baum keinen Stamm hat ;)
also das macht mich echt fertig. Ich lerne das gerfade, wiher soll ich denn das kennen, wenn ich noch nicht mal den einfachen Baum machen kann?

Aber wir wollen mal nicht von der eigendlichen Aufgabe abweichen. Ja, ok, das gibt zahlen aus, aber ich brauch doch sternchen: mit s = "*" geht dasnicht
Antworten