Seite 1 von 1
Unerwünschte Zeichen bei ptint
Verfasst: Donnerstag 26. Juli 2012, 22:46
von quinto117
Ein neuer User ist im Forum geboren! Und genau dieser nervt sich ab einem Problem.
Alsooo, bin Pythoner in spe und stell einfach mal den Code und die Auscabe hier rein.
Code:
Code: Alles auswählen
fehler = 1
a = "asdf"
b = 0
while fehler== 1:
print("Was für eine Astanzahl wünschen Sie?")
z = input()
try:
n = int(z)
fehler = 0
except:
print("Sie müssen eine natürliche Zahl eingeben:")
print(type(n))
for j in range(1, n+1, 1):
b = 0
for i in range(1, j+1, 1):
while (2*j+1)*'* ' not in a:
a = (n-b)*' ', (i+2*b)*'* '
print(a)
b = b + 1
print((2*n-j)*" ", (j)*"* ", sep="")
Ausgabe:
Code: Alles auswählen
Was für eine Astanzahl wünschen Sie?
5
<class 'int'>
(' ', '* ')
(' ', '* * * ')
(' ', '* ')
(' ', '* * * ')
(' ', '* * * * * ')
(' ', '* ')
(' ', '* * * ')
(' ', '* * * * * ')
(' ', '* * * * * * * ')
(' ', '* ')
(' ', '* * * ')
(' ', '* * * * * ')
(' ', '* * * * * * * ')
(' ', '* * * * * * * * * ')
(' ', '* ')
(' ', '* * * ')
(' ', '* * * * * ')
(' ', '* * * * * * * ')
(' ', '* * * * * * * * * ')
('', '* * * * * * * * * * * ')
* * * * *
Und die Frage dazu - Wieso zeigt's in allen, ausser der letzten, Zeilen diese blöden Zeichen (
(',)) an??? Die hab ich schliesslich gar nie als Bestandteil definiert. Mit
sep="" hab' ich's auch schon versucht, kam aber das Gleiche raus.
Danke natürlich denen, die mir versuchen werden zu helfen - falls es soweit kommt

Re: Unerwünschte Zeichen bei ptint
Verfasst: Donnerstag 26. Juli 2012, 22:54
von cofi
Willkommen zu Python und im Forum!
Schau mal, welche Anweisung die unerwuenschte Ausgabe erzeugt und was du ausgibst.
Re: Unerwünschte Zeichen bei ptint
Verfasst: Freitag 27. Juli 2012, 10:18
von BlackJack
@quinto117: ``print`` ist in Python 2.x keine Funktion, also mach mal ein Leerzeichen nach ``print`` und vor der Klammer und denk dann noch einmal darüber nach was da *eigentlich* steht.
Re: Unerwünschte Zeichen bei ptint
Verfasst: Freitag 27. Juli 2012, 10:41
von sma
Noch einfacher wäre, Python 3 zu benutzen, denn dafür ist das Programm ja gedacht
Stefan
Re: Unerwünschte Zeichen bei ptint
Verfasst: Freitag 27. Juli 2012, 10:42
von cofi
Ohne `print` als Funktion ist nicht das die Ausgabe, sondern eine Fehlermeldung

Re: Unerwünschte Zeichen bei ptint
Verfasst: Freitag 27. Juli 2012, 17:14
von quinto117
Tut mir leid, hab nämlich völlig vergessen zu erwähnen, dass ich Python 3.2 benutze.
Schau mal, welche Anweisung die unerwuenschte Ausgabe erzeugt und was du ausgibst.
Versuche Python mittels einer Lektüre zu lernen und da stand leider nichts davon, wie man den Ursprung der Ausgabe in der IDLE ausfindig macht. Soll das heissen es gibt sowas?
Naja, da ich noch ziemlicher Anfänger bin, konnte ich die Zeichen
(',) in meiner Ausgabe nicht mit meinem Code erklären.
Und dann möchte ich natürlich Dank, für die Antworten, aiusschreiben.

Re: Unerwünschte Zeichen bei ptint
Verfasst: Freitag 27. Juli 2012, 17:44
von EyDu
Das schöne ist ja, dass du nicht alles nachlesen können musst, du kannst es einfach alles selber ausprobieren. Mit "nach der Anweisung schauen", war gemeint, dass du in deinen Code schauen sollst und nachvollziehst, welche Zeile Code für welche Zeile deiner Ausgabe verantwortlich ist. Am besten lässt du dir über jedem print einfach mal ausgeben, welchen Typ die Parameter haben:
Code: Alles auswählen
#statt
print(ausdruck)
#also
x = ausdruck
print type(x)
print x
Dann siehst du den Unterschied wahrscheinlich schon. Woraus es bei dir hinauslaufen wird ist der Unterschied zwischen
Re: Unerwünschte Zeichen bei ptint
Verfasst: Samstag 28. Juli 2012, 19:17
von quinto117
Die Teufelszeile war diejenige, welche die Variable für die Ausgabe definierte. Die lautete nämlich:
Weil nun eigentlich mehrere Strings in dieser Variable vorkommen, kann man nicht, wie ich es zuerst dachte, mit Kommas verknüpfen. Sondern man muss die Strings schön mathematisch miteinander verketten:
Der gesamte Code sieht nun so aus:
Code: Alles auswählen
fehler = 1
a = "asdf"
b = 0
n = 0
while n <= 0:
print("Was für eine Astanzahl wünschen Sie?")
z = input()
try:
n = int(z)
except:
print("Sie müssen eine natürliche Zahl (ausser null) eingeben:")
print(type(n))
for j in range(1, n+1, 1):
b = 0
for i in range(1, j+1, 1):
while (2*j+1)*'* ' not in a:
a = ((n-b)*' ')+((i+2*b)*'* ')
print(a)
b = b + 1
print((n+1)*" ", (j)*"* ", sep="")
print((n+1)*" ", (j)*"* ", sep="")
print((n+1)*" ", (j)*"* ", sep="")
print((n+1)*" ", (j)*"* ", sep="")
print((n+1)*" ", (j)*"* ", sep="")
Ausgabe:
Code: Alles auswählen
Was für eine Astanzahl wünschen Sie?
5
<class 'int'>
*
* * *
*
* * *
* * * * *
*
* * *
* * * * *
* * * * * * *
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
Letzten Dank nochmals

Re: Unerwünschte Zeichen bei ptint
Verfasst: Samstag 28. Juli 2012, 19:33
von BlackJack
@quinto117: Es mag zwar funktionieren, aber der Algorithmus ist nicht besonders gut. Die ``while``-Schleife und insbesondere die Bedingung davon ist sehr umständlich und ineffizient. Das sollte sich mit zwei ``for``-Schleifen ausdrücken lassen.
Die ”Variablendeklarationen” am Anfang sind unnötig. Man sollte Namen erst definieren wenn man sie benötigt, und nicht alle einmal am Anfang. Und man sollte auch keine willkürlichen Werte an Namen binden, die man überhaupt gar nicht verwendet. Wenn man den Quelltext liest muss man sich in Moment viel zu früh über den Namen `a` Gedanken machen und was der Wert 'asdf' wohl bedeuten mag um dann weiter unten im Quelltext zu sehen, dass der überhaupt nichts bedeutet sondern einfach nur unnötig war.
Der Schluss des Programms ist eindeutig ein Fall für eine Schleife. Quelltext der durch kopieren und einfügen entsteht ist immer ein Warnzeichen dass man über eine Schleife oder eine Funktion nachdenken sollte um gemeinsame Daten oder gemeinsamen Code heraus zu ziehen.
Re: Unerwünschte Zeichen bei ptint
Verfasst: Sonntag 29. Juli 2012, 00:01
von EyDu
quinto117 hat geschrieben:Weil nun eigentlich mehrere Strings in dieser Variable vorkommen, kann man nicht, wie ich es zuerst dachte, mit Kommas verknüpfen. Sondern man muss die Strings schön mathematisch miteinander verketten:
Naja, mit Mathematik hat Verkettung jetzt nicht unbedingt viel zu tun. Es wird eben nur das +-Zeichen dafür verwendet. Viel wichtiget ist: hast du den Unterschied zwischen dem "+" und dem "," verstanden, bzw. was der Unterschied dieser beiden Operatoren ist?