Seite 1 von 2

€ Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 10:56
von Kalli87
Grüße,

hier erstmal der Code

Code: Alles auswählen

        sql="SELECT Betrag FROM vertrag"
        self.cursor.execute(sql)
        nummer=[]
        i = 1
        for dsatz in (self.cursor):
            nummer.append((dsatz))
            Label(self.tab_vertragsuebersicht, text=dsatz, relief=RIDGE, width=15).grid(row=i, column=2, sticky=NSEW)
            i = i + 1
Der Code funktioniert ohne Fehler da ist auch nicht mein Problem bzw. mein Anliegen.
Ich möchte gern bei der Ausgabe das € Zeichen anhängen. Ich hab es bereits mit
append oder mit " . " probiert wie man halt etwas anhängen möchte nur klappt es leider nicht.

Wo liegt denn der Casus Knacktus?


Ps.:Das es nicht eingerückt ist bitte ignorieren, ihr kennt ja den restlichen Code nicht ;)

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 11:28
von MagBen

Code: Alles auswählen

# -*- coding: utf-8 -*-
betrag = 10.95
eur    = "€"

print( "%.2f %s" % (betrag, eur) ) # 10.95 €

print( str(betrag) + " " + eur ) # 10.95 €

betragStr = str(betrag).replace(".",",")
betragStr += " "
betragStr += "€"
print( betragStr ) # 10,95 €

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 11:38
von Kalli87
Danke MagBen :)

sind paar nette Varianten von dir und haben mir auch geholfen :)

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 11:43
von darktrym
Die Stringaddition solltest du am besten gleich vergessen. Und die format()-Variante fehlt da natürlich.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 11:45
von Kalli87
Ich bin für alles offen.
Wenn du eine andere Variante kennst dann erleuchte mich bitte :)

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 11:48
von darktrym

Code: Alles auswählen

"10.95{0}".format("€")
oder

Code: Alles auswählen

"10.95%s" % "€"

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 13:21
von Sirius3
@darktrym: ich glaube Du hast da was verdreht.

Code: Alles auswählen

"{0:.02f}€".format(10.95)
oder

Code: Alles auswählen

"%.02f€" % 10.95
@Kalli87: Die anderen Varianten von MagBen (außer Zeile 5) nimmst Du als abschreckendes Beispiel, wie man es nicht machen sollte.

Man kann natürlich auch das Betriebsystem die Arbeit machen lassen:

Code: Alles auswählen

>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf8')
'de_DE.utf8'
>>> print locale.currency(15.4)
15,40 €

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 13:29
von Kalli87
Puh jetzt sind's ja einige Varianten geworden.

Aber steinigt mich bitte nicht! Bin froh das es so funktioniert aber ich glaub
so ganz froh seit ihr nicht darüber.

Code: Alles auswählen

        sql="SELECT Betrag FROM vertrag"
        self.cursor.execute(sql)
        i = 1
        eur = "€"
        for dsatz in (self.cursor):
            Label(self.tab_vertragsuebersicht, text=str(*dsatz)+ " " + eur, relief=RIDGE, width=15).grid(row=i, column=2, sticky=NSEW)
            i = i + 1

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 14:02
von BlackJack
@Kalli87: Argh, auf den ``*`` beim `str()`-Aufruf muss man auch erst einmal kommen. Bitte nicht so verschwurbelte Magie benutzen wo das überhaupt nicht nötig ist. Hol den Wert aus dem Datensatz explizit heraus statt so etwas Unverständliches zu machen. Und genau hier ist ``+`` eben nicht das Mittel sondern Zeichenkettenformatierung. Warum bindest Du das Eurozeichen an einen Namen? Statt `i` manuell zu initialisieren und hochzuzählen würde man die `enumerate()`-Funktion verwenden.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 14:15
von Kalli87
Ich bin gerade voll am lachen :D
Sorry BlackJack nimms mir nich böse aber bei
verschwurbelte Magie
bin ich voll ins lachen gekommen :mrgreen: .

Aber zurück zum Thema, siehst ja selbst das ich ein Querdenker bin und alles bissl anders aufbaue als ihr,
deswegen kommt halt so etwas auch mal dabei raus.
Die "enumerate() - Funktion" sagt mir persönlich auf anhieb nix muss ich mich erstmal schlau machen was diese genau anstellt.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:44
von Kalli87
Also die Funktion "enumerate" finde ich hier recht bescheiden in meinem Falle.
Was spricht eigentlich gegen eine manuelle Initialisierung?
Ich brauch die ja nur wegen meinen Zeilen mehr nicht.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:49
von EyDu
Die enumerate-Funktion ist in deinem Fall nicht recht bescheiden, sie passt hier perfekt und ist für genau solche Fälle da. Quasi ein Musterbeispiel für deren Verwendung.

Die Grund gegen manuelles zählen ist ein ganz einfacher: Es wird zusätzlicher und unnützer Code eingespart, was insgesamt die Fehlerwahrscheinlichkeit verringert. Schnell vergisst man mal die i zu inkrementieren, weil man mit continue springt oder sich aus Versehen den Namen überschreibt.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:50
von MagBen
Kalli87 hat geschrieben:Was spricht eigentlich gegen eine manuelle Initialisierung?
Weniger Code:

Code: Alles auswählen

for i, dsatz in enumerate(self.cursor):
    Label(self.tab_vertragsuebersicht, text=str(*dsatz)+ " €", relief=RIDGE, width=15).grid(row=i+1, column=2, sticky=NSEW)

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:51
von EyDu
@MagBen: Man kann enumerate einen Startwert mitgeben.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:54
von /me
Kalli87 hat geschrieben:Also die Funktion "enumerate" finde ich hier recht bescheiden in meinem Falle.
Du findest wirklich die erste Variante handlicher als die zweite?

Version 1

Code: Alles auswählen

i = 1
for element in data:
    print('{} {}'.format(i, element))
    i += 1
Version 2

Code: Alles auswählen

for i, element in enumerate(data, start=1):
    print('{} {}'.format(i, element))
Bei Version 2 hast du deutlich handlicheren Code und musst dich nicht selber um Initialisierung und weitere Verwaltung des Zählers kümmern.

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:55
von MagBen
EyDu hat geschrieben:Man kann enumerate einen Startwert mitgeben.
Dann habe ich heute was gelernt! Dann eben so:

Code: Alles auswählen

    for i, dsatz in enumerate(self.cursor, 1):
        Label(self.tab_vertragsuebersicht, text=str(*dsatz)+ " €", relief=RIDGE, width=15).grid(row=i, column=2, sticky=NSEW)

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 15:58
von Sirius3
Wenn schon, so:

Code: Alles auswählen

for i, dsatz in enumerate(self.cursor, 1):
    Label(self.tab_vertragsuebersicht, text="{0:%.02f} €".format(dsatz[0]), relief=RIDGE, width=15).grid(row=i, column=2, sticky=NSEW)

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 16:00
von Kalli87
Ah ok, ich hab die Funktion falsch verwendet und war damit nicht ganz zufrieden.
War also zu voreilig mit meiner aussage das ich die Funktion leicht bescheiden finde :oops:

Aber jetzt hab ichs verstanden, DANKE!

@Sirius3 Du musst ja gleich wieder übertreiben :D

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 16:05
von MagBen
Für die String Formatierung spricht, dass es effektiver mit dem Speicher umgeht.

Für + spricht, dass der Code ausdrucksstärker ist, jeder weiß sofort was gemeint ist, denn diese Syntax funktioniert in Python, Java, JavaScript und C++

Re: € Zeichen anhängen

Verfasst: Donnerstag 8. Januar 2015, 16:17
von Kalli87
Ich muss MagBen recht geben!
Die "+" Variante is verständlicher und man weiß wirklich genau was Sache ist.
Diesen Kauderwelsch
text="{0:%.02f} €".format(dsatz[0])
hier versteh ich nicht wirklich :K
Eher so gut wie gar nicht....