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

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -