From ed7214a0a3b3ea03faf93688f065af30c79311f3 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Mon, 13 May 2024 21:59:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B7=D0=B0=D1=89=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=20=D0=BE=D1=82=20=D1=80=D0=B0=D0=B7=D0=B2=D0=BB=D0=B5=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20=D0=B2=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=D0=B0=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 14 ++++ .../__pycache__/add_func.cpython-311.pyc | Bin 438 -> 2139 bytes 0.7_indev/__pycache__/dbtable.cpython-311.pyc | Bin 8247 -> 8788 bytes 0.7_indev/add_func.py | 46 +++++++++++++ 0.7_indev/dbtable.py | 7 ++ 0.7_indev/main.py | 52 +++++++------- .../__pycache__/cath_table.cpython-311.pyc | Bin 7166 -> 7169 bytes .../__pycache__/dish_table.cpython-311.pyc | Bin 14407 -> 18789 bytes 0.7_indev/tables/cath_table.py | 4 +- 0.7_indev/tables/dish_table.py | 65 +++++++++++++++++- 10 files changed, 158 insertions(+), 30 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 0.7_indev/add_func.py diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a68f818 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Используйте IntelliSense, чтобы узнать о возможных атрибутах. + // Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов. + // Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Отладчик Python: Подключить с помощью идентификатора процесса", + "type": "debugpy", + "request": "attach", + "processId": "${command:pickProcess}" + } + ] +} \ No newline at end of file diff --git a/0.7_indev/__pycache__/add_func.cpython-311.pyc b/0.7_indev/__pycache__/add_func.cpython-311.pyc index 9d04437b877b8aec015faf51df90798f560ab5a1..1b2fa6cca86830ef6e64504490fdea5e3ccd5c2d 100644 GIT binary patch literal 2139 zcmbtV+fN)-7(X+6f!!`{X}J{A#Icfwtx8Z+Ot29#Vrw)u5wxK$Znn$J*gzww}^DB5RHwiNtLU*+R1bWc{lrEEWWWm z7wclh`a)!^Sxx+8O^6M#EYkR05gBaY_O5kV%3146krsEvhGtz78?aatDQilkG;vp~ z(&=S8)B@C`LLIhgrxD1KI zDLA$!ttpwZ3rNyf6s&l)~%4C>DX z6DJ1ZCQr0M3AE*RhN3akh$Pwq4P9>qR9oc{+cgw6dItgy+f(d}T{avx(7_mY;ms!q z18Cf%<8QVGyCUJItr7er;@yOwAH=#fOMJc~IRFAk0zVqib68uD|fu z9)Al|9O$&4$N!)#GC?9sNCa)t5GP|zqP7hrK;2A(c{Ek1b)Yg0s3%Hf#MP2=Uz?5B!@Lt60~Y#zat_yqzZqvn9CN7<^bUu>E0x!yDF z&8i*`HmYhDz4K?UpPla5^dDL55dJ27f0pv=?%Z!~4>EN!)4trAYTc|oI_KN0tXX_! zp?*iqOHBSAa8J2hz0znjIlX)iOC+j?{RAyOGoTyPK(fy@# F{x9l)PwM~x literal 438 zcmZ3^%ge<81Yud`X;nb_F^B^LOi;#W5g=naLkdF*V-7TdcW>CCM3@Ot;vIONuh{(r>XB zB$kw<7UdO#3|3J1rRri86Ox*koDt&@9+Q)pWENwfXBuCUT3iy7n358oR+^WrS5SG2 zH?ufCxw0rezbHN>Grb5DMj&?=D*}lIh8ujU4eocj`KK~X;g})5K<%P{<`n_Wi`-gQ zxV0{@Xnh7M0=l<|6-a@#u4E|U2C+GT#4iq;-29Z%oK(9aULY6b!(w$H@qw9qgMIevdVoT1?Db39* z3IuVO$}@^=fs7)1AW_T)Box4)h#Mr!R$7pfSdv=B2lb#HgzpAYTfx9!$k4!WgD+$T z%Y6P>{1+uOuSjTK;0pnw4Qvp4hZ%%EQ3RncOx`G~Jb4eV_U6apri_ziL_!#yCl`vS zG5T(vA#$0KEgEQWQOx8*v3ACY$v?%k*kVBf&XYC8RTx7z`-z`sWQ_ufXijz%(PmA| z$pK3FNh(29C2TH}oWsPJIaydni7|SznT$VU+~hVHHO9cnYh_XxQ#T9AvNAFXPnM7i zl6L_a8w?^MKtw!ESeo%{$E|AIrdh!vI;9EmPUOpAOq*Dq#>yDXpeZo%g`Jd&i&acWYGQImj7NA( zPGXW-jDen6d`W6?$!15!Puwh;Y(+wo^X0@h`|&Pd-TXnMlabMBa+R1Gqub_%VwV}Y zLxE-&g@FjO$p=|PCQp{gV+@?kB&o#~4ia>lY$U0|=(jms@-!oB2v9_GvX_`PYhq3g zP%2zni4CkZYID8x945x3$ue?EjG>e5<@^~VCily!F$PTDCYQn(w^>@Am61_svZ6we zjWfvDAP^A=B4R;A0*J^45gZ_b7esJ_2v!)u31k$%o4iF~?c@T*I>v&@?-kYTGZ+~q RKQLe?KZ3=-;E)Ad0RZ2FRo(yq diff --git a/0.7_indev/add_func.py b/0.7_indev/add_func.py new file mode 100644 index 0000000..3c7293a --- /dev/null +++ b/0.7_indev/add_func.py @@ -0,0 +1,46 @@ +import re + +def validate_time_format(input_str): + """Функция проверки подходящего формата для ввода времени в interval + + Args: + input_str (str): входная строка для проверки + + Returns: + bool: Булевое значение, которое характеризует валидность вводимых строк + """ + # Регулярное выражение для проверки формата + pattern = r'^(\d+\s*hours?\s*)?(\d+\s*minutes?)$' + + # Проверка соответствия регулярному выражению + match = re.match(pattern, input_str) + + if match: + return True + + # Если формат некорректный, возвращаем False + return False + +def validate_input(prompt, min_value, max_value): + """Проверка ввода для выбора номера строки + + Args: + prompt (string): "Промт" или запрос пользователю + min_value (int): Нижняя граница, по умолчанию 0 + max_value (int): Верхняя граница + + Returns: + int: Либо число, введенное пользователем, либо -1 для выхода + """ + while True: + user_input = input(prompt) + try: + value = int(user_input) + if min_value <= value <= max_value and value != 0: + return value + elif value == 0: + return -1 + else: + print(f"Введенное значение должно быть в диапазоне от {min_value} до {max_value}") + except ValueError: + print("Введенное значение должно быть числом.") diff --git a/0.7_indev/dbtable.py b/0.7_indev/dbtable.py index 76b8670..d7b563a 100644 --- a/0.7_indev/dbtable.py +++ b/0.7_indev/dbtable.py @@ -67,6 +67,13 @@ class DbTable: self.dbconn.conn.rollback() return + def update(self, column, values, wh): + sql = f"UPDATE {self.table_name()} SET {column} = {values} WHERE id = {wh};" + cur = self.dbconn.conn.cursor() + cur.execute(sql) + self.dbconn.conn.commit() + return + def first(self): sql = "SELECT * FROM " + self.table_name() sql += " ORDER BY " diff --git a/0.7_indev/main.py b/0.7_indev/main.py index db3398c..4ef2666 100644 --- a/0.7_indev/main.py +++ b/0.7_indev/main.py @@ -82,7 +82,7 @@ class Main: menu = texts.show_cath_1txt print(menu) lst = CathTable().all() - self.max_index = (len(lst)+1) + self.max_cath_index = (len(lst)+1) for i in lst: self.cath_arr.append(str(i[0])) @@ -97,14 +97,10 @@ class Main: """Выбор действий после вывода категорий """ while True: - if next_step == "4": - x = int(input('Введите номер удаляемой категории(0 - для отмены): ')) - while (x==0)or(x<1 or x>self.max_index): - if (x == 0): - return "1" - elif(x<1 or x>self.max_index): - x = int(input('Вы вышли за пределы таблицы, повторите ввод (0 - для отмены):')) - CathTable().delete(self.cath_arr[x-1]) + if next_step == "4": # Удаление категории + x = add_func.validate_input('Введите номер удаляемой категории (0 - для отмены): ', 0, self.max_cath_index) + if(x!=0): + CathTable().delete(self.cath_arr[int(x)-1]) return "1" elif next_step == "6": #Добавление блюда в категорию @@ -112,24 +108,30 @@ class Main: next_step = "5" elif next_step == "7":#Удаление блюда из категории - x = int(input('Введите номер удаляемого блюда (0 - для отмены): ')) - if(x==0): - pass + x = add_func.validate_input('Введите номер удаляемого блюда (0 - для отмены): ', 0, self.max_index) + if(x!=0): + DishTable().delete(self.dish_arr[int(x)-1][0]) else: - DishTable().delete(self.dish_arr[x-1][0]) + return "1" next_step = "5" elif next_step == "5": next_step = self.show_dish_in_cath() - elif next_step == "8": - x = int(input('Выберите номер категории для изменения (0 - для отмены): ')) - if(x==0): - pass - else: - CathTable().cath_update(self.cath_arr[x-1]) + elif next_step == "8": # Обновление названия категории + x = add_func.validate_input('Введите номер обновляемой категории (0 - для отмены): ', 0, self.max_cath_index) + if(x!=0): + CathTable().cath_update(self.cath_arr[int(x)-1]) return "1" - + + elif next_step == "u": + x = add_func.validate_input('Введите номер изменяемого блюда (0 - для отмены): ', 0, self.max_index) + if(x!=0): + DishTable().update_dish(self.dish_arr[int(x)-1][0]) + else: + return "1" + + elif next_step != "0" and next_step != "9" and next_step != "3": print("Выбрано неверное число! Повторите ввод!") return "1" @@ -162,13 +164,13 @@ class Main: self.dish_arr = [] if self.cath_id == -1: while True: - x = int(input('Выберите номер интересуемой категории (0 - отмена): ')) - if(x==0): - return - else: + x = add_func.validate_input('Выберите номер интересуемой категории (0 - отмена): ', 0, self.max_cath_index) + if(x!=0): self.cath_id = CathTable().find_by_name(self.cath_arr[x-1]) self.cath_obj = self.cath_arr[x-1] - + else: + return "1" + print("Выбрана категория: " + self.cath_obj) print("Блюда:") diff --git a/0.7_indev/tables/__pycache__/cath_table.cpython-311.pyc b/0.7_indev/tables/__pycache__/cath_table.cpython-311.pyc index e4e955fe0282f4b1c18eef6ed012074c438689e9..6cebb9d148c28118f87463f133bb837eaa1815f0 100644 GIT binary patch delta 180 zcmexo-e|$QoR^o20SHW8oYIzVAOGz!; z?93R=!dJox(f|Q9Op_Bhjro}*VFC=bEHx~X-?94ev*ctJm)zn=OD##x$j?ii?8z3# z7&3VUn}z&cKA{Q5(`_c%OthO~cacx&3ZK#f!z+BM9n3fQg*v!4|7Ek`W>np5CG?Pk QTlfP5J1c~ktR{T}0EA{SFaQ7m delta 172 zcmZp)_-D?$oR^o20SHd1I;Ab!$ScDrrRQQ56Ox*koDt&@9+Q)pWENwfXBJ5`Ud8-vQQvN|2)ixOo_V4zcYbW3kDCheA z{GHc#e&2V#^SIw0ygz}opJ_Bo3ex2@EqmmzjBBmy>L7QXVks64QeEVq9z;73O>Ll9 z$@>&5?WeCuDC!!#$+Sbl(w&rD_JCyVXa-eo9^Y+7Z;c;r)4xycP_rsP4XcJWn(=!F z@|L$Yc6ar=`u29WzuP_N>Rr{nqPD>~;9>iR@kZ2uGNLC?H9|`K1^suF6+JC!p^+K8 z6~)m9vJ*5ainw+>sw$q%P68HFH2B2}^O7$|gT1 z^-IDsBEE?zp9UJHl3#iSfj#gh6Y!)rA1Ui>>u6io#jpe3y-ts7e?PN+>y|ggEc0%A z+txN_fMwP&_6%I5&IxdvhLL7Gt#wa(t3I0x7x zrdAlI%hfyBU;CuAiFDcpFiOR>O%aaQHo8+1Rpml15NWoGgy!z}A5l5OzrJue?vD!@uvBJ?;kf`1`Da=#)W>3%r7)>uL7m^-es zgzC=*#sYCmZqR!_k4aFJt(SgCQTcuJBN2m&L?#8zmg@dkO_}p>&|I0B9WqX<@_AK0 z{>JREi1PxYlO%^%4B;Iz{JMs*L5z}YD)~t0q!LRfrvU$4XKp!0`)O9<7MliXZUl1D zWX`JwS(cLJAj^|7SD3CC|5=-hujsU8$LJvKX%-cT#Da)Bmo~1#PlY99F3M4Q5RkQ& zUP8hmx$bh=%vAiX_mPE>O7qn?qSdLCZYe4D7W*{#kkm?tGsq~}i{gQMIN#}wd7Yd! zjiBmT67#VMk*w*YJblmO5J+)Yq*42$8q3l`S(n}(Ch_Ts)2G)yy>=jc3Bh>_7rYj^ z_B_V(UW@QA^jhR0%$fqWJyU?q@=N?Eee*_?=XYY9h*QpSX?zWf_`-r@jSIVpaegi- zYM*$7ko@A!6m}D7Y7TZ$NgH2w2-r?uYKVwq-okfSlV7@og|CRwpR}+xZTRd(7Rvmx z^oW^P9bnCV*|Vxa@xtPZ46{@xoR@HZST+xR1kT_;%xcp@A*k#l%En#k~TMlQQ;IHc$nKPI2L53dZ>Rf&;hLcl_d3APVQkLYiQ|SM zHMf=&wvfWh`133$mKrKZMG3c#RJ0PX5NIPne8gD+hI|0{uSQ>h%K^!*;x@wHjAX#$ zl4N|fRz%CarDl-}44QGIzK_fE?Pyb=@vXhj^ zK?%1MDBJJy47moq4ZM~_4VS>qux;24_I>Vk%|{b%~)x_~}deAYMS3mys; zPxykq(4lbg1z*TFYqDG-dWw8RPtFkO3kY)dFp&X+XdKOD8G>skOyj26Jccjsx!3yb zmOpIayLJk#-LckgD1o1l=Zxh!gNnGN==|}Cn!jg+(5t6Rp3?G zTH=F*jmpYCubNPWHeIzw8U%e)Oy9(dztkiI$s~YFY@$o@MVA1AF1rs{IJ<#~YT1 z%t;B?{t+1mD(Z8+uMuxQb{HpdkamRU^G$UUsoS#500WAUYp_AN& z$W}!55AQ9U(J)dgm*pj>1<;qtAOsfREmSFMN>B^XgMZdw)7z!6S@rtJN0PXW;jbGi qlqW$Y`9AUP!2fPAcf={(sQ4tLBQ(+_sHHKO@ldRJ^qhK;{Qm);6;!4G delta 741 zcmZ{hUr5tY6vywmzwI}j)0u0V{30_g|EzSHwRF0sqBz86Yv#(PW7}_GC{%8e!OWz8 zVpQrW6fDvgqa}(0WVKy z+)q!}5+!_}YfqR8#xt@#7NwdbGLfN|v=K_0h)gdLS%|=#K*+pu*Q0~VDlaKkukx}O zR=^TYDr*lUi?0pi7aI9s+W7J*skFiFZ;J%O-F}zP-y00s{AH!KKr9lCVF31n$R=So zKq|hVZy=LR3-uI?IGnPb{Z!e_4i4hQvKeS)JIYM}Ev$Nv8Nh?yic#?5hl(L^v#z~46prAaEe?m- z58Ez)PAsUrqUet*gWyJeRktD!RLw#VCHq4N;G+GSve#41#8$;!Ungp7E{knEJ%qPw zM#OfW9>sje6!`F|V*!p~&w&}SgSR8N$$1lw ')) + while(x!=-1): + if(x!=1 or x!=2 or x!=3): + x = int(input('Введите корректное число из списка (-1 - для выхода)\n\ + 1 - Название\n2 - Время приготовления\n3 - Инструкция\n=> ')) + elif(x==1): + new_name = input(f"Текущее название {self.name_by_id(dish_id)}") + while (new_name.strip() == '')or(len(new_name.strip()) > 32)\ + or(DishTable().check_by_name(new_name)): + if(new_name.strip() == ''): + new_name = input("Пустая строка. Повторите ввод! Укажите название блюда (0 - отмена): ") + if new_name == "0": + return "1" + + elif(len(new_name.strip()) > 32): + new_name = input("Слишком длинная строка. Повторите ввод!\ + Укажите название блюда (0 - отмена): ") + if new_name == "0": + return "1" + else: + print('Такое блюдо уже существует') + new_name = input("Повторите ввод! Укажите название блюда (0 - отмена): ") + if new_name == "0": + return "1" + self.update('dish_name', new_name, dish_id) + + elif(x==2): + new_time = input(f'Введите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ') + while(new_time==0)or(add_func.validate_time_format(new_time)): + if new_time == "0": + return "1" + else: + new_time = input('Введите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ') + self.update('cook_time', new_time, dish_id) + + elif(x==3): + new_manual = input(f'Введите краткую инструкцию приготовления блюда (1 - для отмены): ') + if new_manual == "0": + return "1" + self.update('manual', new_manual, dish_id) + + + def example_insert(self): self.insert_one([1, "10 minutes", "Яичница", "Взбить яйца, нарезать помидоры, обжарить их вместе."])