ich habe einen String mit Dezimalwerte. floating point real values.
Der Trenner ist immer ein Dot nie ein Komma oder irgendetwas anderes.
Ich möchte
a.) die Leerzeichen zwischen dem Integer und dem Fractional part loeschen.
b.) die Vorzeichen bündig ohne Leerzeichen der Dezimalzahl oder einem Integer voranstellen.
Mein erstes Programm funktioniert, jedoch ist es fehlerhaft wenn
ein Dezimalwert '12 . 95' (12 blank dot blank 95) in einem String enthalten ist.
Diesen Fehler kann ich recht einfach mit einer zweiten Funktion beheben.
siehe zweites Programm.
Auch wenn mein Code jetzt funktioniert, gefällt mir dieser nicht wirklich.
Aus diesem Grund habe ich eine Bitte:
a.) eine entsprechende Lösung des Problems mit Hilfe des re Modul einmal aufzuzeigen. Sorry, aber das bekomme ich zur Zeit noch nicht selber hin, und
b.) wie sehe eine gute Lösung ohne das re Modul aus ?
Vielen Dank.
1. Programm
Code: Alles auswählen
# Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32.
def tidyUP(char, string):
start = string.find(char)
while start != -1:
if string[start +2].isdigit():
string = string[:start +1] + string[start +2:]
start = string.find(char, start +1)
return string
def main():
string = ' mtl. AZ - 7. 50; tgl. - BZ - + 1; wtl. -/+ CZ = 12 . 95 '
print '[IN ] :', string
# Step 1. Alle doppelten Leerzeichen, sowie
# die Leerzeichen am Anfang und am Ende enfernen.
string = ' '.join(string.split())
# Step 2. Dezimalwerte mit einem Leerzeichen, das Leerzeichen loeschen.
string = tidyUP('. ', string)
# Step 3. Dezimalwerten mit einem Vorzeichen, Vorzeichen buendig ohne Leerzeichen.
string = tidyUP('- ', string)
string = tidyUP('+ ', string)
print '[OUT] :', string
# [IN ] : mtl. AZ - 7. 50; tgl. - BZ - + 1; wtl. -/+ CZ = 12 . 95
# [OUT] : mtl. AZ -7.50; tgl. - BZ - +1; wtl. -/+ CZ = 12 .95
if __name__ == '__main__':
main()
Code: Alles auswählen
# Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32.
def tidyUP_1(char, string):
start = string.find(char)
while start != -1:
if string[start +2].isdigit():
string = string[:start +1] + string[start +2:] # ***
start = string.find(char, start +1)
return string
def tidyUP_2(char, string):
start = string.find(char)
while start != -1:
if string[start +2].isdigit():
string = string[:start] + string[start +1:] # *** Aenderung zu tidyUP_1
start = string.find(char, start +1)
return string
def main():
string = ' mtl. AZ - 7. 50; tgl. - BZ - + 1; wtl. -/+ CZ = 12 . 95 '
print '[IN ] :', string
# Step 1. Alle doppelten Leerzeichen, sowie
# die Leerzeichen am Anfang und am Ende enfernen.
string = ' '.join(string.split())
# Bei allen Dezimalwerten mit einem Leerzeichen, wird das Leerzeichen geloeschen.
# - mtl. AZ soll unberuecksichtigt bleiben 7. 55 aber nicht.
string = tidyUP_1('. ', string)
string = tidyUP_1('- ', string)
string = tidyUP_1('+ ', string)
string = tidyUP_2(' .', string)
print '[OUT] :', string
# [IN ] : mtl. AZ - 7. 50; tgl. - BZ - + 1; wtl. -/+ CZ = 12 . 95
# [OUT] : mtl. AZ -7.50; tgl. - BZ - +1; wtl. -/+ CZ = 12.95
if __name__ == '__main__':
main()