String in das gewünschte Format bringen

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
slowi66
User
Beiträge: 4
Registriert: Sonntag 10. Januar 2016, 12:15

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
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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.
slowi66
User
Beiträge: 4
Registriert: Sonntag 10. Januar 2016, 12:15

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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

: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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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'
slowi66
User
Beiträge: 4
Registriert: Sonntag 10. Januar 2016, 12:15

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
slowi66
User
Beiträge: 4
Registriert: Sonntag 10. Januar 2016, 12:15

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?
Zuletzt geändert von Anonymous am Sonntag 10. Januar 2016, 22:39, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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()
Antworten