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

Mittwoch 13. September 2006, 13:44

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

Mittwoch 13. September 2006, 13:56

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

Mittwoch 13. September 2006, 13:57

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

Mittwoch 13. September 2006, 14:18

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

Mittwoch 13. September 2006, 14:24

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

Mittwoch 13. September 2006, 14: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

Mittwoch 13. September 2006, 21:11

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

Donnerstag 14. September 2006, 06:47

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

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

Donnerstag 14. September 2006, 07:17

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