Выполняю такую задачку:
"""Создайте собственную программу «Адресная книга», работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные
данные ваших знакомых. Кроме того, эта информация также должна сохраняться на диске для последующего доступа."""
Вот код:
class MyLog:
def __init__(self, name, number):
self.name = name
self.number = number
def __repr__(self):
return "Name: {0}. Number: {1}\n".format(self.name, self.number)
while True:
action = input('Enter the command: ')
if action == 'add':
name = input("\nEnter name: ")
number = input("Enter number: ")
contact = MyLog(name, number)
read_log = open('log_file.txt')
line = read_log.readline()
read_log.close()
if len(line) == 0:
amount_line = sum(1 for line in open('log_file.txt', 'r')) + 1
else:
amount_line = sum(1 for line in open('log_file.txt', 'r'))
if len(line) == 0:
template = 'Contact log:\r'
else:
template = ''
add_log = open('log_file.txt', 'a')
add_log.write(template + '{0}. '.format(amount_line) + str(contact))
add_log.close()
print('\nContact saved: ' + '{0}.'.format(amount_line) + str(contact))
if action == 'check':
read_log = open('log_file.txt')
while True:
line = read_log.readline()
if len(line) == 0:
read_log.close()
break
print(line)
if action == 'delete':
num_contact = input('Number contact: ')
read_log = open('log_file.txt', 'r')
line = read_log.readline()
delete_log = open('log_file.txt', 'w')
for line in read_log:
if not line.startswith(num_contact):
delete_log.write(line)
print(line)
read_log.close()
delete_log.close()
if action == 'close':
break
else:
print('\nCommand not defined!\n')
Проблема состоит в том, что при выполнении команды 'delete' программа удаляет не только строку по заданным параметрам, а еще и самую первую строку. Еще одна проблема - это вывод оповещения "Command not defined!", которое должно срабатывать только после ввода несуществующей команды, а оно почему-то срабатывает после завершения других команд.