Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 31

Как сделать записную книжку по приведённому шаблону?

26.11.2013, 14:23. Показов 6242. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попробуем написать
простенькую записную книжку. Сразу же оговорюсь, этот способ описание книги -
не самый эффективный. Но для академических тренировок вполне пойдет.

Кликните здесь для просмотра всего текста
Для начала научимся работать с файлами. В своей папке создайте папку (на этот
раз папку!) lab3, в ней два файла: lab3.py и book.db.
Первый файл - код с логикой для обработки данных, второй - файл с данными
книжки.

Для начала запишем данные в файл book.db, чтобы было над чем работать и на чем
тестировать код.

Откройте файл book.db и напишите что-то в духе:

Code
1
2
3
4
5
6
Alex 12345665 15135155
Nick 12415531 51235135
John 33523623 52365262
Eric 23511651 31531355
...
...
И так далее.

Предположим, что первое поле нашей книжки - это имя, второе и третье - телефон.

Теперь откроем файл lab3.py и начнем писать:

Python
1
2
3
4
5
6
7
8
# -*- coding: utf8 -*-
from os import path 
 
# В модуле os есть объект path, который содержит очень полезный для нас метод 
# (метод - примерно то же самое что и функция, только она принадлежит какому-то
# объекту) exists(), который говорит нам, существует ли указанный файл/папка или
# нет. Например, если вызвать path.exists("book.db") то получим True (а значит 
# можем использовать сие в качестве условия if'а).
Может вы уже знаете, что в C++ исполнение программы начинается с функции main,
так вот, в python тоже можно заставить выполняться программу с определенного
места, записав следующее:

Python
1
2
if __name__ == "__main__":
    # Тут идет какой-то код...
Перед if можно определять сколько угодно функций/классов (пока что не заморачи-
ваемся что такое объект/класс), но исполнение начнется с данного if'а!

Python
1
2
3
4
5
6
7
def lol(something):
    print(something)
 
lol("lololo") # Здесь вызов не пройдет!
 
if __name__ == "__main__":
    lol("ololo") # а вот это - выполнится.
Вдохнули воздуха побольше. Работа с файлами.

Чтобы в программе открыть какой-нибудь файл (book.db, например), нужно
воспользоваться функцией open (логично, не так ли?), которая в качестве
первого аргумента принимает путь к файлу (в нашем случае - это просто book.db),
второго - режим работы с файлом. Режимов на самом деле много (читаем гугл), но
нас интересуют два: "r" и "w", которые означают "Открыть файл для чтения" и
"Открыть файл для записи", соответственно.

Например, чтобы открыть файл для чтения, нужно написать следующее:
Python
1
my_file = open("book.db", "r")
Теперь my_file ассоциируется с открытым файлом.

Что можно сделать с ним?
- Прочитать строчку:
Python
1
line = my_file.readline()
line будет содержать
Code
1
Alex 12345665 15135155\n
- Прочитать сразу все строчки:
Python
1
lines = my_file.readlines()
lines - это список всех строк.
- Записать строчки в файл.
Python
1
my_file.writelines(["lol", "lol2"])
Для записи нужно убедиться, что файл открыт для записи! Если перед этим
файл был открыт для чтения, то сперва его нужно закрыть, потом - открыть
для записи.
- Закрыть файл (обязательно после конца работы!)
Python
1
my_file.close()
И так далее. Если хочется чего-то еще -> гугл.

Помните, когда вы прочтете один символ из файла, указатель сдвинется ровно
на столько же, как сдвинуть указатель обратно -> гугл. Гуглите работу с
файлами в python, хотя все необходимое для лабы я уже написал.

Итак, что от вас требуется. Имеется некоторый шаблон:

Python
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
def change_tel(name, new_tel):
        ...
 
def change_name(tel, new_name):
        ...
 
def find_record_by_name(name):
        ...
 
def add_record(new_record, db):
        ...
 
def delete_record(name):
        ...
 
if __name__ == "__main__":
    book_file = open("book.db", "r")
    ...
    ...
    while (Не считана буква Е - для выхода):
        предложить пользователю возможные команды,
        а именно:
        Добавить новое имя в книгу
        Удалить имя из книги
        Изменить номер 1 для имени name
        Изменить номер 2 для имени name
        Пользователь вводит букву, вы - 
        вызываете соответствующую функцию (см. выше)
 
        Например, что-то в духе этого:
        cmd = raw_input("Введите коману: ")
        if cmd == 'a' or cmd == 'A':
                                name = raw_input("Введите имя: ")
                                tel = raw_input("Введите номер 1: ")
                                mtel = raw_input("Введите номер 2: ")
                                add_rec(...)
Продумайте логику работы цикла: когда что спрашивать,
когда и как вызвать ту или иную функцию. Мой совет: откройте файл, считайте
все строки в список, закройте файл; в зависимости от заданной команды вызывайте
функцию, передавая список строк в качестве параметра. В функции изменяяете
или добавляете имена/телефоны в списке, возвращаете его из функции, сохраняя
в переменной. Как только работа закончена (пользователь ввел букву E),
открываете файл на запись и список строк сохраняете (writelines).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2013, 14:23
Ответы с готовыми решениями:

Сделать записную книжку в WinForms
Всем привет, в программировании я начинающий и хотел бы попросить вас решить данные задачи для дальнейшего моего анализа и разбора: 1)...

Сделать записную книжку, чтобы сохраняла в файл записи и открывает при запуске (с двоичным кодом - не .ТХТ) НЕ получается никак сохранить/загрузить
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons,...

Написать записную книжку
Помогите пожалуйста с программой, сегодня уже сдавать, а у меня толком ничего нет( Написать простейшую записную книжку сотрудников,...

9
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
26.11.2013, 14:58
masasc, и в чем проблема? Вроде адекватная лаба, причём очень даже подробная.
0
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 2
27.11.2013, 13:46
masasc, работа достаточно простая, могу подсказать что и как делать (не все сразу, конечно).
0
6 / 6 / 5
Регистрация: 02.06.2013
Сообщений: 47
28.11.2013, 11:10
А ещё можно открыть книжку Лутца "Программирование на Python", там есть параграф про базы данных.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
28.11.2013, 16:03
Цитата Сообщение от destroymol Посмотреть сообщение
А ещё можно открыть книжку Лутца "Программирование на Python", там есть параграф про базы данных.
Не думаю, что у человека какие-то трудности с выполнением, ему тупо влом. Если было-бы не понятно, то участвовал в беседе, спрашивал, что не понятно и т д

 Комментарий модератора 
правила
3.1. Уважительно относитесь к другим участникам форума.
0
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 31
29.11.2013, 01:42  [ТС]
Был бы благодарен если бы хоть что-нибудь подсказали чтобы было с чего начать
Цитата Сообщение от sunzilog Посмотреть сообщение
masasc, работа достаточно простая, могу подсказать что и как делать (не все сразу, конечно).
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
29.11.2013, 09:06
Цитата Сообщение от masasc Посмотреть сообщение
Был бы благодарен если бы хоть что-нибудь подсказали чтобы было с чего начать
создай проект, сделай простой скрипт, выводящий сообщение
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
29.11.2013, 16:35
Цитата Сообщение от masasc Посмотреть сообщение
Python
1
2
3
lol("lololo") # Здесь вызов не пройдет!
if __name__ == "__main__":
    lol("ololo") # а вот это - выполнится.
Вот уж правда лол. Чего это он "не пройдёт"?

masasc, вы решили уроки для начинающих запилить? Гут.
1
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 31
30.11.2013, 16:31  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
masasc, вы решили уроки для начинающих запилить? Гут.
Вообще я создавал не как урок ,а хотел узнать как написать )
0
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 2
30.11.2013, 17:11
Цитата Сообщение от helter Посмотреть сообщение
Вот уж правда лол. Чего это он "не пройдёт"?

masasc, вы решили уроки для начинающих запилить? Гут.
Согласен, косяк, бывает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2013, 17:11
Помогаю со студенческими работами здесь

Создать консольную записную книжку
Всем привет! Такое дело - надо создать записную книжку на Си, обычную консольную, с файлами. Но я не очень с этими темами. Подскажите, что...

Ищу программу записную книжку
Я сейчас использую программу flashnote для того чтобы делать быстрые записи. Но с течением времени я понял что мне не хватает в этой...

Нужно написать записную книжку на языке C#
Необходимо осуществить следующее: Написать записную книжку которая будет хранить данные о сотрудниках: ФИО, ПОЛ, Телефон, ...

Создать простую электронно записную книжку
Помогите создать простую электронно записную книжку в Delphi с подробным описанием процедур.

Опишите, используя словарь, записную книжку
Опишите, используя словарь, записную книжку (фамилия, номер телефона). Составьте программу, определяющую есть ли в записной книжке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru