2016-06-26 16 views
-1

Diese Funktion summiert die Zahlen zwischen Null in einer Zeichenfolge. Zum Beispiel ('25025') wird 25 + 25. Wenn jedoch eine 0 am Anfang und/oder Ende der Zeichenfolge des string-Arguments an test_string gesendet wird, wird ein Leerzeichen am Anfang/Ende der Liste erstellt und nicht berechnet. Was kann ich dieser Funktion hinzufügen, damit sie sowohl Nullen als auch Leerzeichen ausfiltert?Brauchen Sie Hilfe mit Split-Funktion

def test_one(test_string): 
     test = test_string.split("0") 
     numbers=[int(x) for x in test] 
     print(sum(numbers)) 

test_one('2022022022') 
test_one('02022020') 
test_one('25025') 
+2

'Zahlen = [int (x) für x im Test, wenn x nicht in" 0 "]' – RobertR

Antwort

1

diese ersetzen:

numbers=[int(x) for x in test] 

mit diesem:

numbers=[int(x) for x in test if x] 

Dieser Code ist selbsterklärend: convert x auf ganzzahlige und fügen Sie es in die Liste ifbool(x)True ist, so Überspringt alle leeren Zeichenfolgen.

str.split("0") behandelt "0" als Trennzeichen und nicht gehören alle Vorkommen davon im Ergebnis. Überprüfen Sie the docs für einige Beispiele und mehr Erklärung.

+2

Dies wird nicht funktionieren, weil '" 0 "' ist eine nicht leere Zeichenfolge, so dass es "True". – RobertR

+1

Touche, mein Schlechter, du hast Recht. – RobertR

+0

@joelgoldstick, was reparieren? – ForceBru

2

Wenn Sie in Ordnung sind mit Ihrem aktuellen Ansatz halten, dann sollte dies tun:

test = test_string.strip('0').split("0") 
numbers = [int(x) for x in test] 

Andernfalls Sie ein Verständnis in einem Generator Ausdruck zusammen verwenden:

sum(int(x) for x in test_string.strip('0').split("0")) 
#        ^
+0

Wow, super! Das war sehr hilfreich und macht Sinn. –

+0

Das ist nicht ganz richtig, es wird bei einer '00' oder mehreren wiederholten '0'-Sequenzen unterbrochen. @ForceBru hat die richtige Antwort unten. – fivetentaylor

1

Sie verwenden string eine der Methoden strip()/rstrip()/lstrip().

>>> s = '0138076023' 
>>> s.lstrip('0') 
'138076023' 
>>> s.strip('0') 
'138076023' 
>>> s = ' asasd ' 
>>> s.strip() 
'asasd' 
>>> 

Docs über diese Methoden können here

0

Versuchen Sie, diese

def test_one(test_string): 
    test = test_string.split("0") 
    print(test) 
    if test[0] != '': 
     numbers=[int(x) for x in test] 
    else: 
     test = test[1:] 
     numbers=[int(x) for x in test] 
    print(sum(numbers)) 

test_one('2022022022') 
test_one('02022022022') 

beide test_one('2022022022') und test_one('02022022022') wird wieder die gleiche

Es war schon einen Fehler auf meiner Seite zu finden in Bezug auf Fall, wenn die Zeichenfolge in Null endet. Hat eine Korrektur vorgenommen.

+0

das basiert darauf, wie 'split ('0')' funktioniert - Ihre Testliste bekommt '' ''wenn Ihre erste Ziffer 0 ist. Sie müssen also nur ein Häkchen in Ihre Funktion einfügen, wenn das erste Element Null ist string, oder (was gleich ist) überprüfe, ob das erste Element der 'test'-Liste eine emty-Zeichenkette ist und schicke es aus, wenn es ist und gehe dann wie gewohnt mit deiner Summierung vor. –

+0

Warum runter? Ist da ein Fehler?Bitte zeige es mir dann –

+1

leider gibt es einen. Wenn der Eingabe-String auf einer Null endet, wird er zum "else" -Teil und das erste Element von "test" wird unabhängig von seinem Inhalt abgeschnitten. Zum Beispiel, wenn 'test_string == "2022020" ', das Ergebnis wird' [' 22 ',' 2 ',' '] ' – ForceBru