Python 3.x 意外的 TypeError 电话簿

标签 python python-3.x

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 的目的是为 allonym 本身创建一个昵称,并与 allonym 一起保存在内存中。当我收到 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.

Allonym 与 name 具有相同的语言定义。 Allonyms 与名称具有相同的语言定义。

最佳答案

有 2 个问题。首先,在 encounter 中:除非您要搜索的项目是第一个,否则它将始终返回 0,因为 if block 位于 。一旦找到,您只需将其返回即可:

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

但是,这里的一个问题与第二个问题相关:字典中的键是字符串,但您将其视为整数。我会将上面的函数更改为在找不到时返回 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")

关于Python 3.x 意外的 TypeError 电话簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58491017/

相关文章:

python - Django 通过多对多 ORM 对象中的多个标签进行过滤

python - 将字符串值从 pickled 转换为字典

python - 合并具有不同索引的数据帧

python - Selenium +Python : CSS Selector -- NoSuchElement error

python - 如何在 SQLAlchemy 中加载嵌套关系?

python - Matplotlib 散点图 - 去除白色填充

python - 如何从 python 脚本内部运行 python 命令?

python - __repr__ 应该返回字节还是 unicode?

python - 使用 Flask-RestX 制作 RESTful API 时遇到问题 : "No operations defined in spec!" and "404"s

python - pycharm_helpers 的拉取访问被拒绝,存储库不存在或可能需要 'docker login'