##############################################################################
# Python From Scratch
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Site: https://pythonfromscratch.com
#
# File: listing\chapter 09\09.06 - Controlling a phonebook.py
# Description: Controlling a phonebook
##############################################################################
phonebook = []
def ask_name():
return input("Name: ")
def ask_telephone():
return input("Phone: ")
def show_data(name, phone):
print(f"Name: {name} Phone: {phone}")
def ask_filename():
return input("File name: ")
def search(name):
name = name.lower()
for p, e in enumerate(phonebook):
if e[0].lower() == name:
return p
return None
def new():
name = ask_name()
telephone = ask_telephone()
phonebook.append([name, phone])
def delete():
name = ask_name()
p = search(name)
if p is not None:
del phonebook[p]
else:
print("Name not found.")
def update():
p = search(ask_name())
if p is not None:
name = phonebook[p][0]
phone = phonebook[p][1]
print("Found:")
show_data(name, phone)
name = ask_name()
telephone = ask_telephone()
phonebook[p] = [name, phone]
else:
print("Name not found.")
def list():
print("\nPhonebook\n\n------")
for e in phonebook:
show_data(e[0], e[1])
print("------\n")
def load():
global phonebook
filename = ask_filename()
with open(filename, "r", encoding="utf-8") as file:
phonebook = []
for line in file.readlines():
name, phone = line.strip().split("#")
phonebook.append([name, phone])
def save():
filename = ask_filename()
with open(filename, "w", encoding="utf-8") as file:
for e in phonebook:
file.write(f"{e[0]}#{e[1]}\n")
def validate_integer_range(question, start, end):
while True:
try:
value = int(input(question))
if start <= value <= end:
return value
except ValueError:
print(f"Invalid value, please type between {start} and {end}")
def menu():
print("""
1 - New
2 - Update
3 - Delete
4 - List
5 - Save
6 - Load
0 - Exit
""")
return validate_integer_range("Choose an option: ", 0, 6)
while option := menu():
if option == 0:
break
elif option == 1:
new()
elif option == 2:
update()
elif option == 3:
delete()
elif option == 4:
list()
elif option == 5:
save()
elif option == 6:
load()