создать несколько записей телефонных справочников в python, используя list и dict - PullRequest
0 голосов
/ 27 апреля 2020

Я создаю программу Телефонного справочника, используя python, в первую очередь я новичок в python, здесь я создал класс и объявил глобальный список и dict, потому что я хочу сохранить, когда я вызываю функцию testcreate, которую мы вводим имя и телефон, которые будут сохранены в списке, и этот список будет сохранен в dict через функцию сохранения. Чтобы показать данные телефонного справочника, просто вызовите функцию getdata, но она не работает, никакая помощь заранее спасибо

class testdl():
    testlist=[]
    testdic={}      
    def testcreate():
        name = input("enter name : ")
        phone = input("enter phone : ")
        testdl.save(name,phone)
    def save(n,p):
        testdl.testlist[n]=p
        testdl.testdic = testdl.testlist
    def getdata():
        print(testdl.testdic)


>>> tdll = testdl()
>>> tdll.testcreate()

**Error Message :**
    Traceback (most recent call last):
      File "<pyshell#81>", line 1, in <module>
        tdll.testcreate()
    TypeError: testcreate() takes 0 positional arguments but 1 was given
>>> testdl.testcreate()
enter name : srikanth
enter phone : 1234567890

**Error Message :** 
    Traceback (most recent call last):
      File "<pyshell#82>", line 1, in <module>
        testdl.testcreate()
      File "<pyshell#79>", line 7, in testcreate
        testdl.save(name,phone)
      File "<pyshell#79>", line 9, in save
        testdl.testlist[n]=p
    TypeError: list indices must be integers or slices, not str

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Очевидно, ваша функция может быть статическим методом, и вам не нужно создавать класс. Если вы действительно хотите создать класс:

class Testdl:
    def __init__(self): # initialize the value
        self.testlist=[]
        self.testdic={}
        self.name = None
        self.phone = None
    def testcreate(self):
        self.name = input("enter name : ")
        self.phone = input("enter phone : ")
        self.save()
    def save(self):
        self.testdic[self.name] = self.phone # maybe you need a dict to save them not a list
        self.testlist.append(self.testdic) # then you append it in the list
    def getdata(self):
        print(self.testdic)

testdl = Testdl() # create a instance
testdl.testcreate() # call the function
testdl.getdata() # print the data

Если вы хотите записать три группы данных, используйте:

testdl = Testdl()
for i in range(3):
    testdl.testcreate()
testdl.getdata()
1 голос
/ 27 апреля 2020

Ошибка 1: каждому методу в классе требуется self в качестве первого аргумента, который ссылается на текущий экземпляр

def testcreate(self):
    name = input("enter name : ")
    phone = input("enter phone : ")
    self.save(name,phone)

Ошибка 2: списки

def save(self, n,p):
     self.testlist[n]=p

принимают только целые числа как индексы


Вы получите ошибки

Ошибка 3: self.testlist пусто => IndexError: Индекс не найден

Ошибка 4: a список не является словарем (в save ())

testdl.testdic = testdl.testlist

возможное решение

class testdl():
    testdic={}      
    def testcreate(self, ):
        name = input("enter name : ")
        phone = input("enter phone : ")
        self.save(name,phone)

    def save(self, n,p):
        self.testlist[n]=p

    def getdata(self, n):
        print(self.testdic[n])
...