was macht % ?

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
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

Hey,

bin neu in dem Forum hier und versuche grade Python zu lernen.

Aber ich verstehe da so ein paar Ding nicht, vllt könnt ihr mir ja helfen.

1. Was macht %?
1.1 Was macht % bei den Mathe zeichen?
1.2 Was macht % wenn da Buchstaben dabei sind.
hab hier sone Liste (http://www.tutorialspoint.com/python/python_strings.htm), da soll das, soweit ich weiß mit erklärt sein, aber ich verstehe es trotzdem nicht. :?


vllt könnt ihr mir ja helfen :)

Danke schonmal im Vorraus


LG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo sashpta, willkommen im Forum,

Der %-Operator hat in Python zwei Beduetungen: Bei Strings setzt er traditionell Werte ein, so wird aus dem Ausdruck "Hallo %s" % "sashpta" der String "Hallo sashpta". Bei Fahlen bedeutet % Modulo, also den Rest bei ganzzahliger Division.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

In der Dokumentation gibt es noch einen Index, insbesondere auch fuer Zeichen: https://docs.python.org/2/genindex-Symbols.html
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

Erstmal danke :)

So wie ich das jetzt verstanden habe ist es so
ich schreibe einen string setzte % und nen Buchstaben mit rein und definieren auserhalt(hinter) dem String das %?
->

Code: Alles auswählen

age = 16
print "Er ist %s Jahre alt" % age
oder?

aber wenn ich z.b.

Code: Alles auswählen

age = 16
print "Er ist %r Jahre alt" % age 
schreibe kommt irgendwie das selbe bei raus.

also wofür braucht man die verschiedenen Buchstaben hinter dem %? So weit ich das jetzt verstanden habe braucht man einen Buchstaben dahinter, weil wenn man schreibt

Code: Alles auswählen

age = 16
print "Er ist % Jahre alt" %age
dann will der das "J" von Jahre als Buchstabe nehmen und es gibt eine Fehlermeldung.

oder ist das % einfach nur dafür da um die oben definierte Variable (ist das eine? also in dem Bsp. jetzt das age = 16) einzufügen?
wenn das so wäre wie macht man es dann z.B. wenn man das hier hat?

Code: Alles auswählen

age = 16
age2 = 2154

print "A ist %s *age* Jahre alt, B ist %r *age2* Jahre alt." %s age, %r age2
weil so wie es jetzt ist geht es nicht, da bekommt man eine Fehlermeldung.

Hoffe mir kann das jemand erklären.

LG
BlackJack

@sashpta: Die verschiedenen Buchstaben braucht man für verschiedene Arten die Werte zu formatieren. Bei ganzen Zahlen ist die Zeichenkettendarstellung halt zufällig die gleiche wie die `repr()`-Darstellung. Und in der Regel auch die gleiche wie die Darstellung als ganzer Zahl. Das ist aber nicht bei allen Datentypen so.

Code: Alles auswählen

In [26]: name = 'Peter'

In [27]: print 'Hallo %s!' % name
Hallo Peter!

In [28]: print 'Hallo %r!' % name
Hallo 'Peter'!
Wie man mehr als einen Platzhalter durch einen Wert ersetzt sieht man doch in dem von Dir verlinkten Tutorial. Ansonsten gibt es da noch das Tutorial in der Python-Dokumentation und die Referenzdokumentation selbst wo der ``%``-Operator beschrieben wird. Das ist ein binärer Operator wie ``*`` oder ``/``, darum macht Deine letzte Zeile so gar keinen Sinn. Die ist offensichtlich syntaktisch falsch. Da müssen rechts und links passende Werte oder Ausdrücke stehen die zu solchen Werten ausgewertet werden können.

Edit: In neuem Quelltext würde ich in der Regel die `format()`-Methode auf Zeichenketten dem ``%``-Operator vorziehen.
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

Danke

und was macht %r genau? das ist in dem Tutorial nicht beschrieben (oder ich finde es nicht).

warum hast du geschrieben "

Code: Alles auswählen

In [26]:
" vor dem "

Code: Alles auswählen

name = 'Peter'
"
das selbe in Zeile 3 und 6.
BlackJack

@sashpta: Beim '%r' Platzhalter wird das Objekt mit der `repr()`-Funktion in eine Zeichenkette umgewandelt statt mit `str()`

Die nummerierten 'In' habe nicht ich geschrieben sondern die Python-Shell die ich verwende: IPython. Die Standard-Pythonshell verwendet dafür '>>>' ohne eine Nummer.
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

achso oke

und was ist repr() ? hab das noch nie gehört. :?

Sorry das ich als so blöd nachfrage.

Danke :)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Meinst du nicht auch, es wird Zeit langsam mal ein Buch oder Tutorial durchzuarbeiten?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@sashpta: `repr()` ist eine Funktion in Python die zu den Funktionen gehört die man benutzen kann ohne irgendetwas importieren zu müssen. Was die Funktion macht, steht in der Python-Dokumentation.
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

darktrym hat geschrieben:Meinst du nicht auch, es wird Zeit langsam mal ein Buch oder Tutorial durchzuarbeiten?
das ist ja der Punkt ich arbeite grade ein Buch durch und dort bin ich an dem % hängengeblieben und hab's nicht mehr gerafft.
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

BlackJack hat geschrieben:@sashpta: `repr()` ist eine Funktion in Python die zu den Funktionen gehört die man benutzen kann ohne irgendetwas importieren zu müssen. Was die Funktion macht, steht in der Python-Dokumentation.
Vielen Dank :)
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

Ich hätte da noch eine Frage. Laut der Liste die ich habe, haben '%i' und '%d' die selbe Funktion.

%i - signed decimal integer
%d - signed decimal integer

wofür braucht man 2 mal das selbe?
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

@sashpta: nennen wir es historische Gründe. Brauchen tut man's nicht, ist halt da.
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

Danke für die Antworten und die Hilfe :)
Zuletzt geändert von sashpta am Sonntag 7. Dezember 2014, 23:01, insgesamt 1-mal geändert.
sashpta
User
Beiträge: 9
Registriert: Donnerstag 4. Dezember 2014, 22:50

Sirius3 hat geschrieben:@sashpta: nennen wir es historische Gründe. Brauchen tut man's nicht, ist halt da.
oke, danke also ist egal was man nimmt?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich würde dir raten %d zu nutzen, weil dann wissen Leute instant was es macht, wohingegen %i eher exotisch ist und für viele (mich eingeschlossen), erstmal ein Blick in die Dokumentation fällig wäre.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten