Re: Using Python as a Calculator

Jorge Garcia via Edu-sig <[email protected]> Sun, 22 Jun 2025 14:17:04 -0400
Newsgroups gmane.comp.python.education
Message-ID <CAPkJXS0hst=qaDOunJfJPuELnPdW+kJi-8h45-LCHFEEw9xA5g@mail.gmail.com>
--===============1524684400307074715==
Content-Type: multipart/alternative; boundary="000000000000f05b0c06382d1ab3"

--000000000000f05b0c06382d1ab3
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

https://colab.research.google.com/drive/1Gbc1TbCr6FabIWkr_HnCu7R2x1FcLnHz

On Sun, Jun 22, 2025, 2:12=E2=80=AFPM Jorge Garcia <[email protected]> wro=
te:

> 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@pyt=
hon.org>
> wrote:
>
>> Here's the link to that PR, which makes things testable and then verifie=
s
>> 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/OYZ2QP=
DYDFRV2PPJXEOHUTFWFPZVOCJO/
>>>
>>> Maybe a good prompt to lock in that automated testing is much more
>>> efficient than attempting to manually test everything after every chang=
e:
>>>
>>> "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_pla=
y.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]
>>
>

--000000000000f05b0c06382d1ab3
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<p dir=3D"ltr"><a href=3D"https://colab.research.google.com/drive/1Gbc1TbCr=
6FabIWkr_HnCu7R2x1FcLnHz">https://colab.research.google.com/drive/1Gbc1TbCr=
6FabIWkr_HnCu7R2x1FcLnHz</a></p>
<br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=
=3D"gmail_attr">On Sun, Jun 22, 2025, 2:12=E2=80=AFPM Jorge Garcia &lt;<a h=
ref=3D"mailto:[email protected]">[email protected]</a>&gt; 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">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" target=3D"_blank" rel=3D"noreferrer">colab.rese=
arch.google.com</a> makes it executable in your browser 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 &lt;<a href=3D"mailt=
o:[email protected]" target=3D"_blank" rel=3D"noreferrer">[email protected]=
rg</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"auto"=
>Here&#39;s the link to that PR, which makes things testable and then verif=
ies with test assertions:<div dir=3D"auto"><br></div><div dir=3D"auto"><a h=
ref=3D"https://github.com/4dsolutions/python_camp/pull/4" rel=3D"noreferrer=
 noreferrer noreferrer" target=3D"_blank">https://github.com/4dsolutions/py=
thon_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&#=
39;t take self as the first parameter.=C2=A0</div></div><br><div class=3D"g=
mail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Sun, Jun 22, 2025, 1:5=
2=E2=80=AFPM Wes Turner &lt;<a href=3D"mailto:[email protected]" rel=3D"=
noreferrer noreferrer noreferrer" target=3D"_blank">[email protected]</a=
>&gt; 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-left:1ex"><di=
v 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"a=
uto">print(1+1 =3D=3D True)</div><div dir=3D"auto"><br></div><div dir=3D"au=
to">assert 1+1 =3D=3D True</div><div dir=3D"auto">print(&quot;It did not ra=
ise AssertionError&quot;)</div><div dir=3D"auto"><br></div><div dir=3D"auto=
">assert 1+1 =3D=3D False</div><div dir=3D"auto">print(&quot;This won&#39;t=
 run, because AssertionError is an Exception, and control flow is interrupt=
ed on Exception&quot;)</div><div dir=3D"auto"><br></div><div dir=3D"auto"><=
br></div><div dir=3D"auto"># %%</div><div dir=3D"auto">import unittest</div=
><div dir=3D"auto">test =3D unittest.TestCase()</div><div dir=3D"auto"><br>=
</div><div dir=3D"auto">test.assertEqual(1+1, 0)</div><div dir=3D"auto">```=
</div><div dir=3D"auto"><br></div><div dir=3D"auto">We verify our assumptio=
ns about types and values of parameters and return values at runtime; we ch=
eck preconditions and post conditions.</div><div dir=3D"auto"><br></div><di=
v dir=3D"auto">I am reminded of camper_program.py from 2020:=C2=A0</div><a =
href=3D"https://mail.python.org/archives/list/[email protected]/message/OY=
Z2QPDYDFRV2PPJXEOHUTFWFPZVOCJO/" rel=3D"noreferrer noreferrer noreferrer no=
referrer" target=3D"_blank">https://mail.python.org/archives/list/edu-sig@p=
ython.org/message/OYZ2QPDYDFRV2PPJXEOHUTFWFPZVOCJO/</a><div dir=3D"auto"><b=
r></div><div dir=3D"auto">Maybe a good prompt to lock in that automated tes=
ting is much more efficient than attempting to manually test everything aft=
er every change:</div><div dir=3D"auto"><br></div><div dir=3D"auto">&quot;W=
rite your own test assertion library; starting with `def assertEqual(a, b, =
msg)`&quot;<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 &lt;<a href=3D"mailto:[email protected]" rel=3D"noreferrer norefe=
rrer noreferrer noreferrer" target=3D"_blank">[email protected]</a>&gt; wr=
ote:<br></div><blockquote class=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=
"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-famil=
y:verdana,sans-serif;font-size:small">From an educator&#39;s perspective, h=
ow 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 class=3D"gmail_default" style=3D"font-family:verdana,sans-s=
erif;font-size:small">One answer is: use it the same way you might use a ca=
lculator in the classroom, but show off why it&#39;s better.</div><div clas=
s=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">An example (new today) of what I share with my stude=
nt and peer faculty, perhaps new to Python:</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"><a href=3D"https://github.com/4dsolutions/School_of_Tomorrow/blob/mas=
ter/smod_play.py" rel=3D"noreferrer noreferrer noreferrer noreferrer norefe=
rrer" target=3D"_blank">https://github.com/4dsolutions/School_of_Tomorrow/b=
lob/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_d=
efault" style=3D"font-family:verdana,sans-serif;font-size:small">A mix of P=
ython=C2=A0+ geometric content already familiar to those using my curriculu=
m.</div><div class=3D"gmail_default" style=3D"font-family:verdana,sans-seri=
f;font-size:small"><br></div><div class=3D"gmail_default" style=3D"font-fam=
ily:verdana,sans-serif;font-size:small">The docstring itself contains a lin=
k 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=
-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 noreferrer" target=3D"_blank">edu-sig=
@python.org</a><br>
To unsubscribe send an email to <a href=3D"mailto:[email protected]"=
 rel=3D"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" targ=
et=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 n=
oreferrer noreferrer noreferrer noreferrer" target=3D"_blank">wes.turner@gm=
ail.com</a><br>
</blockquote></div></div></div>
</blockquote></div>
_______________________________________________<br>
Edu-sig mailing list -- <a href=3D"mailto:[email protected]" rel=3D"norefe=
rrer noreferrer" target=3D"_blank">[email protected]</a><br>
To unsubscribe send an email to <a href=3D"mailto:[email protected]"=
 rel=3D"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" 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" target=3D"_blank">[email protected]</a><br>
</blockquote></div>
</blockquote></div>

--000000000000f05b0c06382d1ab3--

--===============1524684400307074715==
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]

--===============1524684400307074715==--