Python3.x意外类型错误Phoneb

2024-10-05 10:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

class Phone_book: #Please note that this line of code has no indentation, all other lines has at least one indentation.

    def __init__(self):
        self.phoneDic = {}                                         
        commandsDic = { "add" : self.add , "lookup" : self.lookup , "alias" : self.alias,
                        "change" : self.change , "save" : self.save,
                        "load" : self.load , "quit" : self.i_quit }

        while True:
            a = input("Phone book")
            b = a.split() #Splits a line of text into list items
            try:
                commandsDic[b[0]](*b[1:]) #Allocates
            except TypeError:
                print("This function does not work")                           
            except KeyError:
                print("You have written an incorrect amount of arguments")
            except SystemExit:
                print("Exiting...")
                break 

    def add(self, allonym, digit):
        print("Name:", allonym, "\nNumber", digit, "\nSaved in phone book!")
        self.phoneDic[digit] = [allonym]


    def encounter(self, allonym):
        found = 0
        phno = 0
        for digit, allonyms in self.phoneDic.items(): 
            if allonym in allonyms:                  
                phno = digit
                found += 1
            if found == 0:
                return 0
            elif found == 1:
                return phno
            else:
                return -1   

     def alias(self, allonym, newallonym):
        if newallonym:
            phno = self.encounter(allonym)
            if phno > 0:
                self.phoneDic[phno].append(newallonym)
                print("Alias stated")

函数alias的目的是为同位异名本身创建一个昵称,并与同位异名一起保存在内存中。当我得到TypeError时,我无法使函数工作。如何减轻错误并使别名保存并与allonym配对

执行

Input: 
Phone bookadd Bromley.Jones 12345
Output: 
Name: Bromley.Jones 
Number 12345 
Saved in phone book!
Input: 
Phone bookalias Bromley.Jones BJ
Output: 
This function does not work.

异名和名字有着相同的语言定义。 异名和名字有着相同的语言定义


Tags: ofinselfaddifdefphonealias
1条回答
网友
1楼 · 发布于 2024-10-05 10:20:11

有两个问题。首先,在encounter中:它将始终返回0,除非您正在搜索的项目是第一个,因为if块位于for内。找到后,您只需返回:

def encounter(self, allonym):
    for digit, allonyms in self.phoneDic.items():
        if allonym in allonyms:
            return digit
    return 0

然而,这里的一个问题与第二个问题有关:字典中的键是字符串,但您将其视为int。如果找不到,我会将上述函数更改为返回None。然后在alias函数中:

def encounter(self, allonym):
    for digit, allonyms in self.phoneDic.items():
        if allonym in allonyms:
            return digit
    return None

def alias(self, allonym, newallonym):
    if newallonym:
        phno = self.encounter(allonym)
        if phno:
            self.phoneDic[phno].append(newallonym)
            print("Alias stated")

相关问题 更多 >

    热门问题