Seite 1 von 1

String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 13:26
von slowi66
Hallo zusammen,

ich hab ein Problem und komm nicht weiter - hab auch schon gesucht aber nichts brauchbares gefunden. Darum hoffe ich auf eure Hilfe.
Ich bräuchte eine Stringausgabe in folgendem Format:

N49 51.234 E011 45.678

Von Nord und Ost sollen die letzten 4 Stellen später mal berechnet werden können

Und hier mal der Code:

nord=1.234
ost=5.678

ziel=("N49 51.234 E011 45.678")
kord=("N49 5"),nord," E011 4",ost,

print (ziel)
print (kord)

Bin noch blutiger Anfänger wie ihr seht, hoff ihr helft mir weiter. Bin auch schon für Stichworte zur Selbsthilfe dankbar.

Viele Grüße
Wolfgang

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 14:20
von pixewakb
Mir ist nicht klar, was Du machen willst. Verstehst Du folgenden Quellcode?

Code: Alles auswählen

nord = 1.234
ost = 5.678

ziel = 'ziel=("N49 5{} E011 4{}")'

print(ziel.format(nord, ost))

"""
Ausgabe:

>>> 
ziel=("N49 51.234 E011 45.678")
"""
Ich würde erwarten, dass Du die Ausgabe von einer if-else-Entscheidung abhängig machst; mich wundert, dass die Koordinaten-Angaben "N49 5" fest und nur die nachfolgenden Stellen variabel sein sollen, aber so etwas ist auch nichts, womit ich mich befasse.

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 15:08
von slowi66
Hallo pixewakb,

vielen Dank für deine schnelle Antwort, ich bräuchte den String real gesäubert von den Leerstellen, Anführungszeichen. Dein Quellcode ändert nur die Darstellung auf dem Bildschirm. Trotzdem 1000 mal Danke.

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 15:12
von pixewakb
:roll: Formulier doch mal in Pseudocode, was dein Programm machen soll. Das wird sonst nichts :) , z. B.

1.) Eingabe des Wertes in folgender Form
2.) Ändern des Formats von "..." nach "..." und zwar bleibt "..." immer gleich und "..." wird geändert.
3.) Folgende Sachen des Eingabewerts werden bei 2.) zusätzlich geändert
4.) Ausgabe auf dem Bildschirm
5.) Speichern des Wertes in einer neuen Variable

Halt nur kleinschrittiger.

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 15:14
von pixewakb
Nur speichern ist kein Problem:

Code: Alles auswählen

nord = 1.234
ost = 5.678
 
ziel = 'N49 5{} E011 4{}'
 
neuer_wert = ziel.format(nord, ost)
Konsole:

Code: Alles auswählen

>>> neuer_wert
'N49 51.234 E011 45.678'

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 16:08
von slowi66
Super, damit könnte es funktionieren. Werde wieder Berichten ob es funktioniert hat.
Der Code wird zum Auffinden eines Geocaches benötigt. Es ist (vermutlich) eine MD5 Verschlüsselung -bekannt ist nur das Ergebis- und darum nur über BruteForce zu knacken.
Ich hab vor die möglichen Nord und Ost Koordinaten in einer Schleife laufen zu lassen und die beiden Ergebnisse miteinander zu vergleichen. :D

Viele Grüße
Wolfgang

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 21:40
von slowi66
Prima, hat geklappt: Ich hab jetzt meine Koordinaten.Nochmals meinen herzlichen Dank

Was mir noch etwas Kopfzerbrechen gemacht hatte war die Zählerschleife. Das Programm kappte mir immer die Nullen hinter der letzten Zahl >0
Nach etwas Versuchen hab ich eine Möglichkeit gefunden:

Code: Alles auswählen

n=0
o=0
while n<9999:
    o=o+1
    ost=o/1000+0.0001
    if o==9999: o=0
    if o==0: n=n+1
    nord=n/1000+0.0001
    nord=("%5.3f"%(nord))
    ost=("%5.3f"%(ost))
    ziel=("N48 0{} E009 4{}")
    gzahl = ziel.format(nord, ost)

    print (gzahl)
Wäre es auch einfacher gegangen?

Re: String in das gewünschte Format bringen

Verfasst: Sonntag 10. Januar 2016, 22:52
von BlackJack
@slowi66: Es wäre lesbarer gegangen. Mit weniger überflüssigen Klammern. Mit weniger Zwischenergebnissen. Mit nur einer Art Werte in Zeichenketten zu formatieren. Mit zwei Schleifen statt die umständlich zu einer ``while``-Schleife zusammenzustutzen. Ohne das zuweisen von verschiedenen Typen an die gleichen Namen. Vielleicht mit besseren Namen.

Code: Alles auswählen

def main():
    for nord in range(0, 10000):
        for ost in range(0, 10000):
            print(
                'N48 0{0:5.3f} E009 4{1:5.3f}'.format(nord / 1000, ost / 1000)
            )


if __name__ == '__main__':
    main()