€ Zeichen anhängen

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.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

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 ;)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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 €
a fool with a tool is still a fool, www.magben.de, YouTube
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Danke MagBen :)

sind paar nette Varianten von dir und haben mir auch geholfen :)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Die Stringaddition solltest du am besten gleich vergessen. Und die format()-Variante fehlt da natürlich.
Zuletzt geändert von darktrym am Donnerstag 8. Januar 2015, 11:45, insgesamt 1-mal geändert.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Ich bin für alles offen.
Wenn du eine andere Variante kennst dann erleuchte mich bitte :)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Code: Alles auswählen

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

Code: Alles auswählen

"10.95%s" % "€"
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@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 €
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

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
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.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

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.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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)
a fool with a tool is still a fool, www.magben.de, YouTube
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@MagBen: Man kann enumerate einen Startwert mitgeben.
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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)
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

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)
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

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
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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++
a fool with a tool is still a fool, www.magben.de, YouTube
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

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....
Antworten