2016-06-19 7 views
0

Das Programm soll durch die Überprüfung der ungerade Zahl in der Zeichenfolge finden, wenn die Zahl durch 2 ohne Rest geteilt werden, hier ist der Code:Python Typeerror nicht alle Argumente während Zeichenfolge konvertiert Formatierung

def iq_test(numbers): 
    for x in numbers.split(): 
     if x % 2 != 0: 
      return x 

iq_test("1 2 3 4 5") 

hier ist der Fehler, den ich, wenn ich den Code ausführen:

Traceback (most recent call last): 
File "python", line 6, in <module> 
File "python", line 3, in iq_test 
TypeError: not all arguments converted during string formatting 

Jede Hilfe würde geschätzt

+0

'wenn x% 2! = 0:' -> 'if int (x)% 2! = 0:' (Python denkt, dass Sie die Formatierung der Zeichenfolgen mit dem Prozentzeichen durchführen). Übrigens. Vielleicht möchten Sie etwas anderes als 'return' machen, da es nach einem einzigen wahren' if' zurückkehrt und somit nur die Nummer 1 verarbeitet. – jDo

Antwort

0

Wenn Sie % (oder ausführlicher operator.mod) auf Stringliterale, sind Sie zu Format versucht:

>>> a = 'name' 
>>> ('%s' % a) == 'name' 
True 

Aber Sie beabsichtigen, diese zu verwenden, auf int, so dass Sie Ihre Schnur werfen müssen Literale integer:

if int(x) % 2 != 0 

Dann mod versuchen wird, den Modul, anstatt zu versuchen, um Format zu finden.

Ihre Funktion wird jedoch zurückkehren, sobald sie die erste ungerade Zahl gefunden hat. Wenn Sie beabsichtigen, alle ungeraden Zahlen zu finden und nicht nur die erste, können Sie die ungeraden Zahlen in einem list akkumulieren und kehrt die verbunden Liste:

def iq_test(numbers): 
    lst = [] 
    for x in numbers.split(): 
     if int(x) % 2 != 0: 
      lst.append(x) 

    return ' '.join(lst) 

iq_test("1 2 3 4 5") 
# "1 3 5" 

Eine weitere elegante Alternative wird auszuprobieren generator functions/expressions and yield

0

x ein String ist, damit die % wird in String-Interpolation anstelle von Modulo aufgelöst. Verwenden Sie int(x) % 2 == 0.

Der Fehler wird ausgelöst, weil 2 das Argument für die Zeichenfolgeformatierung ist, die Zeichenfolge jedoch keine übereinstimmende Menge an Formatbezeichnern enthält.

Verwandte Themen