Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
132 / 128 / 20
Регистрация: 05.08.2021
Сообщений: 591

А я вот тут базу данных сварганил без самой "базы данных", т. е. без SQL

16.08.2025, 15:56. Показов 4441. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Конечно понимаю что должен быть бит за это тапком ибо на большом объеме данных работать будет с чудовищной медленностью, но тем не менее...
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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
from tkinter import *
from itertools import groupby
 
 
try:
    class Person:
        instances = []
        data_from_entries = ''
        search = ''
        save = ''
 
        def __init__(self, name, surname, sex, age, number, location):
            self.name = name
            self.surname = surname
            self.sex = sex
            self.age = age
            self.number = number
            self.location = location
            self.instances.append(self)
 
        @staticmethod
        def create_file():
            file = open('objects.txt', 'w')
            file.close()
 
        @staticmethod
        def create_removed():
            file = open('removed.txt','w')
            file.close()
 
        @staticmethod
        def output(a, b):
            inp = Person.search
            a.config(text=Person.search)
            test = False
            pass_name = set()
            persons = ''
            for i in Person.instances:
                if i.surname.strip() == inp.strip():
                    test = True
                    if i.name not in pass_name:
                        persons += f'имя:         {i.name}\nпол:         {i.sex}\nвозраст:  {i.age} \nномер:    {i.number} \nадрес:      {i.location}\n_____________________________________________________\n'
                pass_name.add(i.name)
            if test:
                b.config(text=persons)
            else:
                b.config(text='Фамилия не найдена')
 
        @staticmethod
        def append_obj_to_file():
            with open('objects.txt', 'a+', encoding='utf-8') as file:
                data = Person.data_from_entries
                # print(data)
                s = file.read()
                if data.count('не указано') < 6:
                    file.write(data + '|')
                    file.seek(0)
 
        @staticmethod
        def test_file_for_valid_format(n):
            def test_string_has_right_format(x):
                return not bool(len(x.split('|')[:-1]) % 6) and '|' in x
 
            with open(n, encoding='utf-8') as file:
                s = file.read()
                if s:
                    if s[-1] != '|':
                        s += '|'
                    if test_string_has_right_format(s):
                        return s
                    if s[-1] != '|':
                        s += '|'
                    new_n = []
                    for i in range(len(s) - 1):
                        if s[i] != '|' or (s[i] == '|' and s[i - 1] != '|'):
                            new_n += s[i]
                    new_s = ''.join(new_n)
                    if new_s[-1] != '|':
                        new_s += s[-1]
                    if new_s[-1] != '|':
                        new_s += '|'
                    s = new_s
                    n = s.split('|')
                    r = len(n[:-1])
                    if not r % 6 == 0:
                        i = r
                        while i % 6:
                            i += 1
                        res = i - r
                        for i in range(res):
                            s += 'не указано|'
                else:
                    Person.save = ''
                    # print('file is empty')
                return s
 
        @staticmethod
        def change_file_for_valid(x):
            with open(x, 'w', encoding='utf-8') as file:
                file.write(Person.save)
 
        @staticmethod
        def read_db():
            Person.save = Person.test_file_for_valid_format('objects.txt')
            Person.change_file_for_valid('objects.txt')
            with open('objects.txt', encoding='utf-8') as file:
                s = file.read().strip().split('|')
                res = []
                for i in range(0, len(s) - 5, 6):
                    res += [s[i: i + 6]]
                return res
 
        @staticmethod
        def create_objects():
            Person.instances.clear()
            s = Person.read_db()
            for i in s:
                obj = Person(*i)
 
        @staticmethod
        def draw_gui():
            root = Tk()
            root.geometry('600x650+200+100')
            root.title('Alexander`s Notebook 1.1')
            root.iconbitmap('favicon.ico')
            root.configure(bg='beige')
 
            def change_spaces(s):
                s = s.replace('|', '/')
                return s
 
            def test_button():
                result = [e1.get(), e2.get(), e3.get(), e4.get(), e5.get(), e6.get()]
                result2 = list(map(lambda x: 'не указано' if x == '' else x, result))
                for i in range(len(result2)):
                    result2[i] = change_spaces(result2[i])
                Person.data_from_entries = '|'.join(result2)
                e1.delete(0, END)
                e2.delete(0, END)
                e3.delete(0, END)
                e4.delete(0, END)
                e5.delete(0, END)
                e6.delete(0, END)
 
                Person.append_obj_to_file()
                Person.create_objects()
 
            def search_name():
                try:
                    label7.config(foreground='green', justify='center', font=('verdana', 20))
                    try:
                        Person.create_objects()
                        Person.search = e7.get()
                        Person.output(label7, label8)
                        e7.delete(0, END)
                    except IndexError:
                        label7.config(text='ошибка ввода')
                        with open('objects.txt', 'w', encoding='utf-8') as file:
                            file.write(Person.save)
                    except FileNotFoundError:
                        label7.config(text='Для создания файла с данными \nвведите первый контакт')
                        Person.create_file()
                except:
                    label7.config(text='Что-то пошло не так \nПерезапустите программу')
                    label8.config(text='')
 
            def to_del_contact():
                x = e9.get()
                with open('objects.txt', encoding='utf-8') as file:
                    s = file.read()
                if x in s:
                    n = s.split('|')
                    indexes = []
                    deleted = []
                    for i, f in enumerate(n):
                        if f == x:
                            indexes += [i]
                    for i in indexes:
                        if n[i - 1] == e8.get():
                            deleted = n[i - 1: i + 5]
                            break
                    to_removed = '|'.join(deleted) + '|'
                    del n[i - 1:i + 5]
                    s = '|'.join(n)
                    with open('removed.txt', 'a', encoding='utf-8') as file:
                        file.write(to_removed)
                    with open('objects.txt', 'w', encoding='utf-8') as file:
                        file.write(s)
                e8.delete(0, END)
                e9.delete(0, END)
 
            def show_contacts():
                try:
                    # сортировка по фамилиям
                    with open('objects.txt', encoding='utf-8') as file:
                        s = file.read()
                    ns = s.split('|')[:-1]
                    res = []
                    for i in range(0, len(ns) - 5, 6):
                        res += [ns[i: i + 6]]
                    res.sort(key=lambda x: x[1])
                    # сортировка однофамильцев по именам
                    result = []
 
                    def grouper(item):
                        return item[1]
 
                    for key, group_items in groupby(res, key=grouper):
                        b = list(group_items)
                        b.sort(key=lambda x: x[0])
                        b = sum(b, [])
                        result.append(b)
                    result = sum(result, [])
                    s = '|'.join(result) + '|'
                    with open('objects.txt', 'w', encoding='utf-8') as file:
                        file.write(s)
                    # сортировка по фамилиям
                    Person.create_objects()
                    label7.config(foreground='blue', justify='left')
                    contacts = ''
                    if not Person.instances:
                        label7.config(text='База контактов пуста')
                    else:
                        for i in Person.instances:
                            contacts += f'{i.surname} {i.name}\n'
                        label7.config(text=contacts, font=('verdana', 10))
                        label8.config(text='')
                except:
                    label7.config(text='')
                    label8.config(text='Что-то пошло не так \nПерезапустите программу')
 
            def restore_contacts():
                Person.save = Person.test_file_for_valid_format('removed.txt')
                Person.change_file_for_valid('removed.txt')
                s = ''
                with open('removed.txt', encoding='utf-8') as file1:
                    s = file1.read()
                # print(s)
                with open('objects.txt', 'a', encoding='utf-8') as file2:
                    file2.write(s)
                with open('removed.txt', 'w', encoding='utf-8') as file3:
                    file3.write('')
 
            label1 = Label(text='Имя', bg='beige', font=('verdana', 10))
            e1 = Entry(width=40)
            label2 = Label(text='Фамилия', bg='beige', font=('verdana', 10))
            e2 = Entry(width=40)
            label3 = Label(text='Пол', bg='beige', font=('verdana', 10))
            e3 = Entry(width=40)
            label4 = Label(text='Возраст', bg='beige', font=('verdana', 10))
            e4 = Entry(width=40)
            label5 = Label(text='Номер', bg='beige', font=('verdana', 10))
            e5 = Entry(width=40)
            label6 = Label(text='Адрес', bg='beige', font=('verdana', 10))
            e6 = Entry(width=40)
            button = Button(text='Добавить контакт', foreground='red', command=test_button)
            e7 = Entry(width=40)
            button2 = Button(text='Искомая фамилия', foreground='green', command=search_name)
            label7 = Label(text='Результат поиска', foreground='red', bg='beige', font=('verdana', 10))
            label8 = Label(justify=LEFT, bg='beige')
            label9 = Label(text="Удаление контактов", bg='beige', font=('verdana', 10))
            e8 = Entry(width=40)
            button3 = Button(text='Удалить контакт', command=to_del_contact)
            label10 = Label(text="Имя", bg='beige', font=('verdana', 10))
            label11 = Label(text="Фамилия", bg='beige', font=('verdana', 10))
            e9 = Entry(width=40)
            button5 = Button(text='Показать контакты', command=show_contacts)
            button4 = Button(text='Восстановить', command=restore_contacts)
 
            label1.place(x=120, y=10)
            e1.place(x=20, y=30)
            label2.place(x=105, y=50)
            e2.place(x=20, y=70)
            label3.place(x=120, y=90)
            e3.place(x=20, y=110)
            label4.place(x=110, y=130)
            e4.place(x=20, y=150)
            label5.place(x=115, y=170)
            e5.place(x=20, y=190)
            label6.place(x=115, y=210)
            e6.place(x=20, y=230)
            button.place(x=85, y=260)
            e7.place(x=20, y=300)
            button2.place(x=85, y=330)
            label7.place(x=320, y=10)
            label8.place(x=300, y=50)
            label9.place(x=85, y=360)
            label10.place(x=120, y=380)
            e8.place(x=20, y=405)
            label11.place(x=105, y=425)
            e9.place(x=20, y=445)
            button3.place(x=85, y=475)
            button4.place(x=90, y=510)
            button5.place(x=78, y=565)
 
            e1.focus()
 
            root.mainloop()
 
except FileNotFoundError:
    Person.create_file()
    Person.create_removed()
finally:
    Person.draw_gui()
Миниатюры
А я вот тут базу данных сварганил без самой "базы данных", т. е. без SQL  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2025, 15:56
Ответы с готовыми решениями:

Вот такая вот задача
Здравствуйте, помогите решить, пожалуйста Охранниками магазина работают Андреев, Иванов, Петров,...

Что означают все эти данные вот в этом коде PITHON и где можно найти описание всех этих данных в коде
#!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford...

Тут по теме выше про "Тест" написал функцию и вот хочу понять как МОДЕРНИЗИРОВАТЬ её, обернуть в @декоратор?
Вот он # coding: utf8 __author__ = 'yesok' def m(): print(&quot;End!&quot;) def main():

21
17 / 18 / 3
Регистрация: 09.10.2012
Сообщений: 55
Записей в блоге: 1
27.04.2026, 17:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Zloyalex100 Посмотреть сообщение
Вообще-то краснею за то что поле "пол" поименовал на американский лад
это пофиг, а вот за то что смешал гуй и условную бд в один класс точно красней)
0
132 / 128 / 20
Регистрация: 05.08.2021
Сообщений: 591
27.04.2026, 18:00  [ТС]
Цитата Сообщение от pyirrlicht Посмотреть сообщение
вот за то что смешал гуй и условную бд в один класс точно красней
Ну, да... Про этот косяк знаю Но в то время пытался реализовать задачу хоть каким-нибудь работоспособным способом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2026, 18:00

Зачем python нужен? Работу всё-равно не найти: вот некоторый обзор требований
Ищем Python программиста в связи с расширением штата разработчиков. Проект связан с автоматизацией...

Разогнать вот этот scanner tulpar да в Google был
Всем привет не могу разогнать вот этот scanner tulpar да в Google был тыц :) не помогло мне это...

как считать вот такое 10/3
как считать такую строку и разбить на числа? 10/3 a=input() a=10 a=3 ...

хочу что бы при нажатие на кнопку фотография обрезалась по определенно заданному формату,вот мой код
from tkinter import * from PIL import ImageTk, Image root = Tk ( ) root.geometry ('450x330') ...

подскажите пожалуйста. Вот код и мне надо сделать так ,чтобы добавление слова осуществлялось только на русском,а перевод
def start(): print('Выберите пункт меню, введя число: ') print('1 – Добавить новое...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru