2016-10-24 2 views
1

ich den Code unten schrieb die Zuordnung zu vervollständigen:Python: Float Objekt nicht Iterable

fname = raw_input("Enter file name: ") 
fh = open(fname) 
total = 0 
count = 0 
for line in fh: 
    if not line.startswith("X-DSPAM-Confidence:") : continue 
    pos = line.find(':') 
    num = float(line[pos+1:]) 
for number in num: 
    total = total +num 
    count += 1 
print 'Average spam confidence:', total/count 

Das System Fehlermeldung kommt immer aus der Lektüre, dass

float Objekt nicht iterable ist

Ich weiß, dass ich einen Fehler gemacht habe von for number in num: Und die richtige Antwort lautet:

fname = raw_input("Enter file name: ") 
fh = open(fname) 
total = 0 
count = 0 
for line in fh: 
    if not line.startswith("X-DSPAM-Confidence:") : continue 
    pos = line.find(':') 
    num = float(line[pos+1:]) 
    total = total +num 
    count += 1 
print 'Average spam confidence:', total/count 

aber meine Frage ist: in der richtigen Antwort, ist Float-Objekt auch iterierbar? Danke für die Hilfe !!

+0

hinzufügen Wie sollte eine Iteration über 3.14 arbeiten? –

Antwort

1

Wie das Python glossary feststellt, ist ein Objekt ein iterables Objekt, wenn es "in der Lage ist, seine Elemente einzeln zurückzugeben". num ist ein Float, das nur eine Zahl ist, und es kann seine Elemente nicht nacheinander zurückgeben wie eine Liste, ein Satz oder ein Wörterbuch. Es macht also keinen Sinn, for number in num: zu schreiben - damit das funktioniert, sollte num ein iterable sein, damit es seine Mitglieder einzeln als number zurückgeben kann. Stattdessen sollten Sie einfach die num an die total direkt durch den Aufruf total = total + num (oder noch besser, total += num)

+0

Beachten Sie, dass Sie 'für die Nummer im Bereich (num)' tun können, die für ganzzahlige Argumente funktioniert –

+0

@Erik Godard: Danke für die Erklärung! –

Verwandte Themen