Re: Using Python as a Calculator
Jorge Garcia via Edu-sig <[email protected]> Sun, 22 Jun 2025 14:12:56 -0400
| Newsgroups | gmane.comp.python.education |
|---|---|
| Message-ID | <CAPkJXS1ksnR_WXROTPeVMjc98dk=ahqX6cAcnJcu=aRN0d8pxA@mail.gmail.com> |
--===============9016105924891512292== Content-Type: multipart/alternative; boundary="0000000000001dafc406382d0c9f" --0000000000001dafc406382d0c9f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Share code on github is all well and good, but sharing in a Jupyter Notebook such as colab.research.google.com makes it executable in your browser right away! On Sun, Jun 22, 2025, 2:01=E2=80=AFPM Wes Turner via Edu-sig <edu-sig@pytho= n.org> wrote: > Here's the link to that PR, which makes things testable and then verifies > with test assertions: > > https://github.com/4dsolutions/python_camp/pull/4 > > ... @staticmethod is for when you want to add a method on a class that > doesn't take self as the first parameter. > > On Sun, Jun 22, 2025, 1:52=E2=80=AFPM Wes Turner <[email protected]> w= rote: > >> How to best phase in Python? >> >> It can check your answers every time something is changed: >> >> ```py >> 1+1 >> >> print(1+1) >> >> x =3D 1 +1 >> print(x) >> >> 1+1 =3D=3D True >> >> print(1+1 =3D=3D True) >> >> assert 1+1 =3D=3D True >> print("It did not raise AssertionError") >> >> assert 1+1 =3D=3D False >> print("This won't run, because AssertionError is an Exception, and >> control flow is interrupted on Exception") >> >> >> # %% >> import unittest >> test =3D unittest.TestCase() >> >> test.assertEqual(1+1, 0) >> ``` >> >> We verify our assumptions about types and values of parameters and retur= n >> values at runtime; we check preconditions and post conditions. >> >> I am reminded of camper_program.py from 2020: >> >> https://mail.python.org/archives/list/[email protected]/message/OYZ2QPD= YDFRV2PPJXEOHUTFWFPZVOCJO/ >> >> Maybe a good prompt to lock in that automated testing is much more >> efficient than attempting to manually test everything after every change= : >> >> "Write your own test assertion library; starting with `def assertEqual(a= , >> b, msg)`" >> >> On Sun, Jun 22, 2025, 1:19=E2=80=AFPM kirby urner via Edu-sig <edu-sig@p= ython.org> >> wrote: >> >>> >>> From an educator's perspective, how to best phase-in Python is often a >>> core question. >>> >>> One answer is: use it the same way you might use a calculator in the >>> classroom, but show off why it's better. >>> >>> An example (new today) of what I share with my student and peer faculty= , >>> perhaps new to Python: >>> >>> >>> https://github.com/4dsolutions/School_of_Tomorrow/blob/master/smod_play= .py >>> >>> A mix of Python + geometric content already familiar to those using my >>> curriculum. >>> >>> The docstring itself contains a link to the famous Using Python as a >>> Calculator tutorial at the Python dot org site. >>> >>> Kirby >>> >>> _______________________________________________ >>> Edu-sig mailing list -- [email protected] >>> To unsubscribe send an email to [email protected] >>> https://mail.python.org/mailman3//lists/edu-sig.python.org >>> Member address: [email protected] >>> >> _______________________________________________ > Edu-sig mailing list -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3//lists/edu-sig.python.org > Member address: [email protected] > --0000000000001dafc406382d0c9f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <p dir=3D"ltr">Share code on github is all well and good, but sharing in a = Jupyter Notebook such as <a href=3D"http://colab.research.google.com">colab= .research.google.com</a> makes it executable in your browser right away!</p= > <br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class= =3D"gmail_attr">On Sun, Jun 22, 2025, 2:01=E2=80=AFPM Wes Turner via Edu-si= g <<a href=3D"mailto:[email protected]">[email protected]</a>> wrot= e:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo= rder-left:1px #ccc solid;padding-left:1ex"><div dir=3D"auto">Here's the= link to that PR, which makes things testable and then verifies with test a= ssertions:<div dir=3D"auto"><br></div><div dir=3D"auto"><a href=3D"https://= github.com/4dsolutions/python_camp/pull/4" rel=3D"noreferrer noreferrer" ta= rget=3D"_blank">https://github.com/4dsolutions/python_camp/pull/4</a></div>= <div dir=3D"auto"><br></div><div dir=3D"auto">... @staticmethod is for when= you want to add a method on a class that doesn't take self as the firs= t parameter.=C2=A0</div></div><br><div class=3D"gmail_quote"><div dir=3D"lt= r" class=3D"gmail_attr">On Sun, Jun 22, 2025, 1:52=E2=80=AFPM Wes Turner &l= t;<a href=3D"mailto:[email protected]" rel=3D"noreferrer noreferrer" tar= get=3D"_blank">[email protected]</a>> wrote:<br></div><blockquote cla= ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid = rgb(204,204,204);padding-left:1ex"><div dir=3D"auto"><div dir=3D"auto">How = to best phase in Python?</div><div dir=3D"auto"><br></div><div dir=3D"auto"= >It can check your answers every time something is changed:</div><div dir= =3D"auto"><br></div><div dir=3D"auto">```py</div><div dir=3D"auto">1+1</div= ><div dir=3D"auto"><br></div><div dir=3D"auto">print(1+1)</div><div dir=3D"= auto"><br></div><div dir=3D"auto">x =3D 1 +1</div><div dir=3D"auto">print(x= )</div><div dir=3D"auto"><br></div><div dir=3D"auto">1+1 =3D=3D True</div><= div dir=3D"auto"><br></div><div dir=3D"auto">print(1+1 =3D=3D True)</div><d= iv dir=3D"auto"><br></div><div dir=3D"auto">assert 1+1 =3D=3D True</div><di= v dir=3D"auto">print("It did not raise AssertionError")</div><div= dir=3D"auto"><br></div><div dir=3D"auto">assert 1+1 =3D=3D False</div><div= dir=3D"auto">print("This won't run, because AssertionError is an = Exception, and control flow is interrupted on Exception")</div><div di= r=3D"auto"><br></div><div dir=3D"auto"><br></div><div dir=3D"auto"># %%</di= v><div dir=3D"auto">import unittest</div><div dir=3D"auto">test =3D unittes= t.TestCase()</div><div dir=3D"auto"><br></div><div dir=3D"auto">test.assert= Equal(1+1, 0)</div><div dir=3D"auto">```</div><div dir=3D"auto"><br></div><= div dir=3D"auto">We verify our assumptions about types and values of parame= ters and return values at runtime; we check preconditions and post conditio= ns.</div><div dir=3D"auto"><br></div><div dir=3D"auto">I am reminded of cam= per_program.py from 2020:=C2=A0</div><a href=3D"https://mail.python.org/arc= hives/list/[email protected]/message/OYZ2QPDYDFRV2PPJXEOHUTFWFPZVOCJO/" re= l=3D"noreferrer noreferrer noreferrer" target=3D"_blank">https://mail.pytho= n.org/archives/list/[email protected]/message/OYZ2QPDYDFRV2PPJXEOHUTFWFPZV= OCJO/</a><div dir=3D"auto"><br></div><div dir=3D"auto">Maybe a good prompt = to lock in that automated testing is much more efficient than attempting to= manually test everything after every change:</div><div dir=3D"auto"><br></= div><div dir=3D"auto">"Write your own test assertion library; starting= with `def assertEqual(a, b, msg)`"<br><br><div class=3D"gmail_quote" = dir=3D"auto"><div dir=3D"ltr" class=3D"gmail_attr">On Sun, Jun 22, 2025, 1:= 19=E2=80=AFPM kirby urner via Edu-sig <<a href=3D"mailto:edu-sig@python.= org" rel=3D"noreferrer noreferrer noreferrer" target=3D"_blank">edu-sig@pyt= hon.org</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"= margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef= t:1ex"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:v= erdana,sans-serif;font-size:small"><br></div><div class=3D"gmail_default" s= tyle=3D"font-family:verdana,sans-serif;font-size:small">From an educator= 9;s perspective, how to best phase-in Python is often a core question.=C2= =A0</div><div class=3D"gmail_default" style=3D"font-family:verdana,sans-ser= if;font-size:small"><br></div><div class=3D"gmail_default" style=3D"font-fa= mily:verdana,sans-serif;font-size:small">One answer is: use it the same way= you might use a calculator in the classroom, but show off why it's bet= ter.</div><div class=3D"gmail_default" style=3D"font-family:verdana,sans-se= rif;font-size:small"><br></div><div class=3D"gmail_default" style=3D"font-f= amily:verdana,sans-serif;font-size:small">An example (new today) of what I = share with my student and peer faculty, perhaps new to Python:</div><div cl= ass=3D"gmail_default" style=3D"font-family:verdana,sans-serif;font-size:sma= ll"><br></div><div class=3D"gmail_default" style=3D"font-family:verdana,san= s-serif;font-size:small"><a href=3D"https://github.com/4dsolutions/School_o= f_Tomorrow/blob/master/smod_play.py" rel=3D"noreferrer noreferrer noreferre= r noreferrer" target=3D"_blank">https://github.com/4dsolutions/School_of_To= morrow/blob/master/smod_play.py</a></div><div class=3D"gmail_default" style= =3D"font-family:verdana,sans-serif;font-size:small"><br></div><div class=3D= "gmail_default" style=3D"font-family:verdana,sans-serif;font-size:small">A = mix of Python=C2=A0+ geometric content already familiar to those using my c= urriculum.</div><div class=3D"gmail_default" style=3D"font-family:verdana,s= ans-serif;font-size:small"><br></div><div class=3D"gmail_default" style=3D"= font-family:verdana,sans-serif;font-size:small">The docstring itself contai= ns a link to the famous Using Python as a Calculator tutorial at the Python= dot org site.</div><div class=3D"gmail_default" style=3D"font-family:verda= na,sans-serif;font-size:small"><br></div><div class=3D"gmail_default" style= =3D"font-family:verdana,sans-serif;font-size:small">Kirby</div><div class= =3D"gmail_default" style=3D"font-family:verdana,sans-serif;font-size:small"= ><br></div></div> _______________________________________________<br> Edu-sig mailing list -- <a href=3D"mailto:[email protected]" rel=3D"norefe= rrer noreferrer noreferrer noreferrer" target=3D"_blank">[email protected]= </a><br> To unsubscribe send an email to <a href=3D"mailto:[email protected]"= rel=3D"noreferrer noreferrer noreferrer noreferrer" target=3D"_blank">edu-= [email protected]</a><br> <a href=3D"https://mail.python.org/mailman3//lists/edu-sig.python.org" rel= =3D"noreferrer noreferrer noreferrer noreferrer noreferrer" target=3D"_blan= k">https://mail.python.org/mailman3//lists/edu-sig.python.org</a><br> Member address: <a href=3D"mailto:[email protected]" rel=3D"noreferrer n= oreferrer noreferrer noreferrer" target=3D"_blank">[email protected]</a>= <br> </blockquote></div></div></div> </blockquote></div> _______________________________________________<br> Edu-sig mailing list -- <a href=3D"mailto:[email protected]" target=3D"_bl= ank" rel=3D"noreferrer">[email protected]</a><br> To unsubscribe send an email to <a href=3D"mailto:[email protected]"= target=3D"_blank" rel=3D"noreferrer">[email protected]</a><br> <a href=3D"https://mail.python.org/mailman3//lists/edu-sig.python.org" rel= =3D"noreferrer noreferrer" target=3D"_blank">https://mail.python.org/mailma= n3//lists/edu-sig.python.org</a><br> Member address: <a href=3D"mailto:[email protected]" target=3D"_blank" rel= =3D"noreferrer">[email protected]</a><br> </blockquote></div> --0000000000001dafc406382d0c9f-- --===============9016105924891512292== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Edu-sig mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/edu-sig.python.org Member address: [email protected] --===============9016105924891512292==--