How to input a readable text file into my Python code and have it run properly -
def main(): infile = open("studentinfo.txt", "rt") data = infile.read() fname, lname, id, year = data.split(",") year = int(year) # prompt user 3 test scores grades = eval(input("enter 3 test scores separated coma: ")) # prompt create username uname = (lname[:4] + fname[:2] + str(year)).lower() converted_id = id[:3] + "-" + id[3:5] + "-" + id[5:] grade_1, grade_2, grade_3 = grades # convert grades strings can written new file [grade_1, grade_2, grade_3] = [str(grade_1), str(grade_2), str(grade_3)] # calculate average average =(float(grade_1) + float(grade_2)+ float(grade_3))/3.0 # convert average string average = str(average) # write information file 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: " + str(grade_1) + "\n" "grade 2: " + str(grade_2) + "\n" + "grade 3: " + str(grade_3) + "\n" + "average: " + str(average)) infile.close() outfile.close() main() how make run using readable text file when run program help?
enter 3 test scores separated coma: 80,78,90, >>> 80,78,90, (80, 78, 90) >>> main() enter 3 test scores separated coma: 87,86,90 >>>
there may syntax issues, cannot test since not have files, may inline thinking:
def get_grades(student_name): grades = raw_input("enter 3 test scores {0} separated coma: ".format(student_name)).split(',') if len(grades) != 3: print "must enter 3 grades" return get_grades(student_name) return float(grades[0]), float(grades[1]), float(grades[2]) open("studentreport.txt", "w") outfile: outfile.write("*******student report*******\n") open("studentinfo.txt", "r") infile: student in infile: fname, lname, id, year = student.split(",") year = int(year) uname = "{0}{1}{2}".format(lname[:4], fname[:2], str(year)).lower() converted_id = "{0}-{1}-{2}".format(id[:3], id[3:5], id[5:]) # prompt user 3 test scores grade_1, grade_2, grade_3 = get_grades("{0} {1}".format(fname, lname)) average = sum([grade_1, grade_2, grade_3])/3 outfile.write("student name:{0} {1}\n".format(fname, lname)) outfile.write("student id: {0}\nusername: {1}\n\n".format(converted_id, uname)) outfile.write("grade 1: {0}\ngrade 2: {1}\ngrade 3: {2}\naverage: {3}\n\n".format(grade_1, grade_2, grade_3,average)) tested input:
sam, snead, kghasjkdfiuaski21, 2006 john, doe, 9792345678872, 2009 garth, nroken, 097892364, 2006 which outputs:
*******student report******* student name:sam snead student id: kg-ha-sjkdfiuaski21 username: snesa2006 grade 1: 56.0 grade 2: 67.0 grade 3: 78.0 average: 67.0 student name:john doe student id: 97-92-345678872 username: doejo2009 grade 1: 67.0 grade 2: 89.0 grade 3: 78.0 average: 78.0 student name:garth nroken student id: 09-78-92364 username: nroga2006 grade 1: 45.0 grade 2: 67.0 grade 3: 89.0 average: 67.0 and remember: eval evil
Comments
Post a Comment