Re: Using Python as a Calculator
Jorge Garcia via Edu-sig <[email protected]> Sun, 22 Jun 2025 14:30:45 -0400
| Newsgroups | gmane.comp.python.education |
|---|---|
| Message-ID | <CAPkJXS1wsSzOC9weF5UA9aVkrkXbP-WKEUBOUWfiWdh3Bn5p4w@mail.gmail.com> |
--===============7422467923828525751== Content-Type: multipart/alternative; boundary="000000000000d19cd806382d4b8b" --000000000000d19cd806382d4b8b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Beautiful, no? On Sun, Jun 22, 2025, 2:17=E2=80=AFPM Jorge Garcia <[email protected]> wro= te: > https://colab.research.google.com/drive/1Gbc1TbCr6FabIWkr_HnCu7R2x1FcLnHz > > On Sun, Jun 22, 2025, 2:12=E2=80=AFPM Jorge Garcia <[email protected]> w= rote: > >> 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@py= thon.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]>= wrote: >>> >>>> 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 >>>> return 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/OYZ2Q= PDYDFRV2PPJXEOHUTFWFPZVOCJO/ >>>> >>>> Maybe a good prompt to lock in that automated testing is much more >>>> efficient than attempting to manually test everything after every chan= ge: >>>> >>>> "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 < >>>> [email protected]> 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_pl= ay.py >>>>> >>>>> A mix of Python + geometric content already familiar to those using m= y >>>>> 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] >>> >> --000000000000d19cd806382d4b8b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <p dir=3D"ltr">Beautiful, no?</p> <br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class= =3D"gmail_attr">On Sun, Jun 22, 2025, 2:17=E2=80=AFPM Jorge Garcia <<a h= ref=3D"mailto:[email protected]">[email protected]</a>> wrote:<br></di= v><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:= 1px #ccc solid;padding-left:1ex"><p dir=3D"ltr"><a href=3D"https://colab.re= search.google.com/drive/1Gbc1TbCr6FabIWkr_HnCu7R2x1FcLnHz" target=3D"_blank= " rel=3D"noreferrer">https://colab.research.google.com/drive/1Gbc1TbCr6FabI= Wkr_HnCu7R2x1FcLnHz</a></p> <br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Sun= , Jun 22, 2025, 2:12=E2=80=AFPM Jorge Garcia <<a href=3D"mailto:calcpage= @gmail.com" target=3D"_blank" rel=3D"noreferrer">[email protected]</a>>= wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8= ex;border-left:1px #ccc solid;padding-left:1ex"><p dir=3D"ltr">Share code o= n github is all well and good, but sharing in a Jupyter Notebook such as <a= href=3D"http://colab.research.google.com" rel=3D"noreferrer noreferrer" ta= rget=3D"_blank">colab.research.google.com</a> makes it executable in your b= rowser right away!</p> <br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Sun= , Jun 22, 2025, 2:01=E2=80=AFPM Wes Turner via Edu-sig <<a href=3D"mailt= o:[email protected]" rel=3D"noreferrer noreferrer" target=3D"_blank">edu-s= [email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_quote" sty= le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div d= ir=3D"auto">Here's the link to that PR, which makes things testable and= then verifies with test assertions:<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 noreferrer noreferrer" target=3D"_blank">https://git= hub.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 o= n a class that doesn't take self as the first parameter.=C2=A0</div></d= iv><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On = Sun, Jun 22, 2025, 1:52=E2=80=AFPM Wes Turner <<a href=3D"mailto:wes.tur= [email protected]" rel=3D"noreferrer noreferrer noreferrer noreferrer" target= =3D"_blank">[email protected]</a>> wrote:<br></div><blockquote class= =3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg= b(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">I= t 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><di= v 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)</d= iv><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><div d= ir=3D"auto"><br></div><div dir=3D"auto">assert 1+1 =3D=3D True</div><div di= r=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 Exce= ption, and control flow is interrupted on Exception")</div><div dir=3D= "auto"><br></div><div dir=3D"auto"><br></div><div dir=3D"auto"># %%</div><d= iv dir=3D"auto">import unittest</div><div dir=3D"auto">test =3D unittest.Te= stCase()</div><div dir=3D"auto"><br></div><div dir=3D"auto">test.assertEqua= l(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 parameters= and return values at runtime; we check preconditions and post conditions.<= /div><div dir=3D"auto"><br></div><div dir=3D"auto">I am reminded of camper_= program.py from 2020:=C2=A0</div><a href=3D"https://mail.python.org/archive= s/list/[email protected]/message/OYZ2QPDYDFRV2PPJXEOHUTFWFPZVOCJO/" rel=3D= "noreferrer noreferrer noreferrer noreferrer noreferrer" target=3D"_blank">= https://mail.python.org/archives/list/[email protected]/message/OYZ2QPDYDF= RV2PPJXEOHUTFWFPZVOCJO/</a><div dir=3D"auto"><br></div><div dir=3D"auto">Ma= ybe a good prompt to lock in that automated testing is much more efficient = than attempting to manually test everything after every change:</div><div d= ir=3D"auto"><br></div><div dir=3D"auto">"Write your own test assertion= library; starting with `def assertEqual(a, b, msg)`"<br><br><div clas= s=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"mail= to:[email protected]" rel=3D"noreferrer noreferrer noreferrer noreferrer n= oreferrer" target=3D"_blank">[email protected]</a>> wrote:<br></div><bl= ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef= t:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><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-s= erif;font-size:small">From an educator'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-serif;font-size:small"><br></div><div c= lass=3D"gmail_default" style=3D"font-family:verdana,sans-serif;font-size:sm= all">One answer is: use it the same way you might use a calculator in the c= lassroom, but show off why it's better.</div><div class=3D"gmail_defaul= t" 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:s= mall">An example (new today) of what I share with my student and peer facul= ty, perhaps new to Python:</div><div class=3D"gmail_default" style=3D"font-= family:verdana,sans-serif;font-size:small"><br></div><div class=3D"gmail_de= fault" style=3D"font-family:verdana,sans-serif;font-size:small"><a href=3D"= https://github.com/4dsolutions/School_of_Tomorrow/blob/master/smod_play.py"= rel=3D"noreferrer noreferrer noreferrer noreferrer noreferrer noreferrer" = target=3D"_blank">https://github.com/4dsolutions/School_of_Tomorrow/blob/ma= ster/smod_play.py</a></div><div class=3D"gmail_default" style=3D"font-famil= y: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 curriculum.</d= iv><div class=3D"gmail_default" style=3D"font-family:verdana,sans-serif;fon= t-size:small"><br></div><div class=3D"gmail_default" style=3D"font-family:v= erdana,sans-serif;font-size:small">The docstring itself contains 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:verdana,sans-serif= ;font-size:small"><br></div><div class=3D"gmail_default" style=3D"font-fami= ly:verdana,sans-serif;font-size:small">Kirby</div><div class=3D"gmail_defau= lt" style=3D"font-family:verdana,sans-serif;font-size:small"><br></div></di= v> _______________________________________________<br> Edu-sig mailing list -- <a href=3D"mailto:[email protected]" rel=3D"norefe= rrer noreferrer noreferrer noreferrer noreferrer noreferrer" target=3D"_bla= nk">[email protected]</a><br> To unsubscribe send an email to <a href=3D"mailto:[email protected]"= rel=3D"noreferrer noreferrer noreferrer noreferrer noreferrer noreferrer" = target=3D"_blank">[email protected]</a><br> <a href=3D"https://mail.python.org/mailman3//lists/edu-sig.python.org" rel= =3D"noreferrer noreferrer noreferrer noreferrer noreferrer noreferrer noref= errer" target=3D"_blank">https://mail.python.org/mailman3//lists/edu-sig.py= thon.org</a><br> Member address: <a href=3D"mailto:[email protected]" rel=3D"noreferrer n= oreferrer noreferrer noreferrer noreferrer noreferrer" target=3D"_blank">we= [email protected]</a><br> </blockquote></div></div></div> </blockquote></div> _______________________________________________<br> Edu-sig mailing list -- <a href=3D"mailto:[email protected]" rel=3D"norefe= rrer 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" target=3D"_blank">edu-sig-leave@p= ython.org</a><br> <a href=3D"https://mail.python.org/mailman3//lists/edu-sig.python.org" rel= =3D"noreferrer noreferrer noreferrer noreferrer" target=3D"_blank">https://= mail.python.org/mailman3//lists/edu-sig.python.org</a><br> Member address: <a href=3D"mailto:[email protected]" rel=3D"noreferrer nor= eferrer noreferrer" target=3D"_blank">[email protected]</a><br> </blockquote></div> </blockquote></div> </blockquote></div> --000000000000d19cd806382d4b8b-- --===============7422467923828525751== 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] --===============7422467923828525751==--