Help with my 8-year old son's first program. I'm stuck!
Peter Otten
__peter__ at web.de
Sat Jan 25 05:41:20 EST 2014
justinpmullins at gmail.com wrote:
> My son is learning Python and I know nothing about computers.
> He's written a simple calculator program that doesn't work.
Normally you are supposed to explain what you or your son expect and what
you get instead. If Python ends with an error you should paste that into
your message, e. g.:
Traceback (most recent call last):
File "calculator.py", line 29, in <module>
a()
File "calculator.py", line 14, in a
if op == str(d):
NameError: global name 'd' is not defined
Also, we need to know if you are using Python 2 or Python 3. Sometimes even
the exact version is important. You can find it out with
$ python3 -V
Python 3.2.2
> For the life
> of me, I can't see why. Any help gratefully received. Here's his code:
> def a():
> import sys
> print("welcome to the calculation")
> print("please type a number")
> one = int(sys.stdin.readline())
> print("type d for division,")
> print("type m for multiplication,")
> print("type s for subtraction,")
> print("and type p for plus")
> op = (sys.stdin.readline())
> print("%s selected" % op)
> print("please enter another number")
> two = int(sys.stdin.readline())
> if op == str(d):
The name d is defined nowhere in your script. That line should be
if op == "d":
similar to the `elif`s that follow.
> out == one / two
You want to assign to out but you are actually comparing out to one / two.
Change the line (and similar lines below) to a single =, e. g.
out = one / two
> print("the answer is %s" % out)
> elif op == "m":
> out == one * two
> print("the answer is %s" % out)
> elif op == "s":
> out == one - two
> print("the answer is %s" % out)
> elif op == "p":
> out == one + two
> print("the answer is %s" % out)
> else:
> print("huh")
Change the above line to
print("Unknown op=%r" % op)
and add a function invocation
a()
> Where is he going wrong?
> Many thanks in advance
When you run the script with my modifications
$ python3 calculator.py
welcome to the calculation
please type a number
10
type d for division,
type m for multiplication,
type s for subtraction,
and type p for plus
m
m
selected
please enter another number
20
Unknown op='m\n'
you see that what you supposed to be an "m" is actually an "m" followed by a
newline. The readline() method reads a line including the final newline.
You can remove that by changing the line
op = (sys.stdin.readline())
to
op = sys.stdin.readline().strip()
but a more straightforward approach would be to replace all occurences of
sys.stdin.readline()
with
input() # if you are using Python 3
or
raw_input() # if yo are using Python 2.
More information about the Python-list
mailing list