Hallo liebe Leute vom Python-Forum!
Hoffe ich bin hier im richtigen Unterforum! Sonst wäre mir nur das Forum: Allgemeine Fragen eingefallen!
Meine Frage ganz kurz und knapp:
Möchte in einen mehrzeiligen string ein int-Objekt hineinbekommen und frage mich, wie genau das geht!
Alles Liebe,
euer Raffael
Wie bekomme ich ein int-Objekt in einen mehrzeiligen string hinein?
Guckst du hier.
Im einfachsten Fall:
Beachte: Das ist ein schlechtes Beispiel. Wandle den Int lieber explizit um.
Es gibt viele Varianten, wie man das machen kann.
Lerne lieber gleich die Neueste und caste __immer__ explizit.
Im einfachsten Fall:
Code: Alles auswählen
i = 3
s = 'ich habe %s Probleme'
print( s % i)
Es gibt viele Varianten, wie man das machen kann.
Lerne lieber gleich die Neueste und caste __immer__ explizit.
Was ist denn fuer dich casten? str(1) aufzurufen? Und warum ist das einem formatting vorzuzuziehen, bei dem du Kontrolle ueber die Darstellung von zB Nachkommanteilen oder padding hast?IHack hat geschrieben: Lerne lieber gleich die Neueste und caste __immer__ explizit.
Genau das meine ich mit "explizit".
Das Formatieren geht letztlich auf C's printf Familie zurück.
Sich anzugewöhnen, das casten durch das Format machen zu lassen (auch wenn das durchaus zulässig ist; ich es ja auch als Beispiel sogar geschrieben habe), ist es zum Lernen von Python __wirklich__ besser, wenn man solche Operationen explizit schreibt.
Ich denke jeder, der das nicht tut, wird später erst mal richtig staunen, wenn ihm dann ein '%011.7f' oder dergleichen über den Weg läuft.
Und das gilt nicht nur für Python, eben weil die sprintf Familie überall zu Hause ist.
Das Formatieren geht letztlich auf C's printf Familie zurück.
Sich anzugewöhnen, das casten durch das Format machen zu lassen (auch wenn das durchaus zulässig ist; ich es ja auch als Beispiel sogar geschrieben habe), ist es zum Lernen von Python __wirklich__ besser, wenn man solche Operationen explizit schreibt.
Ich denke jeder, der das nicht tut, wird später erst mal richtig staunen, wenn ihm dann ein '%011.7f' oder dergleichen über den Weg läuft.
Und das gilt nicht nur für Python, eben weil die sprintf Familie überall zu Hause ist.
printf castet nichts. Es formatiert. Und wo der Vorteil einer vorhergehenden Typwandlung liegen soll ist mir nicht klar. Du hast ein int, int kann formatiert werden, es gibt dann deutlich mehr Optionen, Optionen die man *ohne* den urspruenglichen Typ zu verwenden noch nicht mal hat. Was bringt einem da ein cast? Oder missverstehe ich immer noch, was du meinst. Wie waere es, wenn du das zeigst, statt das, von dem du eigentlich der Meinung bist, dass es schlechter ist.
-
- User
- Beiträge: 3
- Registriert: Sonntag 18. März 2018, 17:03
Ein Beispiel dazu:
klfaMn = 100
klcoMn = 120
string ausgabe =
'''
Kleinster cooler Mann: (Angabe in cm)
Kleinster fauler Mann: (Angabe in cm)
'''
Dort wo steht, Angaben in cm sollten die Werte von klfaMn und klcoMn stehen, wie kriege ich die hier in den mehrzeiligen String hinein?
Alles Liebe,
Raffael
klfaMn = 100
klcoMn = 120
string ausgabe =
'''
Kleinster cooler Mann: (Angabe in cm)
Kleinster fauler Mann: (Angabe in cm)
'''
Dort wo steht, Angaben in cm sollten die Werte von klfaMn und klcoMn stehen, wie kriege ich die hier in den mehrzeiligen String hinein?
Alles Liebe,
Raffael
Code: Alles auswählen
print('die %s ist kein %s' % ('Mann', 'Frau') )
print('die {} ist kein {}'.format('Mann', 'Frau') )
print('''die {}
ist
kein {}'''.format('Mann', 'Frau') )
@__deeds__: Ich verstehe dich nicht so ganz.
Wenn du ein %s bei einer Zahl verwendest, castest du implizit durch die printf Funktion. Das ist erlaubt, aber eben nicht ganz sauber.
Und "cast" verwende nicht nur ich als Wort für Typumwandlung.
Was verstehst du denn unter "cast"?
Ich verstehe unter cast genau das, was du in deinem letzten Satz sagst: typumwandlung. In Python also zb str(10), um ein Integer in einen String-Wert zu wandeln.
Mit der Formatierung hat das aber nichts zu tun. So wie du cast hier benutzt, suggeriert das so etwas zu tun:
"%s" % str(10)
Oder noch schlimmer
"foo" + str(10)
Im ersten Fall ist es unnoetig, im zweiten kann man statt Formatierung mit Typwandlung arbeiten, verliert aber Einfluss auf die Darstellung. Bei Fall 1 natuerlich auch.
Wenn du stattdessen (das ja von dir selbst vorgeschlagene
"%i" % 10
findet dabei aber kein "cast" statt. Auch nicht implizit. Sonst waeren wir ja wieder bei Fall 2. Sondern eine Formatierung, mit der Moeglichkeit auch noch padding etc dazu zu dekorieren. Mir ist schon klar, das dir die Vor- und Nachteile bewusst sind, nur ist dein Begriff cast in diesem Kontext ungebraeuchlich, darum war ich verwirrt.
Mit der Formatierung hat das aber nichts zu tun. So wie du cast hier benutzt, suggeriert das so etwas zu tun:
"%s" % str(10)
Oder noch schlimmer
"foo" + str(10)
Im ersten Fall ist es unnoetig, im zweiten kann man statt Formatierung mit Typwandlung arbeiten, verliert aber Einfluss auf die Darstellung. Bei Fall 1 natuerlich auch.
Wenn du stattdessen (das ja von dir selbst vorgeschlagene
"%i" % 10
findet dabei aber kein "cast" statt. Auch nicht implizit. Sonst waeren wir ja wieder bei Fall 2. Sondern eine Formatierung, mit der Moeglichkeit auch noch padding etc dazu zu dekorieren. Mir ist schon klar, das dir die Vor- und Nachteile bewusst sind, nur ist dein Begriff cast in diesem Kontext ungebraeuchlich, darum war ich verwirrt.
Jede Formatierung eines Integers ist -per definitionem- ein Cast.
Die Integerzahl muss erst in einen String konvertiert werden.
Das ist völlig unabhängig, ob man das einem impliziten __repr__, __string__ überlässt, oder explizit tut.
Dein Format impliziert ebenfalls einen Typcast. Zwangsläufig.
Selbst dein %i impliziert eine Umwandlung. (Ich habe das nicht vorgeschlagen.)
Mit ging es nur darum, dem TE den Rat zu geben, sich eben nicht auf implizite Casts zu verlassen, sondern immer möglichst explizit zu formulieren. That's all.
Was du weiter schreibst, ist eher nicht das Thema.
Kannst ja einen eigenen Thread für diese Debatte aufmachen.
In dem würde mich als erstes interessieren, __wie__ du "cast" __exakt__ definierst.
Die Integerzahl muss erst in einen String konvertiert werden.
Das ist völlig unabhängig, ob man das einem impliziten __repr__, __string__ überlässt, oder explizit tut.
Dein Format impliziert ebenfalls einen Typcast. Zwangsläufig.
Selbst dein %i impliziert eine Umwandlung. (Ich habe das nicht vorgeschlagen.)
Mit ging es nur darum, dem TE den Rat zu geben, sich eben nicht auf implizite Casts zu verlassen, sondern immer möglichst explizit zu formulieren. That's all.
Was du weiter schreibst, ist eher nicht das Thema.
Kannst ja einen eigenen Thread für diese Debatte aufmachen.
In dem würde mich als erstes interessieren, __wie__ du "cast" __exakt__ definierst.
-
- User
- Beiträge: 3
- Registriert: Sonntag 18. März 2018, 17:03
Hier ein Beispiel, damit ihr seht, wo ich hänge!
s = 'Eine Zahl lautet 37476476!'
zahldez = int(s[17:-1])
zahlbin = bin(zahldez)
string ausgabe = 'Zahl Dezimal: ' + str(zahldez) + '/nZahl binaer: ' + str(zahlbin)
Aus irgendeinem Grund funktioniert die Ausgabe nicht!
Alles Liebe,
Raffael
s = 'Eine Zahl lautet 37476476!'
zahldez = int(s[17:-1])
zahlbin = bin(zahldez)
string ausgabe = 'Zahl Dezimal: ' + str(zahldez) + '/nZahl binaer: ' + str(zahlbin)
Aus irgendeinem Grund funktioniert die Ausgabe nicht!
Alles Liebe,
Raffael
- DeaD_EyE
- User
- Beiträge: 1019
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Probier mal das:
Angenommen du hast irgendeine Zahl und willst diese als HEX mit 4 Stellen darstellen, also ein Word.
Am besten mal hier nachsehen: https://pyformat.info/
Code: Alles auswählen
'{:b}'.format(int(s[17:-1])) # binär
'{:x}'.format(int(s[17:-1])) # hex
'{:o}'.format(int(s[17:-1])) # oct
Code: Alles auswählen
'0x{:04x}'.format(int(32768))
'0x{:04x}'.format(int(2**16-1))
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
@ILoveJesus1001: Dein Eingabestring ist sehr speziell und das Programm funktioniert auch nur mit exakt so einem String. Schon im anderen Thread von Dir wurde Stringformatierung angesprochen. `/n` ist einfach nur `/n`. Was Du suchst ist `\n` für das Neue-Zeichen-Zeile. `string ausgabe` ist kein gültiges Python. Bei `zahldez` handelt es sich einfach nur um eine Zahl. Die intern verwendete Basis ist nicht relevant.
Code: Alles auswählen
ausgabe = 'Zahl Dezimal: {0}\nZahl binaer: {0:b}'.format(zahl)