ValueError:没有足够的值来解包(预期3,得到2)&TypeError:必须是str,而不是MemberClass

时间:2022-06-27 18:17:13

Below is my code for a class I am currently working. The title contains the errors I am receiving. Could someone please assist with my code? (The comment's explain the area of concern. Main Menu functions 5 & 6.)

以下是我目前正在上课的代码。标题包含我收到的错误。有人可以协助我的代码吗? (评论解释了关注的领域。主菜单功能5和6.)

PART 1 - CLASS ESTABLISHMENT

class MemberClass:
    name = ""
    phone = 0
    number = 0

    # Initiator Method
    def __init__(self, name, phone, number):
        self.name = name
        self.phone = phone
        self.number = number

    # Mutator Method 1
    def set_name(self, name):
        self.name = name

    # Mutator Method 2
    def set_phone(self, phone):
        self.phone = phone

    # Mutator Method 3
    def set_number(self, number):
        self.number = number

    # Accessor Method 1
    def get_name(self):
        return self.name

    # Accessor Method 2
    def get_phone(self):
        return self.phone

    # Accessor Method 3
    def get_number(self):
        return self.number

    # Display Method
    def display_data(self):
        print("")
        print("Current Team Member's Information")
        print("------------------------------------------------")
        print("Member's Name: ", self.name)
        print("Member's Phone Number: ", self.phone)
        print("Member's Jersey Number: ", self.number)
        print("------------------------------------------------")

PART 2 - PROGRAM FUNCTIONS AND DATA

# Create a function for the main menu

def print_menu():
    print("===========Main Menu===========")
    print("1. Display Current Team Roster.")
    print("2. Add Member.")
    print("3. Remove Member.")
    print("4. Edit Member.")
    print("5. Save Progress.")
    print("6. Load Current Team Roster")
    print("9. Exit Program.\n")
    return int(input("Please Enter Your Selection: "))

# Create a function for main menu option 1
def print_members(team_members):
    if len(team_members) == 0:
        print("No Current Team Members In Memory!  Please Add All Team Members.")

    else:
        for x in team_members.keys():
            team_members[x].display_data()

# Create a function for main menu option 2
def add_members(team_members):
    new_name = input("Enter New Team Member's Name: ")
    new_phone = int(input("Enter New Team Member's Phone Number: "))
    new_number = int(input("Enter New Team Member's Jersey Number: "))
    team_members[new_name] = MemberClass(new_name, new_phone, new_number)
    return team_members

# Create a function for main menu option 3
def remove_members(team_members):
    remove_name = input("Enter Existing Team Member's Name to Remove: ")
    if remove_name in team_members:
        del team_members[remove_name]
        print("The Team Member ("+remove_name+") Is No Longer In Our Roster.")

    else:
        print("The Provided Name ("+remove_name+") Is Not Currently In Our Roster.  Please Try Again.")

    return team_members

# Create a function for main menu option 4
def edit_members(team_members):
    original_name = input("Enter Existing Team Member's Name To Edit: ")
    if original_name in team_members:
        adjusted_name = input("Enter Existing Team Member's Updated Name: ")
        adjusted_phone = int(input("Enter Existing Team Member's Updated Phone Number: "))
        adjusted_number = int(input("Enter Existing Team Member's Updated Jersey Number: "))
        del team_members[original_name]
        team_members[original_name] = MemberClass(adjusted_name, adjusted_phone, adjusted_number)

    else:
        print("The Provided Name ("+original_name+") Is Not Currently In Our Roster.  Please Try Again.")

    return team_members

# Create a function for main menu option 5 ***PROBLEM AREA***
def save_members(members, filename):
    out_file = open(filename, "wt")
    with open(filename, "wt") as out_file:
        for name, phone, number in members.items():
            out_file.write(name + "," + phone + "," + number + "\n")

# Create a function for main menu option 6 ***PROBLEM AREA***
def load_members(members, filename):
    in_file = open(filename, "rt")
    with open(filename, "rt") as in_file:
        while True:
            in_line = in_file.readline()
            if not in_line:
                break
            in_line = in_line[:-1]
            name, phone, number = in_line.split(",")
            members[name] = phone

PART 3 - PROGRAM ROOT CODE

# Team manager welcome screen, date & time
print("Welcome to San Angelo's Softball Team Roster")
print("This program keeps the most up-to-date information")
print("Today's Date: April 23, 2018")
print("Current Time: 0900\n")

# Create a dictionary named "team_members"
team_members = {}

# Provides Menu Screen
menu_selection = print_menu()

# Create while loop repeating the main menu.
while menu_selection != 9:

    if menu_selection == 1:
        print_members(team_members)

    elif menu_selection == 2:
        team_members = add_members(team_members)

    elif menu_selection == 3:
        team_members = remove_members(team_members)

    elif menu_selection == 4:
        team_members = edit_members(team_members)

    elif menu_selection == 5:
        filename = input("Enter Desired Filename: ")
        save_members(team_members, filename)

    elif menu_selection == 6:
        filename = input("Enter Existing Filename: ")
        load_members(team_members, filename)

    menu_selection = print_menu()

print("Thank You For Updating San Angelo's Softball Team Roster!")

1 个解决方案

#1


0  

When you iterate a dictionary via dict.items, you may only iterate key / value pairs. Therefore, this line will fail as you are attempting to unpack 3 items when only 2 exist (key & value):

当您通过dict.items迭代字典时,您可能只迭代键/值对。因此,当只有2个项目(键和值)尝试解压缩3个项目时,此行将失败:

for name, phone, number in members.items():

Instead, what you should do:

相反,你应该做什么:

for name, myclass in members.items():
    phone = myclass.phone
    number = myclass.number

#1


0  

When you iterate a dictionary via dict.items, you may only iterate key / value pairs. Therefore, this line will fail as you are attempting to unpack 3 items when only 2 exist (key & value):

当您通过dict.items迭代字典时,您可能只迭代键/值对。因此,当只有2个项目(键和值)尝试解压缩3个项目时,此行将失败:

for name, phone, number in members.items():

Instead, what you should do:

相反,你应该做什么:

for name, myclass in members.items():
    phone = myclass.phone
    number = myclass.number