-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path10_phone_book_v1.py
106 lines (86 loc) · 3.07 KB
/
10_phone_book_v1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
class PhoneBook:
def __init__(self):
self.__persons = {}
def add_number(self, name: str, number: str):
if not name in self.__persons:
# add a new dictionary entry with an empty list for the numbers
self.__persons[name] = []
self.__persons[name].append(number)
def get_numbers(self, name: str):
if not name in self.__persons:
return None
return self.__persons[name]
def get_numbers_by_number(self, number: str):
for name, nums in self.__persons.items():
for num in nums:
if num == number:
return name
return 'unknown number'
def all_entries(self):
return self.__persons
class FileHandler():
def __init__(self, filename):
self.__filename = filename
def load_file(self):
names = {}
with open(self.__filename) as f:
for line in f:
parts = line.strip().split(';')
name, *numbers = parts
names[name] = numbers
return names
def save_file(self, phonebook: dict):
with open(self.__filename, "w") as f:
for name, numbers in phonebook.items():
line = [name] + numbers
f.write(";".join(line) + "\n")
class PhoneBookApplication:
def __init__(self):
self.__phonebook = PhoneBook()
self.__filehandler = FileHandler("phonebook.txt")
# add the names and numbers from the file to the phone book
for name, numbers in self.__filehandler.load_file().items():
for number in numbers:
self.__phonebook.add_number(name, number)
def help(self):
print("commands: ")
print("0 exit")
print("1 add entry")
print("2 search")
print("3 search by number")
def add_entry(self):
name = input("name: ")
number = input("number: ")
self.__phonebook.add_number(name, number)
def search(self):
name = input("name: ")
numbers = self.__phonebook.get_numbers(name)
if numbers == None:
print("number unknown")
return
for number in numbers:
print(number)
def search_by_number(self):
number = input("number: ")
print(self.__phonebook.get_numbers_by_number(number))
def exit(self):
self.__filehandler.save_file(self.__phonebook.all_entries())
def execute(self):
self.help()
while True:
print("")
command = input("command: ")
if command == "0":
self.exit()
break
elif command == "1":
self.add_entry()
elif command == "2":
self.search()
elif command == "3":
self.search_by_number()
else:
self.help()
# when you run the tests, nothing apart from these two lines should be placed in the main function, outside any class definitions
application = PhoneBookApplication()
application.execute()