Обработка файлов Python?

107
14

Мое задание состояло в том, чтобы написать программу, которая извлекает из файла первые/последние имена, год рождения и идентификатор, обрабатывать эту информацию для создания имени пользователя и отформатированного идентификатора, запрашивать у пользователя 3 теста, вычислять среднее значение и, наконец, писать всю информацию в новый файл. Это программа, которую я написал, и ошибка, которую я получил, указан ниже программы. Определить основную функцию

def main():
infile = open("studentinfo.txt", "r")
data = infile.read()
fName, lName, ID, year = data.split(",")
year = int(year)

Подскажите пользователю о трех тестах

grades = eval(input("Enter the three test scores separated by a comma: "))

Создать имя пользователя

uName = (lName[:4] + fName[:2] + str(year)).lower()
converted_id = ID[:3] + "-" + ID[3:5] + "-" + ID[5:]
grade_1, grade_2, grade_3 = grades

Преобразуйте оценки в строки, чтобы они могли быть записаны в новый файл

[grade_1, grade_2, grade_3] = [str(grade_1), str(grade_2), str(grade_3)]

Вычислить средний

average =(grade_1 + grade_2+ grade_3)/3

Преобразование среднего значения в строку

average = str(average)

Напишите информацию в файле

outfile = open("studentreport.txt", "w")
outfile.write("*******Student Report*******\nStudent Name:" + fName + " " + lName)
outfile.write("\nStudent ID: " + converted_id + "\n" + "Username: " + uName + "\n\n")
outfile.write("Grade 1: " + grade_1 + "\n" "Grade 2: " + grade_2 + "\n" + "Grade 3: " + grade_3 + "\n" + "Average: " + average)

infile.close()
outfile.close()

main()

Traceback (последний последний вызов):

Файл "C: /Users/ovi/Desktop/Python Project 1.py", строка 34, в

главный()

Файл "C: /Users/ovi/Desktop/Python Project 1.py", строка 22, в основном

средний = (класс_1 + grade_2+ класс_3)/3

TypeError: неподдерживаемый тип операндов для /: 'str' и 'int'

спросил(а) 2015-06-16T05:59:00+03:00 5 лет, 3 месяца назад
1
Решение
57

Вам нужно преобразовать преобразованные значения строк в float (или int)

average =(float(grade_1) + float(grade_2)+ float(grade_3))/3.0
average = str(average)

ответил(а) 2015-06-16T06:05:00+03:00 5 лет, 3 месяца назад
57

Вам нужно преобразовать переменные типа int в строки.

outfile.write("Grade 1:    " + str(grade_1) + "\n" "Grade 2:    " + str(grade_2) + "\n" + "Grade 3:    " + str(grade_3) + "\n" + "Average:    " + str(average))

ИЛИ

Вы могли бы просто так..

>>> gr1 = 23
>>> gr2 = 45
>>> gr3 = 56
>>> total = gr1+gr2+gr3
>>> avg = total/3
>>> l = [gr1, gr2, gr3, total, avg]
>>> print("GRade 1: {} grade 2: {} grade 3: {} total: {} average : {}".format(*l))
GRade 1: 23 grade 2: 45 grade 3: 56

ответил(а) 2015-06-16T06:01:00+03:00 5 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема