【问题标题】:Why is my edit function adding instead of editing the member?为什么我的编辑功能是添加而不是编辑成员?
【发布时间】:2019-05-19 11:06:10
【问题描述】:

我正在尝试为我的班级建立一个团队名册。我得到了代码不会产生任何错误的地方,但是当我编辑一个成员时,它会将一个成员添加到字典中,而不是编辑我告诉它的成员。

对于作业,我们必须有一个类(我还没有完全理解它的意义),而且我之前写过一个代码,当我们只是添加名称时,我能够主要使用只是一个 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...")

就像我说的那样,运行时一切似乎都运行良好,但您意识到当您打印花名册时,它会添加一个新成员,而不是像您告诉它的那样进行编辑。

【问题讨论】:

  • 为什么定义nameClass却从不使用它?
  • 我的第一堂编程课已经到了第 5 周。我主要是离开给出的示例代码。我已经尝试阅读有关类语句的内容,但我不明白为什么这个作业的示例中有一个。

标签: python class dictionary edit


【解决方案1】:

更改您的 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()

试试看。

【讨论】:

  • 出于某种原因,我的输出看起来像这样。电话号码和球衣号码甚至没有在正确的标签下结束:不幸的是,这些建议都没有奏效。我觉得在示例代码中添加了一个类语句是有原因的,但我不知道如何正确使用它。也许这可能是代码不起作用的原因? =========主菜单========== 1.显示花名册。 2. 添加会员。 3. 删除成员。 4. 编辑会员。 9. 退出程序。选择 > 1 队名册: 姓名:josh 电话号码:josh 球衣号码:('josh', 1234, 23)
【解决方案2】:

因为您没有删除旧成员。编辑函数中的members[newName] = (newName, newphoneNumber, newjerseyNumber) 行只是用新键添加新成员。除非您键入相同的名称(用作键),否则将被覆盖。

如果您尝试添加一个与您的字典中已有成员同名的新成员,则会发生相同的行为。它将覆盖前一个,因为字典键必须是唯一的,并且您不会检查字典中是否存在相同的名称。

在代码中修复编辑模式的最短方法是添加:

del members[oldName]

editMember 函数中,在if oldName in members 语句中。因此,您将删除 old 字典条目并将其替换为新条目。

一般情况下,我建议您使用代码自动生成的数字 id 作为键,而不是名称。这将更容易编辑和添加新成员,并且允许使用相同名称的成员。
一个类(顺便说一下,您已经定义但从未使用过,因此拥有它真的毫无意义)应该可以帮助您轻松做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多