Вы расщепляете b1
На отдельных пространствах, и это может привести к пустым значениям:
>>> '88 89 '.split(' ')
['88', '', '89', '']
Это дополнительные пустые строки здесь, которые вызывают int()
Чтобы сделать исключение:
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
Использовать str.split()
с нет Вместо этого аргумент; Затем раздет дополнительный пробел:
>>> '88 89 '.split()
['88', '89']
У вас также есть другие проблемы в вашем коде. Посмотрите на:
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
Здесь, lenoffile
является нет количество строк в файле. Это количество символов в 'Lab8.txt'
; оба значения случаться быть 8
, но добавьте или удалите некоторые строки из этого файла, и номер будет неправильным для остальной части вашего кода.
Если вы должны сохранить эти цифры вместе с именами и снова написать расчеты, вам придется выполнить некоторую работу сохранение имена вместе.
Вот альтернативная версия для решения той же задачи:
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))