Thanks Peter, that did the trick. You've got here a very happy 8-year old and a mighty relieved 46-year old!!
On Saturday, January 25, 2014 10:41:20 AM UTC, Peter Otten wrote: > justinpmull...@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. -- https://mail.python.org/mailman/listinfo/python-list