Почему моя функция редактирования добавляет вместо редактирования члена? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь составить командный список для своего класса. Я получил его там, где код не будет выдавать никаких ошибок, но когда я редактирую элемент, он добавляет элемент в словарь вместо того, чтобы редактировать элемент, которому я его сказал.

Для задания у нас должен быть класс (который я до сих пор не совсем понимаю), и я ранее писал код, когда мы просто добавляли имена, где я мог получить работающий код, используя в основном просто цикл while, но я снял очки, потому что у меня не было операторов def.

class nameClass:
    name = ""
    phoneNumber = ""
    jerseyNumber = ""

    def __int__(self, name, phoneNumber, jerseyNumber):
        self.name = name
        self.phoneNumber = phoneNumber
        self.jerseyNumber = jerseyNumber

    def setname(self, name):
        self.name = name
    def setphoneNumber(self, phoneNumber):
        self.phoneNumber = phoneNumber
    def setjerseyNumber(self, jerseyNumber):
        self.jerseyNumber = jerseyNumber

    def getname(self):
        return self.name
    def getphoneNumber(self):
        return self.phoneNumber
    def getjerseyNumber(self):
        return self.jerseyNumber
    def displayData(self):
        print(" ")
        print("Player information: ")
        print("-------------------------")
        print("Name: ", self.name)
        print("Phone number: ", self.phoneNumber)
        print("Jersey number: ", self.jerseyNumber)

def displayMenu():
    print("=========Main Menu=========")
    print("1. Display Roster.")
    print("2. Add Member.")
    print("3. Remove Member.")
    print("4. Edit Member.")
    print("9. Exit Program.")
    print(" ")
    return int(input("Selection > "))

def printMembers(members):
    if menuSelection == 1:
        print("Team Roster:")
        for x in members.keys():
            print("Name: ", x, "\tPhone Number: ", x, "\tJersey Number: ", members[x])
        print()

def addMember(members):
    if menuSelection == 2:
        newName = input("Enter new member's name: ")
        newphoneNumber = int(input("Enter member's phone number: "))
        newjerseyNumber = int(input("Enter member's jersey number: "))
        members[newName] = (newName, newphoneNumber, newjerseyNumber)
    return members

def removeMember(members):
    if menuSelection == 3:
        name = input("Enter the member's name you would like to remove: ")
        if name in members:
            del members[name]
        else:
            print("Member: ", name, "not found.")
    return members

def editMember(members):
    if menuSelection == 4:
        oldName = input("Enter the name of the member you would like to edit: ")
        if oldName in members:
            newName = input("Enter the member's new name: ")
            newphoneNumber = int(input("Member's new phone number: "))
            newjerseyNumber = int(input("Member's new jersey number: "))
            members[newName] = (newName, newphoneNumber, newjerseyNumber)
        else:
            print("No such member in memory.")
    return members

print("Welome to the Team Manager")
members = {}
menuSelection = displayMenu()

while menuSelection != 9:
    if menuSelection == 1:
        printMembers(members)
    elif menuSelection == 2:
        members = addMember(members)
    elif menuSelection == 3:
        members = removeMember(members)
    elif menuSelection == 4:
        members = editMember(members)
    menuSelection = displayMenu()
print("Exiting Program...")

Как я уже сказал, кажется, что все работает просто отлично, когда он запущен, за исключением того, что вы понимаете, что при печати списка он добавляет новый элемент вместо редактирования, как вы сказали.

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Потому что вы не удаляете старого участника. Строка members[newName] = (newName, newphoneNumber, newjerseyNumber) в функции редактирования просто добавляет нового члена с новым ключом. Если вы не введете одно и то же имя (используется как ключ), в этом случае оно будет перезаписано.

То же самое происходит, если вы пытаетесь добавить нового участника с тем же именем члена, который уже есть в вашем объявлении. Он перезапишет предыдущий, поскольку ключи словаря должны быть уникальными, и вы не проверяете наличие идентичного имени в словаре.

Самый короткий способ исправить режим редактирования в вашем коде - добавить:

del members[oldName]

в вашей функции editMember внутри оператора if oldName in members. Таким образом, вы удалите старую словарную статью и замените ее новой.

В общем, я предлагаю вам использовать числовой идентификатор, автоматически сгенерированный кодом в качестве ключа, вместо имени. Это упростит редактирование и добавление новых участников, и члены с тем же именем будут разрешены.
Класс (который, кстати, вы определили, но никогда не использовал, поэтому иметь его бессмысленно) должен помочь вам в этом легко.

0 голосов
/ 19 мая 2019

Измените printMembers ():

def printMembers(members):
    if menuSelection == 1:
        print("Team Roster:")
        for key, value in members.items():
            print("Name: ", key, "\tPhone Number: ", value[1], "\tJersey Number: ", value[2])
        print()

Попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...