From ecc1640e2c4ca0214d6e49e7984e54bcae59c80c Mon Sep 17 00:00:00 2001 From: linopino <lasse.pikkemaat@web.de> Date: Wed, 26 Mar 2025 20:32:47 +0100 Subject: [PATCH] StringCalculatorTestListBasic + Verbesserungen alter Code --- src/__pycache__/interfaces.cpython-310.pyc | Bin 505 -> 530 bytes src/__pycache__/romannumerals.cpython-310.pyc | Bin 894 -> 917 bytes src/interfaces.py | 4 +- src/romannumerals.py | 15 ++- src/stringcalculator.py | 0 .../test_romannumerals.cpython-310.pyc | Bin 2632 -> 2458 bytes tests/test_romannumerals.py | 90 ++++++++---------- tests/test_stringcalculator.py | 5 + 8 files changed, 55 insertions(+), 59 deletions(-) create mode 100644 src/stringcalculator.py create mode 100644 tests/test_stringcalculator.py diff --git a/src/__pycache__/interfaces.cpython-310.pyc b/src/__pycache__/interfaces.cpython-310.pyc index 95e7981751754055c5e10944cc00468b50941e10..9c2c27ce8dbc3a9cbbc432aef7c2022428ab19de 100644 GIT binary patch delta 244 zcmey#Jc)%jpO=@50SF!iJW21I$XnvY3gkEdaj_DRNM(p(Oks#(N@Y%AOl3)7N@Y!B zNnuW5X<=z*jABb+4Q9|}yT#)fl%JcJ=U1AWlv;F)G4B>zQEEwPQQpKI`aDG-<BHh9 z#Kg~*I_$~$d1a|ZB`hEtn1BQeQ<Vs^em$rHKTY<@F^rmKx0o~YN^UV1mlPF&+zB-b m&f)~IK!z~`aWNZ^;9y{4l$gAcQBDA2D@XyD#X0#tqZ9zz1~<Y0 delta 242 zcmbQl@{^f2pO=@50SGFu-c4_s$XjC04CFWfaj^uDNM(p(Oks#(N@Y%AOkrwaXl9IJ zNns9V&}6yA=NXiro0#WUnwwgbm{UCQv_8)*=DgC}B37WjBG$=ljFtu*CHe71AXO|N z1DSvX3saRiszyDS8b3|e$=QsWIz^md15gPL5Eo<$$a%$VK!SsTiIH#eDMmRhh=m{p bU=~Q}Ee@O9{FKt1R69nHdXPo|1`#Fz4%jl` diff --git a/src/__pycache__/romannumerals.cpython-310.pyc b/src/__pycache__/romannumerals.cpython-310.pyc index f6197cf9b2af49383222064fa3d7a160c943eea6..24f836671a9a8436497583973509848b92b6dc91 100644 GIT binary patch delta 271 zcmeyzHkF+>pO=@50SHtBpQPWK$m`9=;~A8no0#WUnwykblsr*T(nby_oyri!n8Fan zl){+GoWhjKlE#w4oWjz=62+Rr8qA={c8eQH*Dc1pTWm$CC8b4q8&~x+vKFxbO_*%Q zq`;^$IiAUelRY^<uPn8wgk|zlCS`G9B%OLt89z<7$&Z*+Z9!JwVlFNzDpCWoid0Yu xRS=gMNPuuL$Px|)F-EY6pC<FI$yUr#T3EE);;_lhPbtkwwPS?o<6#hC0sy-vKM4Q; delta 249 zcmbQr{*R3}pO=@50SGFu-c5fzk=Hwj&od}LH!;tzG&i*<F{d~gB#8`|fE))PE*1e2 zsSHt!DGX6eDU2yhEeui2Da^qPnk=_?QH<EQyPuIYiaD<|cd|c|0;AI80wx<Sj*|TN zB9KL_leaP{ONpWA(1S_(X|hay&!lRs0<^1036)R=ahZVx3lJBB2o44wMzDyVCUex} QKxQccbS;ysnI##S0e)yVC;$Ke diff --git a/src/interfaces.py b/src/interfaces.py index fc64573..bc8c8c3 100644 --- a/src/interfaces.py +++ b/src/interfaces.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod -class IRomanNumerals(ABC): +class IRomanNumber(ABC): @abstractmethod - def to_roman(self, num): + def convert(self, n: int) -> str: pass \ No newline at end of file diff --git a/src/romannumerals.py b/src/romannumerals.py index 3f3eaf1..2507532 100644 --- a/src/romannumerals.py +++ b/src/romannumerals.py @@ -1,11 +1,10 @@ -from src.interfaces import IRomanNumerals +from src.interfaces import IRomanNumber - -class RomanNumerals(IRomanNumerals): - def to_roman(self, num): - if not isinstance(num, int): +class RomanNumber(IRomanNumber): + def convert(self, n: int) -> str: + if not isinstance(n, int): raise ValueError("Eingabe muss eine ganze Zahl sein") - if num <= 0 or num >= 4000: + if n <= 0 or n >= 4000: raise ValueError("Zahl muss zwischen 1 und 3999 liegen") val = [ @@ -17,7 +16,7 @@ class RomanNumerals(IRomanNumerals): result = "" for (value, numeral) in val: - while num >= value: + while n >= value: result += numeral - num -= value + n -= value return result \ No newline at end of file diff --git a/src/stringcalculator.py b/src/stringcalculator.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/__pycache__/test_romannumerals.cpython-310.pyc b/tests/__pycache__/test_romannumerals.cpython-310.pyc index e14f2572a91805d1b33f9c03c0890bd6a036010c..2ef85d1aa0aaa5d708fc349e4ed24856b6f600f4 100644 GIT binary patch delta 985 zcmaKryKfUQ9LMc@Bu;ZpOCC~r43H9$@Tfq_7!XoH6_rS(1{gAMT+b#txQFmvD%7O| zh&{595K|dhSUT|^FtKwp3o`=?68wHgTAC`2PyYUF{~n(^+xMmVzEX<j=jRBtxy|o` zc6n4fx4RBAPB`^RAFbxoK<jH1$GWcvM&F=hjc|jTuL(B=d1k)S`#F*4x#yZ(7G#fo zAP`M^S#RZkVEJx~rp3)DaKi2|*b)+^*1aQh7lX2PYHT&Ix1q<K(caBkkF-kZ!UGW} zN0LUr*C|tL^x<Odm`8o0=T%4ly!%m4i%uL1ncRIbbbM(-#We3m;WjME9Lyv;lma@J z5`fs_2s<8bCDL&dFACe>{b_+z>A|x^cbdn@D--GJiP4}%^~P9zw1}8#z}iHH!?}mF z4u)4jb{ew?YT2yQSbe4MRM*@XoCqmTKmzZj;CG;STmm`x8np05^;tYSOI26R)2fnt z>z>FvGr{v6IS_W3oqT*Bxwz^7xInx-i@3j#-=}RnH(5rRwuRLRnip<6zQ=p&7rWNH zIIFfj4(+xIYNOD2jDLcxpqxdyfKo@fg!2EQWFx#S(g3**J=;h|7-c%cR<LrJFJ-nJ zI9_PmfcRFZ^L{Co?ur*CLOyj|5lbDiQ-*K3>cBn4g0hKg2IftJrmPc0eCUf?^pJeT Oq82S{?1n{+KYszrRQN9d literal 2632 zcmcguPjB2r6rZuZyWWjAX(_an{y|hAx+(;MfCJDf;8bW)yedsuj1|dpc1$$s{t07m zXrr7+IMYu6$uZx612;Yc7fYNt6pI_-#3lTm-N5c<m%Sjynm2FW%zHEM_ukC7SFKhU z%EO<2UjO|ZW4};muo&npqDHqs1QWc?JZiNz?`WRJ*@sN%!q{WN2-$|dt9wRR5QY1i zx)QSe;sN8(S;=axn8F5Y)Ob?8+v^0~M!yrPpdGbHJXkbz7Ez-mkdS#?Fi#U)XnV}l z^W{846hsmIf+z_SZBdj(1#L;p2n($#s$v#xS<J1l+L`3+y)cT0m*ud2Qi!KzZPdsD ziP<jOVLq0II&ai8MZ-zC)$4ABDh|~lPmCyRe}2eR2_t{rwBK1>iTgtKJF9n8@IXeJ zs<#o|kDZ<fRd*@eT8*)VD5Jh20J={AnBRPu6rwQxWOIR*r-dxOec{xO=d(Gj(R~*% zpZ0z92xN!tqi*nh0CoV#4iKXOnGTsTA}c^v9FdhEGe=})$SNbU8OW>=SrxKbl4aP< zHB#De!s{t*G~vyZQZC_c`bO3+ry^@@`3EK@d`bSQQ|lb+$xIMMK>PL={h+NV7ZWq? z<=`o@mO-BrlSa=G#Qw<?e=Ue)>rD(C&4N75|M{Nf+b^BQcZ~LAw0B@~0NMW)?F`v! zBPB>Yt=>$_Ipe0+Gsay`y_~V-BcSSO_LAHKtY92<0YhWqyEqI$)L)BL(28ZRdlM>0 zbS{P<yfF>J0Sgm>RF`4424^Vm;Y>ZnK5@|N;EI{3Sx+gtp3x-P)oj#t-Skc-Tn0PY zrSros1wu&j=QdQ;HIVJ=(|kBlnd|`Na}9Y;N#^M;!hx$a<J|NLafa*G-Sm~5UB-AT zXYINxf1vOb?Ijm-`Itgfv>g{ClYJV=@{W8E3I`U|C6MWPoz0)<O>_@N{_DKX^0nNM z6k1Pn>hee2nO?=Q9f}^pDj$=e<TyYIz3=AGD?1J*{5uqvhQr$q)OzUSUR?`S)Py4u zB~G5RIP$Mfi}jHHDTv6HO-4UL%m|_whyI&cx?nf7eVr~`&OXJpXW-k_IqRAWEIR)s zr1X7;Iz~$ytF<si3m5sAwU(!78Dq89r)aUUT3?OTn)@3KJS)RHq$B_y-wx_!iBW7Q z0Ls#16uFPkC;Iyz*z3=K{oBXiUo9`zjKs>{fxCf>!YHXUgLXf>tyE8CkAk`g?Xefy zGsEd2yIVn9idBl?iy#)C<(H2wZ8E)fy#4aDq<LbsQL7}T?{|Yv==({<_d7k&Zxe6% zK0RRhh@z`nJxAmPA~hnf5qX`+TSVxGVt`QIDV!WeGomvfCNsIIn`M(q*(zqEw0b9y zUEi;jJhR`GF?sKujZ|xX=zk;sl`+XLJHY!&rq$aZi9z}UD`y*_<rDM0+?`t#sq7EQ PykYUDbn{({8^?bEe*s~n diff --git a/tests/test_romannumerals.py b/tests/test_romannumerals.py index 5b273e6..abc5266 100644 --- a/tests/test_romannumerals.py +++ b/tests/test_romannumerals.py @@ -42,67 +42,59 @@ # Bei Eingabe der Zahl 3.14 erhalte ich eine Fehlermeldung import unittest -from src.romannumerals import RomanNumerals +from src.romannumerals import RomanNumber +from src.interfaces import IRomanNumber - -class TestRomanNumerals(unittest.TestCase): +class TestRomanNumber(unittest.TestCase): def setUp(self): - self.converter = RomanNumerals() - - def test_to_roman_basic(self): - self.assertEqual(self.converter.to_roman(1), "I") - self.assertEqual(self.converter.to_roman(5), "V") - self.assertEqual(self.converter.to_roman(10), "X") - self.assertEqual(self.converter.to_roman(50), "L") - self.assertEqual(self.converter.to_roman(100), "C") - self.assertEqual(self.converter.to_roman(500), "D") - self.assertEqual(self.converter.to_roman(1000), "M") + self.converter: IRomanNumber = RomanNumber() - def test_to_roman_subtraction(self): - self.assertEqual(self.converter.to_roman(4), "IV") - self.assertEqual(self.converter.to_roman(9), "IX") - self.assertEqual(self.converter.to_roman(40), "XL") - self.assertEqual(self.converter.to_roman(90), "XC") - self.assertEqual(self.converter.to_roman(400), "CD") - self.assertEqual(self.converter.to_roman(900), "CM") + def test_convert_subtraction(self): + self.assertEqual(self.converter.convert(4), "IV") + self.assertEqual(self.converter.convert(9), "IX") + self.assertEqual(self.converter.convert(40), "XL") + self.assertEqual(self.converter.convert(90), "XC") + self.assertEqual(self.converter.convert(400), "CD") + self.assertEqual(self.converter.convert(900), "CM") - def test_to_roman_addition(self): - self.assertEqual(self.converter.to_roman(2), "II") - self.assertEqual(self.converter.to_roman(3), "III") - self.assertEqual(self.converter.to_roman(6), "VI") - self.assertEqual(self.converter.to_roman(8), "VIII") - self.assertEqual(self.converter.to_roman(30), "XXX") - self.assertEqual(self.converter.to_roman(80), "LXXX") + def test_convert_addition(self): + self.assertEqual(self.converter.convert(2), "II") + self.assertEqual(self.converter.convert(3), "III") + self.assertEqual(self.converter.convert(6), "VI") + self.assertEqual(self.converter.convert(8), "VIII") + self.assertEqual(self.converter.convert(30), "XXX") + self.assertEqual(self.converter.convert(80), "LXXX") - def test_to_roman_mixed(self): - self.assertEqual(self.converter.to_roman(14), "XIV") - self.assertEqual(self.converter.to_roman(19), "XIX") - self.assertEqual(self.converter.to_roman(29), "XXIX") - self.assertEqual(self.converter.to_roman(44), "XLIV") - self.assertEqual(self.converter.to_roman(99), "XCIX") - self.assertEqual(self.converter.to_roman(444), "CDXLIV") - self.assertEqual(self.converter.to_roman(999), "CMXCIX") + def test_convert_mixed(self): + self.assertEqual(self.converter.convert(14), "XIV") + self.assertEqual(self.converter.convert(19), "XIX") + self.assertEqual(self.converter.convert(29), "XXIX") + self.assertEqual(self.converter.convert(44), "XLIV") + self.assertEqual(self.converter.convert(99), "XCIX") + self.assertEqual(self.converter.convert(444), "CDXLIV") + self.assertEqual(self.converter.convert(999), "CMXCIX") - def test_to_roman_large_numbers(self): - self.assertEqual(self.converter.to_roman(1001), "MI") - self.assertEqual(self.converter.to_roman(1987), "MCMLXXXVII") - self.assertEqual(self.converter.to_roman(2023), "MMXXIII") - self.assertEqual(self.converter.to_roman(3999), "MMMCMXCIX") + def test_convert_large_numbers(self): + self.assertEqual(self.converter.convert(1001), "MI") + self.assertEqual(self.converter.convert(1987), "MCMLXXXVII") + self.assertEqual(self.converter.convert(2023), "MMXXIII") + self.assertEqual(self.converter.convert(3999), "MMMCMXCIX") - def test_to_roman_invalid(self): + def test_convert_invalid(self): with self.assertRaises(ValueError): - self.converter.to_roman(0) + self.converter.convert(0) with self.assertRaises(ValueError): - self.converter.to_roman(-1) + self.converter.convert(-1) with self.assertRaises(ValueError): - self.converter.to_roman(4000) + self.converter.convert(4000) with self.assertRaises(ValueError): - self.converter.to_roman("ABC") + self.converter.convert("ABC") with self.assertRaises(ValueError): - self.converter.to_roman(None) + self.converter.convert(None) with self.assertRaises(ValueError): - self.converter.to_roman(3.14) - + self.converter.convert(3.14) if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() + +#python -m unittest discover -s tests \ No newline at end of file diff --git a/tests/test_stringcalculator.py b/tests/test_stringcalculator.py new file mode 100644 index 0000000..b8e4935 --- /dev/null +++ b/tests/test_stringcalculator.py @@ -0,0 +1,5 @@ +# Basis +# Bei Eingabe keiner Zahl soll eine 0 ausgegeben werden +# Bei Eingabe einer 1 soll 1 ausgegeben werden +# Bei Eingabe einer 3,4 soll 7 ausgegeben werden +# Bei Eingabe einer 10,20 soll 30 ausgegeben werden \ No newline at end of file -- GitLab