From 8ac2a7b7093e72c8c9c91eb246f8ceef9e13b9c8 Mon Sep 17 00:00:00 2001 From: meldanil <111883970+meldanil@users.noreply.github.com> Date: Mon, 30 Jan 2023 16:49:16 +0100 Subject: [PATCH 1/4] Home work week 3 Melnikov. --- ##1_w3_melnikov.py | 30 ++++++++++++ ##2_w3_melnikov.py | 12 +++++ ##3_w3_melnikov.py | 21 ++++++++ #Bon1_w3_melikov.py | 18 +++++++ #Bon2_w3_melnikov.py | 18 +++++++ .DS_Store | Bin 0 -> 6148 bytes password_creator_melnikov.zip | Bin 0 -> 5866 bytes password_creator_melnikov/.DS_Store | Bin 0 -> 6148 bytes .../__pycache__/passfunc.cpython-310.pyc | Bin 0 -> 1414 bytes password_creator_melnikov/creator.py | 46 ++++++++++++++++++ password_creator_melnikov/passfunc.py | 28 +++++++++++ 11 files changed, 173 insertions(+) create mode 100644 ##1_w3_melnikov.py create mode 100644 ##2_w3_melnikov.py create mode 100644 ##3_w3_melnikov.py create mode 100644 #Bon1_w3_melikov.py create mode 100644 #Bon2_w3_melnikov.py create mode 100644 .DS_Store create mode 100644 password_creator_melnikov.zip create mode 100644 password_creator_melnikov/.DS_Store create mode 100644 password_creator_melnikov/__pycache__/passfunc.cpython-310.pyc create mode 100644 password_creator_melnikov/creator.py create mode 100644 password_creator_melnikov/passfunc.py diff --git a/##1_w3_melnikov.py b/##1_w3_melnikov.py new file mode 100644 index 0000000..6e6d0af --- /dev/null +++ b/##1_w3_melnikov.py @@ -0,0 +1,30 @@ +# ## Assignment 1 + +# Write a Python function that prints out the first n rows of Pascal's triangle. +# Note : Pascal's triangle is an arithmetic and geometric figure first imagined by Blaise Pascal. +# Sample Pascal's triangle : +# ![pascal-traingle](https://user-images.githubusercontent.com/45574672/215293769-36573e97-fb93-4ed9-8574-17db7ee04cb7.png) +# Pascal's triangle +# Each number is the two numbers above it added together + +def pascal_triangle(s): + '''Returns n's row in Pascal's triangle + Print included function''' + + #create triangle as nested list of numbers + l, triangle = [1], [[1]] + for _ in range(s): + l = [a + b for a, b in zip([*l, 0], [0, *l])] + triangle.append(l) + + # define base of triangle + basis = len(' '.join(map(str, triangle[-1]))) + for i in triangle: + print(' '.join(map(str, i)).center(basis)) + # print(.center(basis)) + +#call the function +n = int(input('How many rows? ')) - 1 +pascal_triangle(n) + + diff --git a/##2_w3_melnikov.py b/##2_w3_melnikov.py new file mode 100644 index 0000000..ad4da80 --- /dev/null +++ b/##2_w3_melnikov.py @@ -0,0 +1,12 @@ +## Assignment 2 +# Write a Python program that accepts a hyphen-separated sequence of words +# as input and prints the words in a hyphen-separated sequence after sorting them alphabetically. +# Sample Items : green-red-yellow-black-white +# Expected Result : black-green-red-white-yellow + +def alphaSort(string): + '''Returns the words in a hyphen-separated sequence after sorting them alphabetically''' + return '-'.join(sorted(string.split("-"))) + +string = input('Enter your string here... ') +print(alphaSort(string)) \ No newline at end of file diff --git a/##3_w3_melnikov.py b/##3_w3_melnikov.py new file mode 100644 index 0000000..7c0aa21 --- /dev/null +++ b/##3_w3_melnikov.py @@ -0,0 +1,21 @@ +# ## Assignment 3 +# Write a Python function to check whether a number is perfect or not. +# According to [Wikipedia](https://en.wikipedia.org/wiki/Perfect_number) : +# In number theory, a perfect number is a positive integer that is equal to the sum of its proper positive divisors, +# that is, the sum of its positive divisors excluding the number itself (also known as its aliquot sum). +# Equivalently, a perfect number is a number that is half the sum of all of its positive divisors (including itself). +# Example : The first perfect number is 6, because 1, 2, and 3 are its proper positive divisors, and 1 + 2 + 3 = 6. +# Equivalently, the number 6 is equal to half the sum of all its positive divisors: ( 1 + 2 + 3 + 6 ) / 2 = 6. +# The next perfect number is 28 = 1 + 2 + 4 + 7 + 14. This is followed by the perfect numbers 496 and 8128. + +def perfect_number(number): + '''Check if the integer number is perfect and returns bolean''' + sum = 0 + for i in range(1, number): + if number % i == 0: + sum += i + return ('NOT PERFECT', 'PERFECT')[sum == number] + +#call the function with integer input +num = int(input('Number ')) +print(perfect_number(num)) \ No newline at end of file diff --git a/#Bon1_w3_melikov.py b/#Bon1_w3_melikov.py new file mode 100644 index 0000000..f287d15 --- /dev/null +++ b/#Bon1_w3_melikov.py @@ -0,0 +1,18 @@ +# Write a Python program to sort a list of dictionaries using Lambda. +# Original list of dictionaries : +# [{'make': 'Nokia', 'model': 216, 'color': 'Black'}, +# {'make': 'Mi Max', 'model': '2', 'color': 'Gold'}, +# {'make': 'Samsung', 'model': 7, 'color': 'Blue'}] + +# Sorting the List of dictionaries : +# [{'make': 'Nokia', 'model': 216, 'color': 'Black'}, +# {'make': 'Samsung', 'model': 7, 'color': 'Blue'}, +# {'make': 'Mi Max', 'model': '2', 'color': 'Gold'}] + + +original = [{'make': 'Nokia', 'model': 216, 'color': 'Black'}, + {'make': 'Mi Max', 'model': '2', 'color': 'Gold'}, + {'make': 'Samsung', 'model': 7, 'color': 'Blue'}] + +original.sort(key=lambda x: x['color']) +print(*original, sep='\n') diff --git a/#Bon2_w3_melnikov.py b/#Bon2_w3_melnikov.py new file mode 100644 index 0000000..be64a00 --- /dev/null +++ b/#Bon2_w3_melnikov.py @@ -0,0 +1,18 @@ +### Bonus 2 +# Write a Python program to filter a list of integers using Lambda. + +# Original list of integers: +# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + +# Even numbers from the said list: +# [2, 4, 6, 8, 10] + +# Odd numbers from the said list: +# [1, 3, 5, 7, 9] + +original = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +even = list(filter(lambda x: not x%2, original)) +odd = list(filter(lambda x: x%2, original)) + +print(even) +print(odd) \ No newline at end of file diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..540d82a3f3dcece2b764c35cd52c88897a73f857 GIT binary patch literal 6148 zcmeHKyH3ME5S)b+k!Vte?tXzkI7P`9@Bw+50%0&pfVA%N+srej zmZ$J$0m$sVxdSEu#!N*Vbs2`<*Br!EFhXSVi~~CC&|rz}p!$14wYPZ18hidu^*cO} zeX|pnc;>Ff3m)-A=A+qf+fCQCD$hs<(t&g!9Y_b#feRdn<~hE(K$E5EKsxY09MJDW zVJgX>UfkPe(XaP8ZP_WuR*hxz|pl)H2w9r#lY$Y_2)pYfHVw+>!Tdu?H^ sm|wwKE9YXZm}sq-8*RnYle(hUyk7%*N0XB`IWhkTs4p4mz;8J437#VxKL7v# literal 0 HcmV?d00001 diff --git a/password_creator_melnikov.zip b/password_creator_melnikov.zip new file mode 100644 index 0000000000000000000000000000000000000000..b9d9129305cd9bc2a67410852364bf242595b75c GIT binary patch literal 5866 zcmb_g2T+sE)=mr^>0Lw+0w^_fK`Eh!8Ug7LBocau(EaFLN|2&71q1;J0s;z(3W$pI zjub&4(z}2taudJHC*!?3_n-OC%)V#e>^uAHo;`cclLOZV5itS?vK6Rc{G;>l$0-08 zz~id7x1YP$H3ZVj?y8Tw7sA!f#m&*#9W8prhzdZu*f)$kYQFxI03gw4AOP@VKKPG$ z$pB=4q41yc60rgRJb#>5MAZ;sh)1&f0q|;S7+GC3ge2%+09LZ(DVmjNqdv590kegL zcPS=q=;Xs#Xm8}+xxdm@+EW=2K!#EH-oZaF=$ zmkz1DxXZ~^FUrP+hZ8zc6Y|Ch#dXQTNh34s>d$DE$Pxid##IA*KYM&wot0zw!*|KS7I@+jTo#0s5?!!dwu?J#%at;kItsF+t zDkjdQjb2N%Q0Xas}>`w405UdvgDF=sB!nH}sT60~x2k=Kg zFx7uIqCb9A1aCwHLKmu{Z)hs|`%@A@{HHw!@wOziU+jsrVM5y5*xIb?>KL!n7{|gx zPo%Jd_-WaJRqV78drV3l0K;jn7ongF(UC;ZTTBqEdBOro$tYuAT#&*qiLk7n3nodI z|HqqTNdW-vKc2daJJMOi!_EH3p$AtEAw%$upnq8;P?of9FAlD!K}B(j0*^-p(^NIU z>ppy2Cj;T1$~^75cohWKF;Y7`Jj8b!8XBgjr*Syk#>U3N!ot_DU(smv=;&x|ZLN}$ z5*HVjxw$zV9o_2cYEDj0Utb>vgNcZU(AU?eq@;9kaBz2b9~>ME2??>bwr+24=jZ2d zX=$OSr?k6nA8o%;d3 zW$fI%~9t-Zn4>n*RTw@Zs9ZJCAQI!=ex zatli{f!N?PZCGb3r66PD?(|n}zMY>VVN&uR5=pS-m3>xbWbOV6k26yEm(3{Jvp6l^ z?eS>Q5rrhYZ^+op2V(9dn!T>QE!rklP#{{2B_<}dgd#fl^@wjI&&Qj)AsA7j4R&iC z`TjPud22yyCA!bq)kkRxy0kBvQE_@Wj_DCa<@=TS=F~Or=cC6KHoB6nB%Aa+(*sxT z@9p-Y&A%!6UmJfYT-LSt66$O)t9B#n;y~%tMusP_pnuY(RNpv+3Rl@%;3Ln6V66eb4=^{G|HoM?0qFxl?t6iAaMAZXEalqT z1@AdB-@E3`DUn#K2UV1^P84Soa{Z*Dgf|j;i6j&@w4W3#Xi~;|Nn%?ss>wp{kkh7} z>uci2h+>OJQ>iL7?%kJH6La#uV92aOX5NVr_vrfop!Ka8jB_Aa!+=X}&5f=v7wDX6%La)U6ux2Q0 zfm()$yul1T{Q9090?F~7Frdhn4$qF}mth;crIqCNHsMhAp$hVz5Vc!AZlRYyK0HOF zP6|OudfZD2Fg%%4a+OiPAIeFhHxRhPH|-xInW#X$ExIDy{FwG@6YqS=ST|6KagORP zh8KvTuG_IOM7jI5?@89wk~Y%kiGG84boQfJV?+eCc;5lp<6YfJpi~91o?@?qIrK7c zB5y)!D7dCjY}w(WxxO?VGF8|{7kjSa$9qisdBcQ!oXd32agzuv$_KsT$4-&&*4TUqH7i{&E*JoXy zu(dF0^mlm@V^YdYGfIMmm!-7^Rp>1r)`%O^!0r#y!i-|U(iT#s(V7Ly;HuFwn3O6# z6L(yvv2NK}%zavzOP!MeRjO)~rftoYG^bdwfGT}<#cd-M@a40Z5tqTDQ`~VBsYLTR z#$qFKml1h0g9}~zo>@0F;pQyraRKB3iK*7TYx4XRe6oVVFqq~7P|DExj-EEu+@qDf>i z%IxN*adD)JzJqZhp!pM|jGAhuF={&+0h^VC_?d$W>wXJ4C5Q z8mbtYSTH9oOo0m%tOWiNs<{bFodt2fCB+Y1NF9KEe8;O7>m_(0h4H&}PBoXA;#B5M zZ5CMSn^-IQSThDm1vHFHS=Zw-O+7f}Z7jDiYdx6P?6P><-}oN1Gt4n{T(wr$7>*wU zRC7Eh@%&CBKg=XVqq%&B)Ub#CS-a#dU=6EYx@DUE@D-srjC1wG)5JRyZF8=j=4LI` zOQ>CHNg>kBUAp0@C373E12QQ{zJFSv;l6~IB%jRT2aQ@Wp4QH`%;<6N)U7Ake(dBU zIaB;v<{8*U)__-Lnd;3;RhI_I+Mg=9yT3KRHA6Wu(1P>3{yeRr$a_DwJI_+K{$gbb z$S!b~X7-*HCvZb@AD;jLFf~0@tg=lwAzL?%@cSy@^D!YO|DCM~UoeIJr4%2o-YPRG)&0B|7v{>VyZ`1=YVO zi|y*#^^m^w_IzaTH)RWKWms5vo)TS$gGQct%6Vy_Fx`mmdN)zv_qdc ztp<17l9U9U3Q;|2n_3#%dj$t0%ER1C*wV6gq4F(DaJxgPR@#ULy(9g*-ZL>1L#0`= zsM5|DidmE4&wjI0u8*F59qhuKO|q1ccANXFYR1JuK)N;fTE|Y!`9SkC6GCL)haQWc z?9xuuTP@(0P<#cAD0;%1sMYL)sbMj@V*Ac^TEVUSoW7E~dJFhPvJvm1C7a-CBb7|c zP_4+>&rADPdAdd^p&|?|#wZH4_gRLr=XBW3@8c?0$J)?lCg4OwoCwn`7b;_KxJyo_ zN#BROy%0;JhLf57rPVNNofbj=VafH)ebc&;<}v$&ge>OC*+=wpQCDdncZ{bz3VGbP zbX^XaA9fg^>@y%@>Nbr#zv7TMwPx>E`+_gZJN|9#Lpp|xbJ@6Q^Fh5^gWrGz*L;U; zo^1sJ00igw={By%+-8p$0095dZT|f~<;ZIeKMW&*c#k3IU%V#QNIN+jLff<@_@EP5 zs7_Wrc1FO{aUgF8UMu+7z|qbIAlRl}XBJ-eeK$#r=zS4QI_OkTQ$UCWauTg&VXJRx z-V@2j2wD}rh|(E+*F1r~0(Ts=4wWb(Mw(JRkt2nYGo2?A)r0rVyDF_)3|2V~ys*1B zADnq*+7NV#Oy-)=Grs66kf_r)Mc$ggntZQVMi6xhT@s}bP#UTWScTg;GKToQDO^-< z7M}Ln;Wh<&vJ!`#mkb57;W!j?9T-jBh^IycKQ3stBx{cplAzMn``O?TPA?ZzqiJAX z3gi6u-=~JZWdYlH1?5~@+z1k1?~@)4!7Rf-Pu*O0b zIg53(sC)&yWp;k7lVVVtom&jsV}F`Xzd2}O#9H&Q)>5awqweUkQ)@<$xR{yakn+R$ z$pupWF1^AV(jqtKE#ht(KV6lA3wf_wX&=UF*I%H~sn@mC%~ZF(5EyCx9;f^zw{nHr z`J$?Kha^@?wA5H7n*7U%o;Y*8a|fh7(9xow^~|eWG|NbfGhJ zmM4dbzS_{?Pb4YG3{p3$QEYj=@;N$foavht@sT+pp##J zx@0U{C)6)ZM<$xmKA(Sm#m*<7PFTcMTCr;Dl+hme+O%xW@K&gr+a&}h4^hL+NqyHy zqmYx}@1CcLDXyOY00>_F)8CJW;&l9o!XN$pcqslSWFkERd>q`}geAlv_=|x25kCo` z`P}4x4bi?v+U^Wuv~|z2J28EIq~U%2X8`97#*98T-z`fqCpzs<7MWsv$Dt98ag{+o zd={d*Kn{M)y#ad9^PJ3)mpaz4d;Egf44>;jC{K6b(V>MeZ{5{MS11x zsoD`Qg8}{HBrW76vT>zB)gv>BL7cEDNxC+B_^f7GN8;qH6dL_d3n+~ z@up+3IoNmsWil&1b|q+4w>)LRY3<>Iiik7PS0*OggmCe3qL}Zwbt%gH#*!M4@}(zQ zY2z*rtaJ86?QZDhwq5_OD(|PWsDmVa_43vx3!@ZsIyU@Piy9f~#1MP)?a@?>foixe?PtWdluqx^Ubo_)a{-$KaLO{pH27Yi-!Ukd8;{&J z%-T7b)sug3&jKZ7Ubrvk^s4RAX0*xFjfMjT$IHX{ccZ9VuOBGISS@hW0KE@p6|-qi z+gU25Z1kzcc2nEx`1hRd?~y?6_v2*BSor1;r>r~Z@1NnNk{rEy-?} z#9EXJ6!}6w3Vvd>-*C&(mQ`fKF;_QtXTYJ`i_p_b0Bpl4!G|Xk2iHXlD$gd)pqFym z@0C*wH)3a`;ffI*&0Ixy{d{qvge&Tx^|hA;pN!2fgA z={Po_WOSUK5=ur#5*nt5kCeYR>i=3mI>IB&dpyz--U+1lNLHZV$p3_QJnsGzUw=!1 z|8^Y0ff7jYah^jU!ADXQW`nP3{eF*xk^hkrA8nHWNgz3p3{6x-u(7n9D|mxJ^aNf&R_z1@wXoaDb9pphJ_xef2sZKp$(zaK&9bl9 zY(zxom+eesA|fNWq1-HV&Cbm`*2|0n;kcub-S)KEH;2Q%Q~f?++@T!hDrdQT!GC`% zvs8czPys4H1*pI$1+4eNM&m$6DnJFOz*7PHJ`}iNO>6`G(}Cb40C0e`8`eHc0E;Dn zHL(pu2Btv;232#!(4Zq;|JK!^z#_27?4jL9TsGfca?1GDYgcKDU$ z1c_cv`~%>~A7o7Cs9rdG^W=M7R#wrHzV>zJeSP28_fQiPH3H-N*DvX3kC1QZj1C6Q zLzw0c7*06NNle|!VvjTK9g*1QKCi%9;dGtUgERP&JWnYu=c58^0CN?l*#%=spB&Ny zz~k(QSh~s9(5D{E?G#+R6NwLvb&4K@eg_nDfqFi{Uc#(^RH$rUPZw!@b zrdlLc>1J2tGTTzy?w3{})5YFiSz87@Y^u7wl_|^>6Q3pfciTb=omkNv!YnT5Dot{; z0-IsPe<^E(sngicpQ;y*Nu6n|pg0&Pe?d`WQRym}Y21WhF2O=oJ0%UK=#=zP$$^3w zQ0I4)e%eX&#qq@rGZ1btwJCCjm}j^@!*?s8tV%DFwq(YZfqMoMPb4PIvgUcQ#N#~> z%@&Exlq@}+$T%=bx0j2!YC1)$m5b8fRGF+-N}ws*wxcoOxH<%=VPZ*&l^2IYVgE|B zoW3OeIDnW*Frhz1@o%2hXpQRYaFim2;XqDUJGh$LVBV7!b^RGy=uqs}LptcnKGvT1 zXNw~gKGHP|A1zu8{@{W~BnP!I0gZ_bm8Z>9sxf>(>i5&m;SoOV{=G}=%)crN`k?{> zx5WV7D=Vogq;=Tw*ibq%xaJ0;<6Y&QjwgJ%|Iq=Blf)OM)Uvx literal 0 HcmV?d00001 diff --git a/password_creator_melnikov/creator.py b/password_creator_melnikov/creator.py new file mode 100644 index 0000000..35aed3f --- /dev/null +++ b/password_creator_melnikov/creator.py @@ -0,0 +1,46 @@ +import tkinter as tk +import passfunc as pf +from tkinter import messagebox + +def clicked(): + messagebox.showinfo(message=f'There is your safe password \n {pf.generate_password(length_p.get())} \n Copy it in the safe place.') + +screen = tk.Tk() +title = screen.title('Password Creator') +screen.geometry('400x230') +# canvas = tk.Canvas(screen, width=300, height=500) +# canvas.pack() + + +#label +label = tk.Label(screen, text='The password will contain uppercase \n and lowercase Latin letters as well \n as numbers and symbols.', font=('Roboto', 14)) +label.pack(padx=20, pady=30) + + +#greed with inputs, labelframe +labelframe = tk.Frame(screen) +labelframe.columnconfigure(0, weight=1) +labelframe.columnconfigure(1, weight=1) + +label1 = tk.Label(labelframe, text='Password Legnth', font=("Roboto", 12)) +label1.grid(row=0, column=0, sticky=tk.W+tk.E) + +length_p = tk.Entry(labelframe, font=('Roboto', 12), width=10) +length_p.grid(row=0, column=1, sticky=tk.W+tk.E) + + +# label2 = tk.Label(labelframe, text='Password count', font=('Roboto', 12)) +# label2.grid(row=1, column=0, sticky=tk.W+tk.E) + +# count = tk.Entry(labelframe, font=('Roboto', 12), width=10) +# count.grid(row=1, column=1, sticky=tk.W+tk.E) + +labelframe.pack() + +#button frame +buttonframe = tk.Frame(screen) +submit_button = tk.Button(buttonframe, text='Submit', font=('Roboto', 14), command=clicked) +submit_button.pack(fill='x', pady=20) +buttonframe.pack() + +screen.mainloop() \ No newline at end of file diff --git a/password_creator_melnikov/passfunc.py b/password_creator_melnikov/passfunc.py new file mode 100644 index 0000000..43f3988 --- /dev/null +++ b/password_creator_melnikov/passfunc.py @@ -0,0 +1,28 @@ +# ## Assignment 4 + +# Create a user interface that generates a random password with the given user input such as length, +# number of lowercase letters and uppercase letters and adding special characters(!,?, .,etc.) + + +import random as ran +import string as st + + +def generate_password(length): + '''Returns a password consisting of lowercase and uppercase English letters, + numbers and symbols, except for those easily confused with each other''' + + length = int(length) + digits = [digit for digit in st.digits if digit not in '0'] + letters = [letter for letter in st.ascii_letters if letter not in 'lIoO'] + characters = [char for char in st.punctuation] + + password = ran.sample(letters, int(length - 3)) + ran.sample(digits, 2) + ran.sample(characters, 1) + ran.shuffle(password) + return "".join(password) + + +def generate_passwords(count, length): + passwords = [generate_password(int(length)) for _ in range(int(count))] + return passwords + From e27f70d128d3216c5c9003ceacec3674909983dc Mon Sep 17 00:00:00 2001 From: meldanil <111883970+meldanil@users.noreply.github.com> Date: Mon, 30 Jan 2023 18:20:47 +0100 Subject: [PATCH 2/4] Changes made to the password generator to make it more relevant. --- password_creator_melnikov/creator.py | 30 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/password_creator_melnikov/creator.py b/password_creator_melnikov/creator.py index 35aed3f..b0e063a 100644 --- a/password_creator_melnikov/creator.py +++ b/password_creator_melnikov/creator.py @@ -2,14 +2,18 @@ import passfunc as pf from tkinter import messagebox +def getint(x): + return int(x.get()) + def clicked(): - messagebox.showinfo(message=f'There is your safe password \n {pf.generate_password(length_p.get())} \n Copy it in the safe place.') + messagebox.showinfo( + message=f'''There is your safe password \n \ + {pf.generate_password(getint(length_p), numlet=getint(number_let), char=chk_char.get())} \n \ + Copy it in the safe place.''') screen = tk.Tk() title = screen.title('Password Creator') -screen.geometry('400x230') -# canvas = tk.Canvas(screen, width=300, height=500) -# canvas.pack() +screen.geometry('400x270') #label @@ -28,19 +32,25 @@ def clicked(): length_p = tk.Entry(labelframe, font=('Roboto', 12), width=10) length_p.grid(row=0, column=1, sticky=tk.W+tk.E) +label2 = tk.Label(labelframe, text='Number of letters', font=('Roboto', 12)) +label2.grid(row=1, column=0, sticky=tk.W+tk.E) -# label2 = tk.Label(labelframe, text='Password count', font=('Roboto', 12)) -# label2.grid(row=1, column=0, sticky=tk.W+tk.E) - -# count = tk.Entry(labelframe, font=('Roboto', 12), width=10) -# count.grid(row=1, column=1, sticky=tk.W+tk.E) +number_let = tk.Entry(labelframe, font=('Roboto', 12), width=10) +number_let.grid(row=1, column=1, sticky=tk.W+tk.E) +chk_char = tk.BooleanVar() +chk_char.set(True) +ischaruse = tk.Checkbutton(labelframe, text='Use special characters', var=chk_char) +ischaruse.grid(row=2, column=1) labelframe.pack() #button frame buttonframe = tk.Frame(screen) + submit_button = tk.Button(buttonframe, text='Submit', font=('Roboto', 14), command=clicked) -submit_button.pack(fill='x', pady=20) +submit_button.config(height= 20, width=26) +submit_button.pack(pady=20) + buttonframe.pack() screen.mainloop() \ No newline at end of file From 3cf13258c837c00846efe6c8c8248dfb68e3b9eb Mon Sep 17 00:00:00 2001 From: meldanil <111883970+meldanil@users.noreply.github.com> Date: Mon, 30 Jan 2023 18:24:47 +0100 Subject: [PATCH 3/4] Changes made to the password generator to make it more relevant to the task --- .../__pycache__/passfunc.cpython-310.pyc | Bin 1414 -> 1474 bytes password_creator_melnikov/passfunc.py | 10 ++++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/password_creator_melnikov/__pycache__/passfunc.cpython-310.pyc b/password_creator_melnikov/__pycache__/passfunc.cpython-310.pyc index 112b2bcfbca98018d51eab417178f108ac7dbb0d..c187f1ecdf6b1a1d27a599b25cb2b5d8eca2901b 100644 GIT binary patch delta 735 zcmZuvF^dyH6n<}Jc6O6oG#=rM3MvQ(=|oUbL=LpE(c*%|Hb=-TIW^fmW;WPtNMW#- zt+bF!slUO>TCfzi6RT@Qu=Ty!+;NDr%$xVU_sx6n+uhf#&#gt)Za0C}+uz?tPZhvV z2B()KutVEzlQCd$0x|ki#L`4YnP7>rGTMYohy#PW&~F?O7aku`Js6C*!tn~p;r)QN zdk3(9913`ab1H1a5^{Vl9x|3juCer3QKLGqJPz{UP#3Dem6+>7nBax5cM9#Jfzd1B zJy}43JutclD{&rf!(6A$HOuENbArP}4-36Q1QQ-c?2(S>&95Iipiym5e#cLDSxKM7 zP99}XEXVu8YC2*)N%B0gK2{qRX(KY{*lCns#f@8aCBo}#l^X32|9feZNKTOHz@Xfb zyS=cY7U?+OuXH+_Qa8(A&7Lja%WJKZx;8Ao$V*#YN=2%J{A`E_x3Mdlviu|Gegx{y z4BIAiJPGc7K+9eKnf@w=8s$fIbK&W-3P#y1%{@1691NX%nOWoNYg^1_<<;gmNfSHF zlf4tl6^c9lBQBysdx0Ek&Kd`O9cw#GO*XY1!j*QpeU^^x83OgF#J;{B?UY#NM)#(f TnN5=WNXYREk934hxzYU#21|)F delta 662 zcmZuvJ#W-N5Z&2b?`?7i@wND(g!swe z-y;b;rR(pLal*ksWDvc~l#@=KicCB067q?IJ<&50Qi_)au$!HPyrKJyu75`+h@p57 zqw}-007rFBMSwTzIdhV#O|gzxh2+8vC1<$g7AeLuGT_Wu-V`xbuEX(26Y3207(h6C zVL76S7Mi>8-Dqlyx>54uHh)wPGCg=vze47F5_!bT49XBnjNH`l)Yu`j%7JZu$wyD7 zl?cz$T3sCE|4mvWk>_ryn9z2`gySYxd)=g^UR6IFVA_0E_qy|%Xqw;ZPP$A&t5e|T zpD2$`*X={;yqX201e2fXEK9%X diff --git a/password_creator_melnikov/passfunc.py b/password_creator_melnikov/passfunc.py index 43f3988..46a6470 100644 --- a/password_creator_melnikov/passfunc.py +++ b/password_creator_melnikov/passfunc.py @@ -8,7 +8,7 @@ import string as st -def generate_password(length): +def generate_password(length, numlet=4, char=True): '''Returns a password consisting of lowercase and uppercase English letters, numbers and symbols, except for those easily confused with each other''' @@ -17,7 +17,13 @@ def generate_password(length): letters = [letter for letter in st.ascii_letters if letter not in 'lIoO'] characters = [char for char in st.punctuation] - password = ran.sample(letters, int(length - 3)) + ran.sample(digits, 2) + ran.sample(characters, 1) + password = ran.sample(letters, numlet) + if char==True: + password += ran.sample(characters, 1) + ran.sample(digits, length-numlet-1) + else: + password += ran.sample(digits, length-numlet) + + ran.shuffle(password) return "".join(password) From 5c812db6cea34dd7f16a02e01aef678e1cdc3a89 Mon Sep 17 00:00:00 2001 From: meldanil <111883970+meldanil@users.noreply.github.com> Date: Mon, 30 Jan 2023 23:45:36 +0100 Subject: [PATCH 4/4] Unnecessary file deleted --- password_creator_melnikov.zip | Bin 5866 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 password_creator_melnikov.zip diff --git a/password_creator_melnikov.zip b/password_creator_melnikov.zip deleted file mode 100644 index b9d9129305cd9bc2a67410852364bf242595b75c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5866 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