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

Zeilenumbruch

Beitragvon Mr » Samstag 3. September 2005, 08:58

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:

Beitragvon rayo » Samstag 3. September 2005, 09:01

öhm meinst du einfach

Code: Alles auswählen

print
??

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

Gruss
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 3. September 2005, 10:30

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mr

Beitragvon Mr » Sonntag 4. September 2005, 09:52

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"
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 4. September 2005, 11:19

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

Beitragvon Mr » Sonntag 4. September 2005, 14:35

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 4. September 2005, 15:15

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

Beitragvon Mr » Sonntag 4. September 2005, 15:19

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

Beitragvon Mr » Sonntag 4. September 2005, 15:36

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

versteh ich nicht. Der code ist doch unverändert oder liege ich jetzt ganz falsch?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 4. September 2005, 16:02

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Sonntag 4. September 2005, 17:18

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mr

Beitragvon Mr » Montag 5. September 2005, 16:52

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 5. September 2005, 17:19

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

Beitragvon Mr » Montag 5. September 2005, 17:41

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

Beitragvon Mr » Montag 5. September 2005, 18:15

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.

Wer ist online?

Mitglieder in diesem Forum: __deets__, Baidu [Spider], markjohannes