2016-06-04 17 views
-5

Ich habe ein Problem mit Python. Dies ist mein Code:TypeError: float() Argument muss eine Zeichenfolge oder eine Zahl sein, nicht 'list' Python

def calcola(): 
      a = input() 
      b = float(a[0].split("*")) 
      c = float(a[0].split("/")) 
      d = float(a[0].split("-")) 
      e = float(a[0].split("+")) 
      j = float(a[1].split("*")) 
      k = float(a[1].split("/")) 
      l = float(a[1].split("-")) 
      m = float(a[1].split("+")) 
      b = b[0] 
      c = b[1] 
      d = c[0] 
      e = c[1] 
      f = d[0] 
      g = d[1] 
      h = e[0] 
      i = e[1] 
      somma1 = b+c 
      somma2 = d+e 
      somma3 = f+g 
      somma4 = h+i 
      print(somma1) 
      print(somma2) 
      print(somma3) 
      print(somma4) 


calcola() 

ich einige Fehler haben:

Traceback (most recent call last): File "file.py", line 29, in calcola() File "file.py", line 3, in calcola b = float(a[0].split("*")) TypeError: float() argument must be a string or a number, not 'list'

Wie kann ich in der Anzahl der Liste transformieren?

+1

'split' eine Zeichenfolge in eine Liste teilt und eine Liste in einen Schwimmer nicht verwandeln kann. Wie sehen 'a' und' a [0] 'aus? – syntonym

+0

Also muss ich b = float (a) verwenden? – Blazed

+0

meine Eingabe ist a = input() – Blazed

Antwort

4

Sie können float nicht direkt in einer Liste aufrufen. Sie können map verwenden, um float für jedes Element in der Liste aufzurufen. Wie so:

b = map(float, a[0].split("*")) 

In Python 3.x

b = list(map(float, a[0].split("*"))) 

Oder für mehr Lesbarkeit verwenden, um eine Liste Verständnis. Funktioniert sowohl für python2 und python3:

b = [float(s) for s in a[0].split("*")] 

aber sicher sein, die Gegenstände nach der Trennung sind schwimmfähig

+0

Besser, ein Listenverständnis zu verwenden. –

+0

Normalerweise ja. Aber mit Builtins wie 'float' map geht es schneller. –

+2

Geschwindigkeit ist hier kein Thema. Vorsicht vor vorzeitiger Optimierung. Lesbarkeit macht verständlich und Generatoren sind viel idiomatischer. In diesem Fall ist OP offensichtlich ein Neuling, was Lesbarkeit viel wichtiger macht. –

Verwandte Themen