From 6e18f48960809e612a181b4bff935f24de373483 Mon Sep 17 00:00:00 2001 From: Boitumelo Mokone Date: Tue, 27 Jan 2026 23:24:47 +0200 Subject: [PATCH 1/5] My playground for python questions on basics --- .../assessment_two.cpython-314.pyc | Bin 0 -> 5583 bytes second_test/assessment_two.py | 104 +++++++++++++++--- 2 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 second_test/__pycache__/assessment_two.cpython-314.pyc diff --git a/second_test/__pycache__/assessment_two.cpython-314.pyc b/second_test/__pycache__/assessment_two.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c495c17774fd44c3a60d97fca9bc4d6ac8daa987 GIT binary patch literal 5583 zcmb7I+fy6Y89%$L1tG*$NL+$pZEQd>R!nf>OKqo)<4cW8oi!0@hOo1i4nncCEALrx zd!p0MRH>T@aq2{!UWQCN)1*)RGur7xoiWXjZ62J)FT5G(Op>Se`_8U}gcT=UMjz6i z^L=~Hclmw4vxl3T0tBu<9a>8NyM>T1@JH$Ld0%#V;L8dLll?>`okSImiSCF^RB?br zr9?>s|JQpzc0_>?9rRu&wxAMQoDpm(LQK%_B)0E$c|UpG2NuN`QKjRa#bcm@S3gmG zFsqKws>4|`(u^-A)|@HB%zCvBq@U0C<9xMV_1Cc40J9p@0LXya2(nQPf(&xKptqXH zkA#}fX@Z$eYBR`YwFP90+6uB&Z3Ee+wu5X}Lm)$Hhusk;c32IAcRHP>bBs~Oved9A z7tDmWRlZLNBz%H9SK-SFnISnbF3iH6UJ?h_#)VdLF-%BKic2%(L^~lVJ~kdCFg_!U zG;u3jO_WnRzZDO1w!giM;* zv5!d9=lB@S%sTb126Nf{TDB6gt`h>cj`!2|EjbRiWJ-4JHFA;T^zl8`Obwc8E(Vmj&7KOK6A)N zqE!c9EKJ(kftiPq6*BGRCAeKEyf?0C=}UFo&H5u|odiC&8A&!tK+= z(e=jOPeYv#I>Lnu{|fi63LCBAqHwq2j=Uw2$i9c|;nmc;BgOnb+Yc7bKL|w%S1iog zDqrI=z$d|-KXT)$kQ3n}eHWkC@+CwdO2`6~nROxVtBlg54CUpkX;&EGI0y@X3*+h) z+7Kb2C5<0;V>dN0hKMIFpY^4HU8- z0&CM~9S@TuqbAfHx90fJ8r(CIbkXtgAxu~vH7{(o1L=R}QILdtR!`px_CFq6Om-gJY5q_b;UGi$EDx8FGULc?c)hH?0P8spUhx8|WAFHLpw6BJQ3kRv+QNl%8!fGGFTA;Md+A>9*e5MxyJaPl_6UGj zYq${P-gfHemT6`#W0tTCJX>8~NG8BSQBoLjM+E6`Xfb;+rL zL0Hu|P?vI{3d_gJ=$T9dUx4bgmXxfX%b_2so|sb>zzd3P0*o@n&6F7QG?{_>ZJt@B zYV8W;c<=Ay}=O}mQgV0m&pMB@-{m?+c z{~+912z=4mU%2$yfkSJlKa3Qv+z<9cr|VL%Bzx}pyPuGev)o>-jGPfpoT{V}6^<;^ z4a`~<|HM&g1R1$^;eB9&6?c%5S7D(`!=N!)DPUq{GPuhg(zcQ`DKmy_g)Sl!oY?#? zTv5?&QgzIYg4KTEW)>g>peix1t-@eTAHEVeL0PnV6OPD6;q&aC9RQYkX7=u2cf^3j zTQ8t^jFy$5z@@<0xno%5<&M2eUn?6%jCkjkUL>+p2dmF0ap_v6gW$n<#l;d_^po*E z4=N;xsj%Evh6+w`A(U3$Fc2qz+A;tIFGT@7sFAGXy1;RhNei*p?b8^i3bxzm+0np` z(_J0milIDcG3-M?n3`J((nfP@LHf+gUu3@

W{`aN>yUL-HHCTMq}1*3kQbcLK$+ z_gdi05!r`lj?P-lx9s8=JU|z!&lzJ-?42azSH)IRqC_P(@e;r6xd!{N*MPx2{FiC) zN@w{SUV~mp!}%<4L*L0!IRAnB5_38p)`0)S66KJ>GH^{}@Y$IJaauS4XYmy>NiOb# zHraMvd{RHCpljWP%m|BQMTUU(y8*=_eNIXXQE?NWH-W?|V=e%(k{mI1)bZhptN|Eu z^H^DNLA&8}iW+n=XPtFUR);C$Zd1z}>05aUf%JA8JDo8TdWM~il~sR+W)%=$ZNhf$ zwZ}i+f2P>+*N%Vm{H^Ejy&s=@<^9n+qxbip`I_Mg>8Ful;rD@I!RgU&B$9MCHJ5(l zW+rQxxm!T-^YaUfOUuA;psA4xhBND~x9gjhbHn+R3APneE>3pQC$fV@vG??)Rml`fpd^$W=pH} z7_TE3RSWHbR~zXh>|EQ`@Ln!B!_^`9=9#zu-^G_W4S(GNT-Y)fu<=~e8KmM6Qzosn zZlr)R4j(&`sA-Tf8E>RT)A%70yiW~N(=2>d;mA2S zMA;U+ogx-MHn9$(KniLdL4lBEAtG33P@G3`83l4HYYGJ(2`vqT6V@~axtdOBx(zvc zBM%H4*3qVE2{_X-WOfOf$!HpYMpMO2P{UOEKCe6rN`P>I_t+YUuYL~IzU^<6ySKWC z9QZh(d?^0q#r44Pb>E3?Ur_Gc>V?~H4y{^iqiZj(9a;|zulu6g{$^R(R{U~!E5fyU z*2E9H*8^kgzGK@yS?=EM@X4Lq%?)zTcEm6DY;~ZKSn Date: Wed, 28 Jan 2026 01:21:02 +0200 Subject: [PATCH 2/5] Test done, left with last question to research on later --- .../assessment_two.cpython-314.pyc | Bin 5583 -> 6620 bytes second_test/assessment_two.py | 78 +++++++++++++++--- 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/second_test/__pycache__/assessment_two.cpython-314.pyc b/second_test/__pycache__/assessment_two.cpython-314.pyc index c495c17774fd44c3a60d97fca9bc4d6ac8daa987..1e04156b892f24638d022af34d4358ad899091b2 100644 GIT binary patch delta 1884 zcmb_cUuauZ7(eIUoSU2E-kaRyCQY-fO|~qMt)_-nTWje?-KuOj=cP+WSu0r^rMh)@ zCmEX#X+_c0ZMf|)iGPZ5FsKg$r4J$q4&TKU!&XBdI`F~yAYCd<@Wt=6DeXn^$@B0# z=X~e)edjyh_v8GyXQ@Nmqp5BLL+pEfV#2tp9q`C}3uE;*x;h%2GKD5oB&G-`nGQgw zNdRS20(6;9K({FadQ2CfGNQ)Oh!RJpJB`fX3wTs8Jze5@$WFXIw<1#ku4bx$UQ+|~ znO;EM^a1+UV)%KC(bNS~?-Ksu?gv`H3>1wlDh5qsCrX9p$MMH_UJ)$;d*|OI-(#$^ zea^SpQ7OcJcTTEa2=awMC75V@{)9Zpd0)F<#X){jlM1J4F+ZMaFr2JinQ7r<$X!`Q zkoh!9BTGEqcmqPC>^n!0$wWJt6*?O)^r3+kge=F9G1T7%&KmQPdXMjFiTkk+LF`L}WiGsUw}hNQpHH1r9mX)6zPf6?5Z~~*|C``POuem4Bo;s1ICnpL;>f&Z;-B93_NG6l9Sd1BJ`&8j9 z?5ELkC|q(c1;SA2Z*C)i#ZSX4sylV{{)}H+VQD)SNVLoy?8p=@aZ* z^}ut`G*s9NFpX9ur1?G=o*6ES<^G@4){?NOdTsk()WDVgi^C;hX=AbMQ7?6Ww11|X z-IlkpUD{_Z-Ywb#!0u>Gpyyw;9{le7PVZ@q@n~C`p4p9CHuy6diwi~c0G_6HhF_5BOO~4Bi z*PWMoe-1R=4}{n5rXxTY6WA>!&JG27@dzsgp3Qv4U3n(c=)SD16Z!UViqOL_Kj0ZZ z;H7-v;6T`4fxQQ50M<0hVFw5J)DY#*pcxKNa_9r75sOYt7U=*t9OQ76!!U=JIGkYb z7{{hA!1B-cAceZ@Ah7pIIv)uFQCAQE en+~?^v>*rmRTOl96%k|nNT32%R}sgx!u$>RHgh=u delta 978 zcmZvbPfXKL9LM|GzOHN6j;-6u5D@|l7957KFf}m*m1v9sc@j_}82&5)1KVtCR4!=z zLx=|@&jUAi6O9LxMXx3ty%x`(f1n|HQ^mT{r!IL`}@=P+8@1Ny7Vqx zQ#iI>x8Gm*8C=%~RUf!)?eb`Ss&Qo!w{VkU3rF~FjtCike>08tpT{^Nnw%rmR1&DB zgekF`KU9gC(nlmlxu%yvPkcl^q^h5({6sNVI7cBWb5s&w4Ac?>2jj$s(V>krrqqbe zsFNULkkm2Okq~2ugc-xcU^Ga?iHvbhltf#(q*>MmY&&b)OWB+=dN)4{?^^0ZPmx;Y z-td;hT+2rbzIf>yKf$9=DTTKXGU$%Sv(a#t}MN_o{8b<8+~r&CMn8Kjnq#xjD-ZdV@wn zr_r6#a43&ZEBzE6Lyu|97?r}X+d&J)2zp4jjGo%81JP6?Ysa>d`^Qq2mZlwR;hqgg z#wL9k&8Vx833FH)C1!$d#JcF`*tGiWzxWKApdZW&$DjX=f(5mQlDGo(tji1)h*aPT zDk4qQ_g^aGg0+xytSBg&0BwLIAO%PRP65sU&H*k0t^&pZHvl*3$NFn4MP~k5Whd*& zDvnp{IjnqDnm76PXI&-ZiYGlWfX!+n3$Jy&u!=p!kz%{6bh={FlXcweHOn|!jn%Rm ziu`8WReD`9?THx2y@-fSPxs>nFDB!LY6OaOZ_K>ya+N+;%y=S?k7}OGW6jf5Cao9n mIPwDELvT-~PvYs;B{m`abv9h*j(`x_} diff --git a/second_test/assessment_two.py b/second_test/assessment_two.py index 00558b9..5d6e736 100644 --- a/second_test/assessment_two.py +++ b/second_test/assessment_two.py @@ -14,7 +14,7 @@ def count_negative_numbers(self, numbers): if num < 0: count+=1 return count - print(count_negative_numbers(self = '', numbers=[])) + # print(count_negative_numbers(self = '', numbers=[])) def average(self, numbers): """Return the average of numbers or None if list is empty.""" @@ -30,7 +30,7 @@ def average(self, numbers): return avg - print(average(self='',numbers=[3,4])) + # print(average(self='',numbers=[3,4])) @@ -61,7 +61,7 @@ def count_consonants(self, text): return count - print(count_consonants(self='',text ='hzelhlo')) + # print(count_consonants(self='',text ='hzelhlo')) def is_even_length(self, text): """Return True if the string length is even.""" @@ -101,15 +101,32 @@ def second_largest(self, numbers): return numbers[1] - print(second_largest(self='', numbers=[2,1,5,6,4])) + # print(second_largest(self='', numbers=[2,1,5,6,4])) def chunk_list(self, numbers, size): """Split list into chunks of given size.""" - pass + numberlist = [] + for num in range(0,len(numbers)-1,size): + number = numbers[num : num + size ] + numberlist.append(number) + if len(numbers) %2 != 0: + + numbers = numbers[::-1] + numberlist.append([numbers[0]]) + return numberlist + print(chunk_list(self='', numbers=[1,2,3,4,5],size=2)) def is_anagram(self, s1, s2): """Return True if the two strings are anagrams (ignore case & spaces).""" - pass + + s1 = s1.replace(' ','') + s2 = s2.replace(' ','') + + s1 = sorted(s1) + s2 = sorted(s2) + + if s1 == s2 :return True + # ===== ADVANCED ===== @@ -134,14 +151,49 @@ def longest_unique_substring(self, text): def rotate_matrix_90(self, matrix): """Rotate a square matrix 90 degrees clockwise.""" - for i in matrix: - for index,element in enumerate(i): - pass - + rotate =[[],[]] + + rotate[0].append(matrix[1][0]) + rotate[0].append(matrix[0][0]) + rotate[1].append(matrix[1][1]) + rotate[1].append(matrix[0][1]) + return rotate + # print(rotate_matrix_90(self='',matrix=[[1,2],[3,4]])) def validate_palindrome_number(self, n): """Return True if integer n is a palindrome.""" - pass - + # n = str(n) + # print(n) + # print(''.join(reversed(n))) + # if n == ''.join(reversed(n)): + # return True + # else: + # return False + + # n = [i for i in str(n) if str(n).isdigit()] + + # if n == n[::-1]: + # return True + # else: + # return False + + return True if str(n) == ''.join(reversed(str(n))) else False + print(validate_palindrome_number(self='',n=121)) def generate_pascal_row(self, n): """Return the nth row of Pascal's Triangle (0-indexed).""" - pass + + ''' + 0 1 + 1 1 1 + 2 1 2 1 + 3 1 3 3 1 + 4 1 4 6 4 1 + + ''' + + pascal = [] + for i in range(n+1): + if n == 0: + pascal.append(1) + else: + + pass From d97fd5a8aaf5d7c8e1ff528b1556c78381738982 Mon Sep 17 00:00:00 2001 From: Boitumelo Mokone Date: Wed, 28 Jan 2026 23:01:55 +0200 Subject: [PATCH 3/5] Second test completed --- second_test/Answerguide.py | 199 ++++++++++++++++++ .../assessment_two.cpython-314.pyc | Bin 6620 -> 4389 bytes second_test/assessment_two.py | 161 ++++---------- 3 files changed, 237 insertions(+), 123 deletions(-) create mode 100644 second_test/Answerguide.py diff --git a/second_test/Answerguide.py b/second_test/Answerguide.py new file mode 100644 index 0000000..f93a2dc --- /dev/null +++ b/second_test/Answerguide.py @@ -0,0 +1,199 @@ +class AssessmentTwo: + '''These are answers, not all and feel free if there is something I did wrong or you don't understand so we can both learn''' + # ===== BASIC ===== + + def count_negative_numbers(self, numbers): + """Return the number of negative values in the list.""" + + count = 0 + if numbers is None: + return count + else: + + for num in numbers: + if num < 0: + count+=1 + return count + # print(count_negative_numbers(self = '', numbers=[])) + + def average(self, numbers): + """Return the average of numbers or None if list is empty.""" + + + if len(numbers) == 0: + return None + else: + count = 0 + for i in numbers: + count +=1 + avg = sum(numbers)/count + + return avg + + # print(average(self='',numbers=[3,4])) + + + + def first_and_last(self, items): + """Return a tuple of (first, last) item or None if list is empty.""" + first = None + last = None + + if len(items) == 0: + return None + else: + for index,item in enumerate(items): + if index == 0: + first = item + if index == len(items)-1: + last = item + + return (first,last) + + def count_consonants(self, text): + """Return the number of consonants in the string (letters only).""" + + count = 0 + + for i in text: + if i.upper() in 'BCDFGHJKLMNPQRSTVWXYZ': + count +=1 + return count + + + # print(count_consonants(self='',text ='hzelhlo')) + + def is_even_length(self, text): + """Return True if the string length is even.""" + if len(text)%2 == 0: + return True + else: + return False + + + # ===== INTERMEDIATE ===== + + def remove_duplicates_preserve_order(self, numbers): + """Remove duplicates while preserving order.""" + numbers = set(numbers) + numbers = [num for num in numbers] + return numbers + + + def word_lengths(self, sentence): + """Return a dictionary mapping each word to its length.""" + sentence = sentence.split() + + dictionary = {} + + for element in sentence: + dictionary[element] = len(element) + + return dictionary + + def second_largest(self, numbers): + """Return the second largest number or None if it doesn't exist.""" + if len(numbers) <=1: + return None + else: + numbers = sorted(numbers) + numbers = numbers[::-1] + + return numbers[1] + + # print(second_largest(self='', numbers=[2,1,5,6,4])) + + def chunk_list(self, numbers, size): + """Split list into chunks of given size.""" + numberlist = [] + for num in range(0,len(numbers)-1,size): + number = numbers[num : num + size ] + numberlist.append(number) + if len(numbers) %2 != 0: + + numbers = numbers[::-1] + numberlist.append([numbers[0]]) + return numberlist + print(chunk_list(self='', numbers=[1,2,3,4,5],size=2)) + + def is_anagram(self, s1, s2): + """Return True if the two strings are anagrams (ignore case & spaces).""" + + s1 = s1.replace(' ','') + s2 = s2.replace(' ','') + + s1 = sorted(s1) + s2 = sorted(s2) + + if s1 == s2 :return True + + + + # ===== ADVANCED ===== + + def running_sum(self, numbers): + """Return a list of running sums.""" + add = 0 + num = [] + if len(numbers) == 0: + return [] + else: + + for i in numbers: + add +=i + num.append(add) + return num + def longest_unique_substring(self, text): + """Return the length of the longest substring without repeating characters.""" + + return sum(1 for char in 'abcdefghijklmnopqrstuvwxyz' if char in text.lower()) + + + def rotate_matrix_90(self, matrix): + """Rotate a square matrix 90 degrees clockwise.""" + rotate =[[],[]] + + rotate[0].append(matrix[1][0]) + rotate[0].append(matrix[0][0]) + rotate[1].append(matrix[1][1]) + rotate[1].append(matrix[0][1]) + return rotate + # print(rotate_matrix_90(self='',matrix=[[1,2],[3,4]])) + def validate_palindrome_number(self, n): + """Return True if integer n is a palindrome.""" + # n = str(n) + # print(n) + # print(''.join(reversed(n))) + # if n == ''.join(reversed(n)): + # return True + # else: + # return False + + # n = [i for i in str(n) if str(n).isdigit()] + + # if n == n[::-1]: + # return True + # else: + # return False + + return True if str(n) == ''.join(reversed(str(n))) else False + print(validate_palindrome_number(self='',n=121)) + def generate_pascal_row(self, n): + """Return the nth row of Pascal's Triangle (0-indexed).""" + + ''' + 0 1 + 1 1 1 + 2 1 2 1 + 3 1 3 3 1 + 4 1 4 6 4 1 + + ''' + + pascal = [] + for i in range(n+1): + if n == 0: + pascal.append(1) + else: + + pass diff --git a/second_test/__pycache__/assessment_two.cpython-314.pyc b/second_test/__pycache__/assessment_two.cpython-314.pyc index 1e04156b892f24638d022af34d4358ad899091b2..6756ba5598cbe308db972910d94efa2d3d6107b8 100644 GIT binary patch delta 1389 zcmZuxTTCNW82(SEGqf{pnKIK(DF}h?b~8ZHb=fUuVc7+dfXKQvX*Vi0Tt?EwmU?Co zB(9QuvARBh$4g&K*o(=M=##GTL1W^RF~(rBZo1V6Oh^n5CQu&m!3WRjMV5`{;mdda z%Q^q~zklZUQ=hhbIz4U?=(;kuoccss^Gu-iwaMpsO02 zVhD7Vw4>u_mdH|&{AH6INeDp_vNke_=IeA+XK@905Zl6I?aVN=BaIiY)S$0Eq5&R2;Hr~fdI00U(vP| z|LP*?yTz@K+;sh_bZxr2u$#oRFxj!6*ET@6VSy$T`IKd(P18nsI7~A9DR(QS`)q#| zsu^zz=YkVhrKXK)mfbRztXk4PLR30VojAata>);M9ga#04idYgU+R1);73PCLp4CA zuG(3uGa;Qk6537L#7Ijev{tmkG%}WvnK5c<*ThGq(?`<64b9Ckq$+}PU>s*n?Q<*uVENoGj%4Utstj?E(!mP%k-ApYT z*vY7nSx8SC*kt#HsdRt3BeUlyHwP)Kz?MhOaa&Tuy8{KqmmA#YhpfnJN$X)X49E_a&(V_rqjCus9J6eyXi3#I(K+E?xvO*jwG};a;g4F zj!Hs4s~?uesQE$Zf00}NPuVta#Q9t;l>DJIeetDNM5u{;*APc95Wg~{rPA}+SFvd= zytcUX`m&C2J&O;Lta1rmCf_S3$+YGt7krWCqvIf?r!1UWstv;jzNnO}-Bg{&yuZ^% z>;1|9k~Dq9H7T&U#$)7;HWD=`HCdxqU{7#3UF9Z}XGj-tAGPnW?_!6Ezhh^>n!h8E zNZ|aams0F!Kqmq)`-*TogD?Y~!DAGPd={rN7A{X~FS8CY7-7JE3-}`WDscI&45fd+ zP3tH*M82`qEbx(10P)YDk_++UW$b0Nx8y+l5MoHJqR4A|e&EG-I`YSET=}}~uGn|i z-e0mIK88vSh#n$xe4?CwmgV#w2omqw1qzk7vZqbxs17qi8+N@h5MsS#zao=8ahF2~ O9oXg(a_s}da^Al&Oe1Ch literal 6620 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 C9NwG& diff --git a/second_test/assessment_two.py b/second_test/assessment_two.py index 5d6e736..f461e31 100644 --- a/second_test/assessment_two.py +++ b/second_test/assessment_two.py @@ -4,128 +4,77 @@ class AssessmentTwo: def count_negative_numbers(self, numbers): """Return the number of negative values in the list.""" - - count = 0 - if numbers is None: - return count + if len(numbers)==0: + return 0 else: - + count = 0 for num in numbers: if num < 0: - count+=1 + count +=1 + return count - # print(count_negative_numbers(self = '', numbers=[])) + + def average(self, numbers): """Return the average of numbers or None if list is empty.""" - - if len(numbers) == 0: + if not numbers: return None else: - count = 0 - for i in numbers: - count +=1 - avg = sum(numbers)/count - - return avg - - # print(average(self='',numbers=[3,4])) + return sum(numbers)/len(numbers) + + def first_and_last(self, items): """Return a tuple of (first, last) item or None if list is empty.""" - first = None - last = None - if len(items) == 0: - return None - else: - for index,item in enumerate(items): - if index == 0: - first = item - if index == len(items)-1: - last = item - - return (first,last) + + def count_consonants(self, text): """Return the number of consonants in the string (letters only).""" - - count = 0 - - for i in text: - if i.upper() in 'BCDFGHJKLMNPQRSTVWXYZ': - count +=1 - return count - + + - # print(count_consonants(self='',text ='hzelhlo')) def is_even_length(self, text): """Return True if the string length is even.""" - if len(text)%2 == 0: - return True - else: - return False - + # ===== INTERMEDIATE ===== def remove_duplicates_preserve_order(self, numbers): """Remove duplicates while preserving order.""" - numbers = set(numbers) - numbers = [num for num in numbers] - return numbers - + def word_lengths(self, sentence): """Return a dictionary mapping each word to its length.""" - sentence = sentence.split() - - dictionary = {} - - for element in sentence: - dictionary[element] = len(element) - - return dictionary + def second_largest(self, numbers): """Return the second largest number or None if it doesn't exist.""" - if len(numbers) <=1: - return None - else: - numbers = sorted(numbers) - numbers = numbers[::-1] - - return numbers[1] + - # print(second_largest(self='', numbers=[2,1,5,6,4])) def chunk_list(self, numbers, size): """Split list into chunks of given size.""" - numberlist = [] - for num in range(0,len(numbers)-1,size): - number = numbers[num : num + size ] - numberlist.append(number) - if len(numbers) %2 != 0: + num = [] + + if numbers is None: + return [] + else: + for number in range(0,len(numbers),size): + num.append(numbers[number:number+size]) - numbers = numbers[::-1] - numberlist.append([numbers[0]]) - return numberlist - print(chunk_list(self='', numbers=[1,2,3,4,5],size=2)) - + return num + print(chunk_list(self=None,numbers=[1,2,3,4,5,6],size=3)) def is_anagram(self, s1, s2): """Return True if the two strings are anagrams (ignore case & spaces).""" - s1 = s1.replace(' ','') - s2 = s2.replace(' ','') - - s1 = sorted(s1) - s2 = sorted(s2) - - if s1 == s2 :return True + @@ -133,51 +82,22 @@ def is_anagram(self, s1, s2): def running_sum(self, numbers): """Return a list of running sums.""" - add = 0 - num = [] - if len(numbers) == 0: - return [] - else: - - for i in numbers: - add +=i - num.append(add) - return num + + + def longest_unique_substring(self, text): """Return the length of the longest substring without repeating characters.""" - return sum(1 for char in 'abcdefghijklmnopqrstuvwxyz' if char in text.lower()) + return sum(1 for char in 'abcdefghijklimopqrstuvwxyz' if char in text.lower()) def rotate_matrix_90(self, matrix): """Rotate a square matrix 90 degrees clockwise.""" - rotate =[[],[]] - - rotate[0].append(matrix[1][0]) - rotate[0].append(matrix[0][0]) - rotate[1].append(matrix[1][1]) - rotate[1].append(matrix[0][1]) - return rotate - # print(rotate_matrix_90(self='',matrix=[[1,2],[3,4]])) + + def validate_palindrome_number(self, n): """Return True if integer n is a palindrome.""" - # n = str(n) - # print(n) - # print(''.join(reversed(n))) - # if n == ''.join(reversed(n)): - # return True - # else: - # return False - - # n = [i for i in str(n) if str(n).isdigit()] - - # if n == n[::-1]: - # return True - # else: - # return False - - return True if str(n) == ''.join(reversed(str(n))) else False - print(validate_palindrome_number(self='',n=121)) + def generate_pascal_row(self, n): """Return the nth row of Pascal's Triangle (0-indexed).""" @@ -187,13 +107,8 @@ def generate_pascal_row(self, n): 2 1 2 1 3 1 3 3 1 4 1 4 6 4 1 + 5 1 5 10 10 5 1 ''' - pascal = [] - for i in range(n+1): - if n == 0: - pascal.append(1) - else: - - pass + From 1431d8f2ad0122cd6e695408aca0be7f6b586afb Mon Sep 17 00:00:00 2001 From: Max991021 Date: Tue, 3 Feb 2026 13:09:14 +0200 Subject: [PATCH 4/5] Submitting my third test --- .../practice_questions.cpython-314.pyc | Bin 0 -> 4838 bytes first_exam/practice_questions.py | 64 +++++++++++++++--- 2 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 first_exam/__pycache__/practice_questions.cpython-314.pyc diff --git a/first_exam/__pycache__/practice_questions.cpython-314.pyc b/first_exam/__pycache__/practice_questions.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..423f3448f99a23c73a920d6a54a166b17a9cd74b GIT binary patch literal 4838 zcmb7IT~Hg>6~3!K3y=^Jf5Ko`pdnUl%Le1xbzR5qU{agbvA2%gX|Z+|aRpnicICT^ z5yTIg_Mv3#N!?7Fkp6`})l8=|eeBOeAKOPV(2l+BgFAJnlQ$bWlk~0U+}*`miDc@X z(c$j>Irp4%zw_O*9BPd>6L|jB_NMx$7DE1sFWwV!8$0`uwNBkcbt?3s$g;7_h#ZSRp9@GAso_Mx+qPeNq@?REmIX zy3ssHZZyGu`=qGUbkf~#TyS&`5UCkvwMZ=>V|;E5=jP*5Y>&Bdm=%{=LAFW>kO`>` zWSf)(nUqo>Q&Ky~cB#Ya$Puek>IAR4?AR5i6fCtsFI1FL!L@-~fRPCj65F{1jVhUT z?II*6csAzAsc#T63$yx2o(z*|XgLr1pA*{1xcly{fIS1thb3w)FkQ6fsaP-;bW1df zqA@!w>I4)(RW6F zGWTCI3d7$?h{C(gA~<9RHLBY|bD^{zutO%*iuOKNzvJ2n!*sBd4cpuOpKV?kZ5aYl zB~MyfR~GM{SsmPJ>3!7R@%KdPL$qx(HMW@;+lY?sz%1f}6CNG>VmojGpkOaJ0XT%^ zS8BikJ|Hv{P1_S1>jG;9Wh?>0=UNmN%7`Aj)8~=b4J1I!7`Nj|B6a`d-8&o6Ue*B} zK9dno++>MQm4qv`ScE=&o?|{IT)_y{J@pyj%Y=+XZv(<8PX&X`QilF6LW?JXBAQgU zs9vC1TM#orJM?Ws)$J&AR?XUBv#hCBCcxTYS3By>_64Keoh@^ydUE+8*xQ7O>K z43M!u^teO{4ihN^a0oAd-i5<8wm?O-$OC0sOx5RrI&@1>byHLWYLOcVgihaRi1nd5ol+9hv2y*J03Jr0ni*V`$2rdxnTdr_3pKf-%kAT((f+) z;j15xf8~SGACLa3+o6N+b{!Oc-h2@3QK)JxT$^OLdffpE8$nH+=86s%wE8!m?4A|&0rg_dmYzqr|b@y~->-BT;pMl`o^H3za09~cFWkHgTY!X5E4{KaP$ z^0DtzXaU(8?u}Em)KCIe0Frfyq4vrU4JKYjC;(h&scbD}@nC`_Rc~a9gz4&WDcJ7w zd0sb))McXoRr2qFk$a}Y9LF9^Y($SWx{74LUA@9rNJ2S)SK=hVt{l8RRs$_S1CYla zUGR|MP`1%_*5U;(D(Xyr#XePwjgoDJ6IEom*hA@vtMnuuUOx#iKz}2+(`vT`1 zL(G~-cn}`9^{qtymh4I*Jd`mGw+0+g-NRGX@s=9m~Poo|&Bs=7|^5ynrb5p6kPy7gM5>+c~WI zgyo}dkQH%Og*wU56}BYuFk@;%=>(KrWE3uZy`WMvi%6TJmM@4QoWNcJ<)%M`JhJ*K zA!W*e>#4c|4Rk#((4gFfJ$Pw`fe$T@*Ac%is=)MOnW-h}CjDX2fD)1|s&Ii$LfJ&K zlh@{)O&`As2N7n9K1YFz`Ryp^4vNt%K(PbjsA|ewWnHDbzzzGyD$mZvTi5 zbVz4?cYmzt=x~am9v`M^ho(T!4klBT{39A`q_Vv&JXu3PngO8(6AMPEWaw~Aw5V1@ z1=@39F}L2UZ0hU|^SZ=mcBiXNcC^6>p*DNSXaAmaUI!o8YbZKE{2x*Fd~j`a??Egt z@au%v_M$FMsxy%Jg@WqUp{@_?%dm^j^ivcAlCP zl9@rZrfBMH9UuhL7tti2BiF2~`%Y;X&-<-})Y^Ua2J#`vuoTOw!Z}nS&G7g&TC~KO zCGn~vL98zIP&}<7go#Jl9{jzFdT%C-|?X)kTH6t^y^o5|>@5WNm0g)B> znPrtJnpjfc@~?Pj+q?2rvfV7pC1Z9$!*)!D zuUtiQM-sBkb462isvEM*;OZc(8wC_CguQ|yi{b2duXp4TXdEE4W`)<(k3Zyi~c z*51QAbcE{6NLB0 else False def smallest_number(self, numbers): """Return the smallest number in the list or None if empty.""" - pass - + return min(numbers) if numbers else None # ===== INTERMEDIATE QUESTIONS ===== def remove_vowels(self, text): """Return the string with all vowels removed (case-insensitive).""" - pass + vowels ='aeiouAEIOU' + for i in text: + if i in vowels: + text = text.replace(i,'') + return text + + print(remove_vowels(self='',text= 'hellow')) + def count_character_frequency(self, text): """Return a dictionary with character frequencies.""" - pass + freq = {} + + # for char in text: + # if char in freq: + # freq[char] += 1 + + # else: + # freq[char] = 1 + # return freq + for char in text: + freq[char] = freq.get(char,0)+1 + return freq + + def is_prime(self, n): """Return True if n is a prime number, otherwise False.""" - pass + if n < 2: + return False + elif n == 2: + return True + else: + for i in range(2,n-1): + if n % i == 0: + return False + + return True + + + print(is_prime(self='',n =13)) + def flatten_list(self, nested): """Flatten a 2D list into a 1D list.""" - pass + + unnest = [] + + for i in nested: + for j in i: + unnest.append(j) + return unnest def longest_common_prefix(self, words): """Return the longest common prefix among a list of words.""" - pass + for word in words: + pass # ===== ADVANCED QUESTIONS ===== From b4c3355383f3a29a5da9b955d2e2a5d558e1676a Mon Sep 17 00:00:00 2001 From: Max991021 Date: Tue, 3 Feb 2026 13:33:55 +0200 Subject: [PATCH 5/5] Few changes to the test, to be completed again --- second_test/assessment_two.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/second_test/assessment_two.py b/second_test/assessment_two.py index f461e31..93df4f2 100644 --- a/second_test/assessment_two.py +++ b/second_test/assessment_two.py @@ -30,29 +30,32 @@ def average(self, numbers): def first_and_last(self, items): """Return a tuple of (first, last) item or None if list is empty.""" - - + if items is None: + return [] + else: + return (items[0],items[-1]) def count_consonants(self, text): """Return the number of consonants in the string (letters only).""" - + return sum(1 for i in text if i.lower() in 'bcdfghjklmnpqrstvwxyz' ) def is_even_length(self, text): """Return True if the string length is even.""" - + return True if len(text)%2 == 0 else False # ===== INTERMEDIATE ===== def remove_duplicates_preserve_order(self, numbers): """Remove duplicates while preserving order.""" - + return set(numbers) def word_lengths(self, sentence): """Return a dictionary mapping each word to its length.""" + def second_largest(self, numbers): """Return the second largest number or None if it doesn't exist."""