In: Computer Science
having trouble with loop, when I added saving and loading to my code, when adding new player, it continues to ask for new player
class TeamClass: name = "" jersey = "" number = "" def __init__(self, name, jersey, number): self.name = name self.number = number self.jersey = jersey def set_name(self, name): self.name = name def set_jersey(self, jersey): self.jersey = jersey def set_number(self, number): self.number = number def get_name(self, name): return self.name def get_jersey(self, jersey): return self.jersey def get_number(self, number): return self.number def display_team_roster(self): print("Player") print("Name: ", self.name) print("Jersey: ", self.jersey) print("Phone Number: ", self.number) print("-------------") def menu(): print("-----Roster Menu----") print("1. Display Team Roster") print('2. New Player') print("3. Remove player") print("4. Edit Player") print("5. Save Roster Menu") print("6. Load Roster Menu") print("7. Exit Roster Menu") print("") selection = int(input("Enter an option or 7 to exit: ")) return selection def display_roster(roster): if len(roster) > 0: for x in roster.keys(): roster[x].display_team_roster() else: print("Roster is empty") def add_member(roster): new_member = input("Enter new Player: ") new_jersey = input("Enter jersey#: ") new_number = input("Enter phone number: ") roster[new_member] = TeamClass(new_member, new_jersey, new_number) def del_member(roster): del_member = input("Which player would you like to remove?: ") if del_member in roster: del roster[del_member] print(del_member, "has been removed") else: print(del_member, "was not found") return roster def edit_member(roster): existing_member = input("Which player would you like to edit? ") if existing_member in roster: new_member = input("Enter new players name: ") new_jersey = input("Enter new jersey#: ") new_number = input("Enter new phone number: ") roster[existing_member] = TeamClass(new_member, new_jersey, new_number) print(existing_member, "has been changed to", new_jersey, new_number) else: print(existing_member, "was not found") return roster def save_member(roster): filename = input("week1.py\teamroster.txt:") print("Saving Roster") outfile = open(teamroster.txt,"wt") for x in roster.keys(): name = roster[x].get_name() jersey = roster[x].get_jersey() number = roster[x].get_number() outfile.write(name+", "+jersey+", "+number+"\n") print("Roster saved") outfile.close() def load_member(): roster = {} filename = input("week1.py\teamroster.txt:") inFile = open(teamroster.txt,"rt") print("Loading Roster ") while True: inLine = inFile.readline() if not inLine: break inLine = inLine[:-1] name, jersey, number = inLine.split(",") roster[name] = TeamClass(name,jersey,number) print("Data Loaded Successfully.") inFile.close() return roster print("") roster = {} menu_selection = menu() while menu_selection != 7: if menu_selection == 1: display_roster(roster) elif menu_selection == 2: add_member(roster) elif menu_selection == 3: roster = del_member(roster) elif menu_selection == 4: roster = edit_member(roster) elif menu_selection == 5: roster = save_member(roster) elif menu_selection == 6: roster = load_member(roster) menu_selection = menu() print("Good Bye")
I have corrected all the errors and output is also given below and changes are highlighted
#problem is with while loop not terminating since the below
statement
#menu_selection = menu() is written outside of while loop
class TeamClass:
name = ""
jersey = ""
number = ""
def __init__(self, name, jersey, number):
self.name = name
self.number =
number
self.jersey =
jersey
def set_name(self, name):
self.name = name
def set_jersey(self, jersey):
self.jersey =
jersey
def set_number(self, number):
self.number =
number
def get_name(self): #get_name() should accept
only one argument i.e.,self but one more name argument is given
similarly for get_ersey() and get_number() methods
return self.name
def get_jersey(self):
return self.jersey
def get_number(self):
return self.number
def display_team_roster(self):
print("Player")
print("Name: ",
self.name)
print("Jersey: ",
self.jersey)
print("Phone Number: ",
self.number)
print("-------------")
def menu():
print("-----Roster Menu----")
print("1. Display Team Roster")
print('2. New Player')
print("3. Remove player")
print("4. Edit Player")
print("5. Save Roster Menu")
print("6. Load Roster Menu")
print("7. Exit Roster Menu")
print("")
selection = int(input("Enter an option or 7 to
exit: "))
return selection
def display_roster(roster):
if len(roster) > 0:
for x in
roster.keys():
roster[x].display_team_roster()
else:
print("Roster is
empty")
def add_member(roster):
new_member = input("Enter new Player: ")
new_jersey = input("Enter jersey#: ")
new_number = input("Enter phone number: ")
roster[new_member] = TeamClass(new_member,
new_jersey, new_number)
def del_member(roster):
del_member = input("Which player would you like
to remove?: ")
if del_member in roster:
del
roster[del_member]
print(del_member, "has
been removed")
else:
print(del_member, "was
not found")
return roster
def edit_member(roster):
existing_member = input("Which player would you
like to edit? ")
if existing_member in roster:
new_member =
input("Enter new players name: ")
new_jersey =
input("Enter new jersey#: ")
new_number =
input("Enter new phone number: ")
roster[existing_member]
= TeamClass(new_member, new_jersey, new_number)
print(existing_member,
"has been changed to", new_jersey, new_number)
else:
print(existing_member,
"was not found")
return roster
def save_member(roster):
filename =
input("week1.py\teamroster.txt:")
print("Saving Roster")
outfile = open(filename,"wt") #filename should
be written instead of directl giving teamroster.txt
for x in roster.keys():
name =
roster[x].get_name()
jersey =
roster[x].get_jersey()
number =
roster[x].get_number()
outfile.write(name+",
"+jersey+", "+number+"\n")
print("Roster
saved")
outfile.close()
def load_member():
roster = {}
filename =
input("week1.py\teamroster.txt:")
inFile = open(filename,"rt")#filename should be
written instead of directl giving teamroster.txt
print("Loading Roster ")
while True:
inLine =
inFile.readline()
if not inLine:
break
inLine =
inLine[:-1]
name, jersey, number =
inLine.split(",")
roster[name] =
TeamClass(name,jersey,number)
print("Data Loaded
Successfully.")
inFile.close()
return roster
print("")
roster = {}
menu_selection = menu()
while menu_selection != 7:
if menu_selection == 1:
display_roster(roster)
elif menu_selection == 2:
add_member(roster)
elif menu_selection == 3:
roster =
del_member(roster)
elif menu_selection == 4:
roster =
edit_member(roster)
elif menu_selection == 5:
roster =
save_member(roster)
elif menu_selection == 6:
roster = load_member()
#load_member() is written without any arguments inside definition
so i removed roster from load_member() function
menu_selection = menu()
print("Good Bye")
Output