python - Why are some variables not defined? -
this have do:
look , print student gpa
add new student class
change gpa of student
change expected grade of student
print data of students in tabular format
quit program
import student import pickle lookup = 1 change = 2 add = 3 delete = 4 quit = 0 filename = 'student.dat' def main(): students_info = load_students() choice = 0 load_students() #add(students_info) change_grade(students_info) change_gpa(students_info) #get_menu_choice() look_up(students_info) while choice != quit: choice = get_menu_choice() if choice == lookup: look_up(students_info) elif choice == add: add(students_info) elif choice == change: change(students_info) elif choice == delete: delete(students_info) save_students(students_info) def load_students(): try: input_file = open(filename, 'rb') students_dict = pickle.load(input_file) input_file.close() except ioerror: students_dict = {} print(students_dict) return students_dict def get_menu_choice(): print() print('menu') print("-------------------") print('1. id') print('2.....') choice = int(input("enter choice:")) return choice def look_up(students_info): id = input('enter id:') print(student_info.get(id, "not found!")) ## try: ## print(students_info[id]) ## except keyerror: ## print("not found!") def change_gpa(students_info): id = input("id:") if id in students_info: gpa= float(input("new gpa:")) students=student.student(id,gpa,grade,work) students_info[id] = students print ("this",students_info[id]) else: print("not found!") def change_grade(students_info): id = input("id:") if id in students_info: new_grade = input("enter new grade:") students=student.student(id,gpa,grade,work) students_info[id] = students #new_grade = students_info[name] else: print("not found!") def add(students_info): name = input("enter student name:") id= input("enter student's id:") gpa= float(input("enter gpa:")) grade= input("enter student's expected grade:") work = input("does student work part time or full time?") students=student.student(name,id,gpa,grade,work) print(students_info['id']) def save_students(students_info): output_file = open(filename, 'wb') pickle.dump(students_info, output_file) output_file.close() main()
whenever tried change gpa or grade it's not defined. how change 1 value dictionary studens_info?
as gus42 has commented, errors getting lines:
students=student.student(id,gpa,grade,work)
you've not defined grade
or work
in either of places (nor gpa in change_grade
), should not surprising you're getting error.
i think there 2 ways fix issue:
the simplest way change logic creating new student
object modifying 1 exists. don't know attribute names in student
class, here's reasonable guess @ solution:
def change_gpa(students_info): id = input("id:") if id in students_info: gpa= float(input("new gpa:")) students_info[id].gpa = gpa # assign new gpa old student object else: print("not found!") def change_grade(students_info): id = input("id:") if id in students_info: grade = input("enter new grade:") students_info[id].grade = grade # assign new grade existing student object else: print("not found!")
the other option replace existing student
object new 1 different values. close current code, makes sense if student
objects immutable (perhaps because made type namedtuple
?). make work (where current code not), you'll have load old values old student
object before making new object:
def change_gpa(students_info): id = input("id:") if id in students_info: new_gpa = float(input("new gpa:")) old_grade = students_info[id].grade # load old values old_work = students_info[id].work new_student = students.student(id, new_gpa, old_grade, old_work) students_info[id] = new_student # replace old student new object else: print("not found!") def change_grade(students_info): id = input("id:") if id in students_info: new_grade = input("enter new grade:") old_gpa = students_info[id].gpa old_work = students_info[id].work new_student = students.student(id, old_gpa, new_grade, old_work) students_info[id] = new_student else: print("not found!")
Comments
Post a Comment