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 &lt;<a href=3D"mailto:[email protected]">[email protected]</a>&gt; 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&#39;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&#39;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>&gt; 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(&quot;It did not raise 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 interrupted on Exception&quot;)</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">&quot;Write 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:edu-sig@python.=
org" rel=3D"noreferrer noreferrer noreferrer" target=3D"_blank">edu-sig@pyt=
hon.org</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-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&#3=
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&#39;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==--