Sie teilen sich b1
auf einzelnen Räumen, und dies kann zu leeren Werten führen:
>>> '88 89 '.split(' ')
['88', '', '89', '']
Es sind die extra leeren Saiten hier, die verursachen int()
eine Ausnahme auswerfen:
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
Verwenden str.split()
mit nein Argument stattdessen; Extra Whitespace wird dann ausgezogen:
>>> '88 89 '.split()
['88', '89']
Sie haben auch einige andere Probleme in Ihrem Code. Sich ansehen:
def lab8():
userinput= "Lab8.txt"
lenoffile= len(userinput)
print "There is", lenoffile, "lines"
File= open (userinput, "r")
studentscores1= File.read()
studentlist= studentscores1.split("\n")
return studentlist, lenoffile
Hier, lenoffile
ist nicht Die Anzahl der Zeilen in der Datei. Es ist die Anzahl der Zeichen in 'Lab8.txt'
; Beide Werte passieren sein 8
, Fügen Sie jedoch einige Zeilen aus dieser Datei hinzu oder entfernen Sie sie und die Nummer ist für den Rest Ihres Codes falsch.
Wenn Sie diese Zahlen mit den Namen zusammenhalten und die Berechnungen erneut schreiben sollen, müssen Sie einige Arbeiten erledigen Halten die Namen zusammen.
Hier ist eine alternative Version, um dieselbe Aufgabe zu lösen:
outputfile = raw_input("What is the output filename? :")
with open('Lab8.txt') as infile, open(outputfile, 'w') as outtfile:
for name in infile:
scores = next(infile).split() # next() grabs the next line from infile here
scores = map(int, scores)
quiztotal = sum(scores[:4]) / 5
midtermtotal = sum(scores[5:7]) / 2
finaltotal = scores[7]
score = quiztotal * .3 + midtermtotal * .4 + finaltotal * .3
outfile.write(name)
outfile.write('{0:0.2f}\n'.format(score))