С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Python Задачи по питон Здравствуйте, помогите сделать задачки по питону. Закажу, в случае чего. 1. Вывести на экран таблицу кубических корней первых десяти целых положительных чисел. 2. В последовательности из N целых чисел подсчитать количество чѐтных и нечѐтных чисел. 3. Задано целое положительное число. Определить сумму его делителей. 4. Дано K наборов ненулевых целых чисел. Признаком завершения... https://www.cyberforum.ru/ python-beginners/ thread2469504.html Перемножить сумму и последний элемент исходного массива Python
Дан массив целых чисел. Нужно найти сумму элементов с четными индексами (0-й, 2-й, 4-й итд), затем перемножить эту сумму и последний элемент исходного массива. Моер решение: def checkio(array): summ == 1 if 0<len(array)<20: for i in range(len(array)): if (i+1)%2==0: summ += array result = summ*array
Python В чём причина ошибки, проблема с elseif Помогите разобраться, ругается на elif Код ниже: #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as nu, matplotlib as mat,math as m import pylab https://www.cyberforum.ru/ python-beginners/ thread2469490.html Python Неизвестная ошибка Привет! Мне удалось написать 3 простейших программы для кодирования и декодирования текста, и я пытался совместить их в одну. По какой-то причине если запускать программы в виде консоли - они завершаются раньше чем выводится ответ(результат). По возможности, пожалуйста исправьте эту проблему о опишите ее суть. 1) Связывает три программы вместе. import gronsfeld import перестановка import... https://www.cyberforum.ru/ python-beginners/ thread2469488.html
Python Почему происходит 400 Bad Request: KeyError при заполнении формы?
Есть 2 функции, которые по нажатию на кнопку "Ок" должны с помощью ajax вернуть на страницу ответ, соответственно есть для них и 2 ajax функции. Обе функции практически идентичны, но вторая не работает. Код второй функции: @app.route('/act_2', methods = ) def act_2(): #try: foo = guard(request.form) y0 = float(guard(request.form)) h = float(guard(request.form)) a =...
Python Программа здоровается https://www.cyberforum.ru/ python-beginners/ thread2469441.html
Сразу к сути: Как сделать так, что бы когда мы писали программе что-то типа "знакомься это *имя*", программа отвечала "привет *имя, которое мы ввели во время написания текста*" Примерно так: Чем я могу помочь?: Знакомься, это Андрей! Привет Андрей! Чем я могу помочь?: Знакомься, этот человек - Ира Привет Ира! Как можно это реализовать? while True:
Python Не могу понять особенности глобальной переменной или указателя Помогите новичку понять , как можно из локального ,название открытия файла( file1 = open(of,"r") ) сделать глобальный def open_file(): of = askopenfilename() file1 = open(of,"r") txt.insert(END,file1.read()) file1.close def save_file(): sf = asksaveasfilename() https://www.cyberforum.ru/ python-beginners/ thread2469422.html Python Задача об упаковке в контейнеры
Доброго времени суток! Нужна Ваша помощь в решении задачи об упаковке коробок в контейнеры. Все на что меня хватило это написать небольшой код создающий список коробок: from operator import itemgetter
Python Применение математических функций https://www.cyberforum.ru/ python-beginners/ thread2469379.html
Помогите пожалуйста с заданием Вообще без понятия как прописать верхнюю строчку from math import * n = int(input("Введите целое положительное значение n: ")) a1 = a2=factorial(2*n) p=a1+a2 print(p)
Python Pandas (DataFrame) сравнить ячейки Всем привет, на какое то время ушел от питона, и вот вернулся. подскажите люди умные как можно сравнить ячейки в дата фрейме строковые между собой? но не серии, а именно значения построчно. код для сравнения я написал через open, но хотело бы в основной код здравую мысль добавить. пример кода, которым я дорабатывал фрейм: with open('D:\\19_05_trst_out.csv', 'w', encoding='cp1251') as... https://www.cyberforum.ru/ python-beginners/ thread2469378.html
Получение переменной из одной функции в другой Python
Тут у меня проблемка. Я в одной функции создал переменную и хочу ее использовать в другой функции. Я использовали nonlocal, но что то не так пошло. Вот сам код: def filefound(): #сам фаил try: filep=input('PATHandFILE: ') fil=r''+filep file=(fil,'wr') word=file.read() repl()
Python Когда генераторы списков пишут в квадратных скобках а когда в круглых? Когда генераторы списков писать в квадратных скобках , а когда в круглых () https://www.cyberforum.ru/ python-beginners/ thread2469238.html
1729 / 969 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
03.07.2019, 02:29 0

Телефонный справочник - Python - Ответ 13696988

03.07.2019, 02:29. Показов 17468. Ответов 23
Метки (Все метки)

Ответ

constantin_01, Начал заносить в книгу свои телефоны и понял, что сохранение страницы только при нахатии кнопки "Сохранить страницу", это очень не удобно. Иногда забываешь нажать и изменения на странице пропадают. Да и надоедает постоянно нажимать лишнюю кнопку. Поэтому сделал автоматическое сохранение при любом уходе со страницы.
Хотел было удалить кнопку "Сохранение", но потом решил оставить на случай, когда на странице сразу вводится большое количество записей. Тогда имеет смысл кнопкой периодически принудительно сохранять изменения на странице, на случай отключения электроэнергии. В стандартных базах данных, там вообще для каждой записи, как только мы уходим с записи, то она автоматически сохраняется. Но это я подумаю, может в будущем тоже так сделаю.
А пока, вот новая версия телефонной книги
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
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# файл *.pyw (расширение .pyw необходимо для подавления окна DOS)
 
from tkinter import *
import shelve
 
class PhoneBook:
    def __init__(self, nameBook, dicRec={}):
        self.nameBook = nameBook
        self.dicRec = dicRec
    def loadBook(self):
        db = shelve.open(self.nameBook)
        self.dicRec = dict(db.items())
        db.close()
    def saveBook(self):
        db = shelve.open(self.nameBook)
        for (key, record) in self.dicRec.items():
            db[key] = record
        db.close()
 
class PhoneRec:
    def __init__(self, keyRec, char, label, phone, familyName, comment, delR=''):
        self.keyRec = keyRec
        self.char = char
        self.label = label
        self.phone = phone
        self.familyName = familyName
        self.comment = comment
        self.delR = delR
 
fieldnamesRec = ('keyRec', 'char', 'label', 'phone', 'familyName', 'comment', 'delR')
activCh = 'А'
typeRec = ''
dicRem = {}
 
def makeWidgets():
    global entriesRec, entRec, lab1
    entRec = {}
    window = Tk()
    window.title('Телефоны')
    window.geometry('1260x600+0+0')
    form1 = Frame(window)
    form1.pack()
    lab1 = Label(form1, text=activCh, fg="#eee", bg="#333", width=5)
    lab1.pack(side=LEFT)
    Label(form1, text='  ', width=30).pack(side=LEFT)
    alph = ["А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", 
            "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Э", "Ю", "Я"]
    for i in range(len(alph)):
        Button(form1, text=alph[i], command=(lambda x=alph[i]: fetchChr(x))).pack(side=LEFT)
    ent = Entry(form1, width=27)
    ent.pack(side=LEFT)
    entRec['entFind'] = ent
    Button(form1, text="Поиск", command=fetchFind).pack(side=LEFT)
 
    form2 = Frame(window)
    form2.pack()
    entriesRec = {}
    for (ix, label) in enumerate(fieldnamesRec):
        lab = Label(form2, text=label)
        lab.grid(row=2, column=ix)
    for i in range(1, 26):
        for (ix, label) in enumerate(fieldnamesRec):
            if label == 'keyRec' or label == 'char' or label == 'delR':
                ent = Entry(form2, state='normal', width=6)
            else:
                ent = Entry(form2, width=40)
            ent.grid(row=i+2, column=ix)
            entriesRec[label+str(i)] = ent
    form3 = Frame(window)
    form3.pack()
    Button(window, text="Следующая страница", command=fetchNext).pack()
    Label(window, text='      ', width=10).pack(side=LEFT)
    labKeyRec = Label(window, text='keyRec').pack(side=LEFT)
    ent = Entry(window, width=10)
    ent.pack(side=LEFT)
    entRec['entKeyRec'] = ent
    Button(window, text="Скрыть", command=hideRec).pack(side=LEFT)
    Button(window, text="Показать скрытые", command=fetchHide).pack(side=LEFT)
    Button(window, text="Открыть", command=openRec).pack(side=LEFT)
    Label(window, text=' ', width=5).pack(side=LEFT)
    Button(window, text="Удалить", command=delKeyRec).pack(side=LEFT)
    Label(window, text='      ', width=30).pack(side=LEFT)
    btns = Button(window, text="Сохранить", command=saveRec).pack(side=LEFT)
    Label(window, text='      ', width=20).pack(side=LEFT)
    Button(window, text="Выход", command=fin).pack(side=LEFT)
    return window
 
def clear_sheet():
    for i in range(1, 26):
        for field in fieldnamesRec:
            if field == 'keyRec' or field == 'delR':
                entriesRec[field+str(i)].config(state='normal')
                entriesRec[field+str(i)].delete(0, END)
                entriesRec[field+str(i)].config(state='readonly')
            else:
                entriesRec[field+str(i)].delete(0, END)
def fetchChr(ch):
    global activCh, typeRec, lab1
    saveRec()
    typeRec = ''
    activCh = ch
    lab1.config(text=activCh)
    dicRecChr = {}
    for key in t1.dicRec.keys():
        if t1.dicRec[key].char == ch:
            dicRecChr[key] = t1.dicRec[key]
    fetch(dicRecChr)
def fetchHide():
    global typeRec
    saveRec()
    typeRec = 'с'
    fetch(t1.dicRec)
def fetch(dicR):
    global dicRem
    clear_sheet()
    count = 1
    dicRe = dicR.copy()
    while count <= 25 and len(dicRe):
        for key in dicR.keys():
            if dicR[key].delR == typeRec:
                record = dicR[key]
                for field in fieldnamesRec:
                    if field == 'keyRec' or field == 'delR':
                        entriesRec[field+str(count)].config(state='normal')
                        entriesRec[field+str(count)].insert(0, getattr(record, field))
                        entriesRec[field+str(count)].config(state='readonly')
                    else:
                        entriesRec[field+str(count)].insert(0, getattr(record, field))
                count += 1
                dicRe.pop(key)
                if count > 25:
                    break
            else:
                dicRe.pop(key)
    dicRem = dicRe.copy()
 
def fetchNext():
    saveRec()
    fetch(dicRem)
 
def delKeyRec():
    # физическое удаление из базы данных
    key = entRec['entKeyRec'].get()
    del t1.dicRec[key]
    db = shelve.open(t1.nameBook)
    del db[key]
    db.close()
    for i in range(1, 26):
        if entriesRec['keyRec'+str(i)].get() == key:
            entriesRec['delR'+str(i)].config(state='normal')
            entriesRec['delR'+str(i)].insert(0, 'у')
            entriesRec['delR'+str(i)].config(state='readonly')
    entRec['entKeyRec'].delete(0, END)
def hideRec():
    # пометить как скрытую
    key = entRec['entKeyRec'].get()
    for i in range(1, 26):
        if entriesRec['keyRec'+str(i)].get() == key:
            entriesRec['delR'+str(i)].config(state='normal')
            entriesRec['delR'+str(i)].insert(0, 'с')
            entriesRec['delR'+str(i)].config(state='readonly')
    entRec['entKeyRec'].delete(0, END)
def openRec():
    key = entRec['entKeyRec'].get()
    for i in range(1, 26):
        if entriesRec['keyRec'+str(i)].get() == key:
            entriesRec['delR'+str(i)].config(state='normal')
            entriesRec['delR'+str(i)].delete(0, END)
            entriesRec['delR'+str(i)].insert(0, '')
            entriesRec['delR'+str(i)].config(state='readonly')
    entRec['entKeyRec'].delete(0, END)
 
def fetchFind():
    saveRec()
    clear_sheet()
    strF = entRec['entFind'].get()
    dicFind = {}
    for key in t1.dicRec.keys():
        record = t1.dicRec[key]
        for field in fieldnamesRec:
            if (field != 'keyRec' and field != 'char' and field != 'delR' and 
                getattr(record, field).find(strF) != -1):
                dicFind[key] = record
                break
    fetch(dicFind)
def saveRec():
    global typeRec
    for i in range(1, 26):
        key = entriesRec['keyRec'+str(i)].get()
        if entriesRec['delR'+str(i)].get() == 'у':
            continue
        elif key:
            record = t1.dicRec[key]
            for field in fieldnamesRec:
                setattr(record, field, entriesRec[field+str(i)].get())
            t1.dicRec[key] = record
        else:
            existRec = False
            for field in fieldnamesRec:
                if entriesRec[field+str(i)].get(): existRec = True # Если существует запись в поле на этой строке
            if existRec:
                if entriesRec['char'+str(i)].get():
                    char = entriesRec['char'+str(i)].get()
                else:
                    char = activCh
                label = entriesRec['label'+str(i)].get()
                phone = entriesRec['phone'+str(i)].get()
                familyName = entriesRec['familyName'+str(i)].get()
                comment = entriesRec['comment'+str(i)].get()
                if len(t1.dicRec)>0:
                    L = sorted(t1.dicRec.items(), key=lambda item: int(item[0]))
                    keyRec = str(int(L[-1][0]) + 1)
                else:
                    keyRec = "1"
                record = PhoneRec(keyRec, char, label, phone, familyName, comment)
                t1.dicRec[keyRec] = record
    t1.saveBook()
 
def fin():
    saveRec()
    window.destroy()
 
if __name__ == '__main__':
 
    t1 = PhoneBook("Телефоны")
    t1.loadBook()
 
    window = makeWidgets()
    fetchChr('А')
    window.mainloop()
Добавлено через 6 минут
В ближайшее время код за комментирую, а то сам уже начинаю забывать, что к чему. И если все таки кто то захочет использовать этот код в качестве примера, то комментарии помогут ему разобраться с содержимым.

Вернуться к обсуждению:
Телефонный справочник Python
0
Заказать работу у эксперта
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2019, 02:29
Готовые ответы и решения:

Телефонный справочник
Всем привет, помогите решить задачу Напишите программу, которая имитировала бы работу простого...

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

Телефонный справочник
Помогите, пожалуйста, написать программу. Я запуталась в ее написании( Требования к программе:...

Написать программу - телефонный справочник (на основании словарей)
Здравствуйте, в общем нужно написать программу - телефонный справочник (на основании словарей)....

23
03.07.2019, 02:29
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2019, 02:29
Помогаю со студенческими работами здесь

Класс "Телефонный справочник"
Я только начал изучать Python. Сам себе придумал задание и пытаюсь его сделать. Условие: ...

Телефонный номер
На различных сайтах часто требуется ввести номер телефона в определённом формате. Напиши программу,...

Телефонный номер
Здравствуйте, помогите пожалуйста с задачей, не могу понять как решается, спасибо! Дан...

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

Телефонный справочник
Помогите пожалуйста ! Реализуйте простой телефонный справочник (Имя-Телефон), хранящий данные в...

Телефонный асистент
Дано список номеров телефонов. Написать программу, которая при вводе первых цифр номера телефона...

Телефонный справочник
Напишите приложение &quot;Телефонный справочник&quot;, позволяющее создавать список абонентов, просматривать...

0
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru