2016-08-08 3 views
-1

Suche nach Hilfe beim Schreiben Python-Skript, um die ersten drei Zahlen in einem SSN zu ändern.Python-Skript zu maskchange ersten drei SSN-Nummer

Eingabe von einer TXT-Datei mit SSN-Beispielnummern (ssn_ori.txt). Ausgabe in eine neue txt-Datei

Ex: convert 123-44-9898 zu 246-44-9898 (+1 In den ersten, zwei auf den zweiten, +3 bis dritten). 2 Ziffern behalten nur die erste Ziffer (12 -> 2)

+2

Was passiert, wenn Sie die Nummer 469-44-9898 haben? Was soll mit der dritten Ziffer 9 passieren, wenn 3 hinzugefügt wird? –

+0

@A Magoon, für jede Ziffer, wenn die Zahl mehr als 9 ist, dann verwenden Sie nur die erste Ziffer (12 bis 2, 13 bis 3 usw.). danke für Ihre Hilfe. – scorpionz

Antwort

1

Die einfachste Implementierung ich denken kann, ist:

t = '123-44-9898' 

def evaluate_ssn(ssn): 
    first = str(int(ssn[0]) + 1)[-1] 
    second = str(int(ssn[1]) + 2)[-1] 
    third = str(int(ssn[2]) + 3)[-1] 

    return first + second + third + ssn[3::] 

evaluate_ssn(t) #246-44-9898 

Beachten Sie, dass es ein paar mögliche Probleme mit diesem Code sind. Was passiert, wenn eine modifizierte Zahl größer als 9 ist? Da dies in der Frage nicht angegeben war, habe ich sie in meiner Antwort nicht angesprochen.

+0

@ Magoon, Ist es einfach, eine Funktion/Feature hinzufügen, wenn also die Addition von Zahlen mehr als 9 ist, dann sollte es entweder 0 oder erste Ziffer sein (zB: 12 ​​wird 2) – scorpionz

+0

@scorpionz: Siehe meine aktualisierte Antwort unten (das du akzeptiert und nicht akzeptiert hast, weil es nur 1 zu allen Ziffern addiert hat, jetzt behoben und tut was du willst). In der Zwischenzeit, Magoon Antwort zu verbessern, wie es einfach ist, adressiert nicht Ihr Problem (das nicht angegeben wurde), aber eindeutig besagt, dass es nicht so +1 –

+0

@scorpionz - Ich aktualisierte meine Antwort, um die Funktionalität enthalten, die Sie gefragt haben. –

0

Da die Frage festes Muster hat (3-2-4 digitals). Wir könnten eine klare Lösung haben. Konvertieren Sie die ersten drei Ziffern in int und fügen Sie 123 hinzu, konvertieren Sie dann zurück in die Zeichenfolge und verketten Sie sie mit dem Rest der Testzeichenfolge.

test = "123-44-9898" str (int (Test [0: 3]) + 123) + Test [3:]

Wenn Sie kompliziertere Fälle haben, können Sie immer versuchen, Verwenden Sie regulären Ausdruck. https://docs.python.org/2/howto/regex.html

0

mit einem regex + ersatz funktion: wenn zahl ist> 10 dann wickelt bis zu zahl% 10, alle in einer schönen liste comp.

import re 

def do_repl(m): 
    return "".join([str((int(x)+(1+i))%10) for i,x in enumerate(m.groups())]) 


r=re.compile(r"(\d)(\d)(\d)(?=-\d+-\d+)") 
test = "123-44-9898" 

print(r.sub(do_repl,test)) 

test = "929-44-9898" 

print(r.sub(do_repl,test)) 

Ausgang:

246-44-9898 
042-44-9898 
Verwandte Themen