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

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

Code: Alles auswählen

print(1,2,3)
print((1,2,3))

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:

Code: Alles auswählen

a = (n-b)*'  ', (i+2*b)*'* '
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:

Code: Alles auswählen

a = ((n-b)*'  ')+((i+2*b)*'* ')
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 :mrgreen:

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?