Re: Using Python as a Calculator

Wes Turner via Edu-sig <[email protected]> Sun, 22 Jun 2025 14:00:46 -0400
Newsgroups gmane.comp.python.education
Message-ID <CACfEFw-FR5+d-PNDO62DjVezmuaRqiqDtfEia7RvmaCGzeHY1w@mail.gmail.com>
--===============7310254313674800508==
Content-Type: multipart/alternative; boundary="0000000000008f400906382ce08b"

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

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]> wro=
te:

> 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 contro=
l
> 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/OYZ2QPDY=
DFRV2PPJXEOHUTFWFPZVOCJO/
>
> 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@py=
thon.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]
>>
>

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

<div dir=3D"auto">Here&#39;s the link to that PR, which makes things testab=
le 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" =
target=3D"_blank" rel=3D"noreferrer">https://github.com/4dsolutions/python_=
camp/pull/4</a></div><div dir=3D"auto"><br></div><div dir=3D"auto">... @sta=
ticmethod 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"gmail_=
quote"><div dir=3D"ltr" class=3D"gmail_attr">On Sun, Jun 22, 2025, 1:52=E2=
=80=AFPM Wes Turner &lt;<a href=3D"mailto:[email protected]" target=3D"_=
blank" rel=3D"noreferrer">[email protected]</a>&gt; wrote:<br></div><blo=
ckquote 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"auto"><div dir=3D=
"auto">How to best phase in Python?</div><div dir=3D"auto"><br></div><div d=
ir=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><di=
v 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 Tr=
ue</div><div dir=3D"auto"><br></div><div dir=3D"auto">print(1+1 =3D=3D True=
)</div><div dir=3D"auto"><br></div><div dir=3D"auto">assert 1+1 =3D=3D True=
</div><div 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 AssertionErr=
or is an Exception, and control flow is interrupted on Exception&quot;)</di=
v><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 assumptions about types and value=
s of parameters and return values at runtime; we check preconditions and po=
st conditions.</div><div dir=3D"auto"><br></div><div dir=3D"auto">I am remi=
nded of camper_program.py from 2020:=C2=A0</div><a href=3D"https://mail.pyt=
hon.org/archives/list/[email protected]/message/OYZ2QPDYDFRV2PPJXEOHUTFWFP=
ZVOCJO/" rel=3D"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" 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"><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"fon=
t-family:verdana,sans-serif;font-size:small">From an educator&#39;s perspec=
tive, 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 class=3D"gmail_default" style=3D"font-family:verdana,=
sans-serif;font-size:small">One answer is: use it the same way you might us=
e a calculator in the classroom, but show off why it&#39;s better.</div><di=
v 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">An example (new today) of what I share with my=
 student and peer faculty, 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_default" style=3D"font-family:verdana,sans-serif;font-=
size:small"><a href=3D"https://github.com/4dsolutions/School_of_Tomorrow/bl=
ob/master/smod_play.py" rel=3D"noreferrer noreferrer noreferrer" target=3D"=
_blank">https://github.com/4dsolutions/School_of_Tomorrow/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+ geo=
metric content already familiar to those using my curriculum.</div><div cla=
ss=3D"gmail_default" style=3D"font-family:verdana,sans-serif;font-size:smal=
l"><br></div><div class=3D"gmail_default" style=3D"font-family:verdana,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-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" 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 n=
oreferrer noreferrer" target=3D"_blank">[email protected]</a><br>
</blockquote></div></div></div>
</blockquote></div>

--0000000000008f400906382ce08b--

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

--===============7310254313674800508==--