Python frage.. Wichtig!

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.
Antworten
Mukoni
User
Beiträge: 2
Registriert: Mittwoch 13. September 2006, 13:38

also, es geht um folgendes, ich schreib nächste woche mittwoch eine arbeit und mir fehlt in der übungsarbeit nur noch eine aufgabe. ich kriege eigentlich fast alles hin, nur unterläuft mir immer ein fehler, undzwar geht es um ein quadrat. pythone rfragt die anzahl der sternchen, aus dem das quadrat zusammengesetzt werden soll, dieses funktioniert auch super. bei der eingabe von 5 sternchen, kriege ich auch ein qudrat , wo jede seite 5 sternchen hat, nur muss die "mittlere" stelle sich ja bei der eingabe von 5 , genau 3 mal wiederholen, kann das shclecht erklären seht am besten selbst!

Schreibe eine Python-Funktion, die ein Quadrat aus Sternchen erzeugt. Die Größe des Quadrates soll vor dem Zeichnen erfragt werden.
Die Seitenlänge des Quadrates darf nicht kleiner als 2 und nicht größer als 10 sein. Verhindere, dass kleinere bzw. größere Quadrate gezeichnet werden.
Bild

so und so weit schaffe ich das auch:

Code: Alles auswählen

def quadrat():
	q = raw_input('Anzahl der Sternchen? ')
	q = int(q)
	a = '*' + ' '*(q-2) + '*' + '\n'
	if (q>=2 and q<=10):
		print '*'*q
		print a
		print '*'*q
	else:
		print'Bitte gib eine Zahl zwischen 2-10 ein!'
nur sieht das ganze dann so aus:
(z.B. bei der Eingabe von 5 Sternchen)

Code: Alles auswählen

*****             
*     *                 
*     *
*     *

*****
halt wegen dem '\n' nur weiss ich nicht, wie ich es anders machen kann, das er diese entsprechende zeile so oft wiederholt.. bitte helft mir ist wichtig :o)

...(die leerzeichen zwischen den freiräumen werden nicht richtig dargestellt)

Edit (Leonidas): Code in Tags gesetzt.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Hm, mit deinem Code bin ich auf ein anderes Ergebnis gekommen.

So funktioniert das ganze bei mir:

Code: Alles auswählen

def quadrat():
    q = raw_input('Anzahl der Sternchen? ')
    q = int(q)
    a = '*' + ' '*(q-2) + '*'
    if (q>=2 and q<=10):
        print '*'*q
        for i in range(q-2):
            print a
        print '*'*q
    else:
        print'Bitte gib eine Zahl zwischen 2-10 ein!'
        

quadrat()
Ich habe eine for-Schleife eingefügt, damit a mehrfach ausgegeben wird, und das '\n' entfernt. Print fügt automatisch einen Zeilenumbruch an.

Und bitte poste Code in Zukunft in Code-Tags, dann ist er leichter zu lesen und auch zu kopieren.
Zuletzt geändert von Nirven am Mittwoch 13. September 2006, 13:59, insgesamt 1-mal geändert.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

zunächst mal ein paar "pädagogische" dinge:

der Titel deines Posts ist extrem ungünstig gewählt. Dass du in einen Pythonforum eine Frage zu Python hast ist selbstverständlich, also ist der erste Teil schlecht gewählt. Dass deine Frage wichtig ist, stimmt so auch nicht, sie ist _für dich_ wichtig. Und da üblicherweise (wie bei Spammail) fast ausschliesslich die unwichtigen Posts als wichtig gekennzeichnet werden, wird dir das eher Schaden als nützen.

Weiterhin wäre es extrem hilfreich, wenn du den Code in python-tags setzt, weil sonst die Einrückung verloren gehen.

So, nun zur Sache ;)

Das mit den Leerzeichen könnte an der Schriftart liegen, mit der du das Ergebnis anzeigst, die Zeile

Code: Alles auswählen

 a = '*' + ' '*(q-2) + '*' + '\n'
Funktioniert bei mir prima.
nur sieht das ganze dann so aus:(z.B. bei der Eingabe von 5 Sternchen)
Das glaube ich dir nicht, wenn ich den code ausführe, ist das ergebnis eher sowas:

Code: Alles auswählen

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

**********
was auch logisch ist, da du die Zeile a nicht wiederholst (z.B. mit for oder *)
Mukoni
User
Beiträge: 2
Registriert: Mittwoch 13. September 2006, 13:38

ja ok sry, wusste nciht wie das geht, bin ja neu hier ;)

@Nirven
kannst du mir mal genau erklären was das "i" bedeutet, denn genau das verstehe ich nicht, thx!
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Code: Alles auswählen

for i in range(q-2:)
Hier wird eine for-Schleife durchlaufen. 'range(q-2)' generiert eine Liste mit q-2 Elementen. Wenn q also 5 ist, wird eine Liste mit 3 Elementen generiert.

Für jedes dieser Elemente wird die for-Schleife einmal durchlaufen, in dem Beispiel also dreimal. In der Schleife steht dann die Anweisung, die bei jedem Schleifendurchlauf ausgeführt wird.

Hier wird die Schleife dreimal durchlaufen, also wird 'a' dreimal ausgegeben, womit der Mittelteil korrekt hergestellt ist.

Das i nimmt die Werte aus der Liste für jeden Durchlauf an. Also beim erstenmal 0, dann 1 usw.

Das ist interessant, wenn man in der Schleife mit dem Wert arbeiten will.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Wie wäre es ohne Schleife?

Code: Alles auswählen

q = 5
print q * '*'
print (q - 2) * ('*' + (q - 2) * ' ' + '*\n'),
print q * '*'
MfG
HWK
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Auf jeden fall eleganter. For_Schleifen, bei denen ich ein 'i' durchschleuse ohne es zu benutzen stören mich immer etwas.

Und das mit dem Komma am Ende des "print x" kannte ich noch nicht... gibt es noch mehr solcher "Tricks", und ist das irgendwo dokumentiert? In der Hilfe kannich nicht sonderlich viel zu print finden.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Schau mal hier: [wiki]Daten in der Konsole ausgeben[/wiki]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Danke, ich sollte mir das Wiki wohl mal genauer anschauen.
Antworten