HP Forums
Error is not an Error? - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: Error is not an Error? (/thread-17119.html)



Error is not an Error? - toml_12953 - 06-17-2021 05:13 AM

When I enter the code blow, I check it and get no errors in the HPPL editor. When I try to run it, however, I get a syntax error in line 51. It works in CPython.

Traceback (most recent call last):
File "<stdin>", line 51
SyntaxError: invalid syntax

Code:
#PYTHON name
# cubic
from math import *

# compute real or complex roots of cubic polynomial
def cubic( a2, a1, a0 ):
    global z1,z2,z3
    Q = (3*a1 - a2**2)/9
    R = (9*a1*a2 - 27*a0 - 2*a2**3)/54
    D = Q**3 + R**2                        # polynomial discriminant

    if (D >= 0):                           # complex or duplicate roots

        S = sgn(R + sqrt(D))*abs(R + sqrt(D))**(1/3)
        T = sgn(R - sqrt(D))*abs(R - sqrt(D))**(1/3)

        z1 = -a2/3 + (S + T)               # real root
        z2 = -a2/3 - (S + T)/2             # real part of complex root
        z3 = -a2/3 - (S + T)/2             # real part of complex root
        im = abs(sqrt(3)*(S - T)/2)        # complex part of root pair

    else:                                  # distinct real roots

        th = acos(R/sqrt( -Q**3))
        
        z1 = 2*sqrt(-Q)*cos(th/3) - a2/3
        z2 = 2*sqrt(-Q)*cos((th + 2*pi)/3) - a2/3
        z3 = 2*sqrt(-Q)*cos((th + 4*pi)/3) - a2/3
        im = 0


    return im                               # imaginary part

# sign of number
def sgn( x ):
    if x < 0.0:
        return -1

    return 1


print("solve: x^3 + a*x^2 + b*x + c = 0")
a,b,c = input("a,b,c? ").split(",")

a=int(a)
b=int(b)
c=int(c)

im = cubic( a, b, c )

if im != 0.0:
    print("{",f"{z1:6.4f}, {z2:6.4f} + {im:6.4f}j, {z3:6.4f} - {im:6.4f}j","}")
else:
    print("{",f"{z1:6.4f}, {z2:6.4f}, {z3:6.4f}","}")
    
#end

EXPORT cubic()
BEGIN
  PYTHON(name);
END;



RE: Error is not an Error? - Liamtoh Resu - 06-17-2021 08:48 AM

I was able to reproduce your results.

BTW your code runs ok with python 3.9.4 on the pc after PPL wrapper code is removed.

My guess is that the hp prime python may not support the split and formatting codes,
but I will have to create some small programs to confirm or refute that theory.

What is the HPPL editor?

Thanks.


RE: Error is not an Error? - Albert Chan - 06-17-2021 10:46 AM

HP Prime Python (micro Python?) might not support f string

Try string interpolation with format(), or %

On Python 2.6:

>>> z1, z2, z3, im = 1,2,3,4
>>> print "{ %6.4f, %6.4f + %6.4fj, %6.4f - %6.4fj }" % (z1,z2,im,z3,im)
{ 1.0000, 2.0000 + 4.0000j, 3.0000 - 4.0000j }


RE: Error is not an Error? - Thomas_Sch - 06-17-2021 11:32 AM

HP-Prime python is micropython. (http://micropython.org/; https://docs.micropython.org)
Micropython is based on Python 3.4. (see Help > Tree > HP apps > Python app > OK, page 2)
You may check this:
Code:
from sys import *
print(version_info)

F-string literals have been added to python since python 3.6.
You can check more about it here (https://www.python.org/dev/peps/pep-0498/)
(from https://stackoverflow.com/questions/50401632/f-strings-giving-syntaxerror)


RE: Error is not an Error? - toml_12953 - 06-17-2021 02:28 PM

(06-17-2021 08:48 AM)Liamtoh Resu Wrote:  I was able to reproduce your results.

BTW your code runs ok with python 3.9.4 on the pc after PPL wrapper code is removed.

My guess is that the hp prime python may not support the split and formatting codes,
but I will have to create some small programs to confirm or refute that theory.

What is the HPPL editor?

Thanks.

From Home screen, press Shift then 1. Now press New and you're in the HPPL editor.


RE: Error is not an Error? - toml_12953 - 06-17-2021 02:57 PM

(06-17-2021 11:32 AM)Thomas_Sch Wrote:  HP-Prime python is micropython. (http://micropython.org/; https://docs.micropython.org)
Micropython is based on Python 3.4. (see Help > Tree > HP apps > Python app > OK, page 2)
You may check this:
Code:
from sys import *
print(version_info)

F-string literals have been added to python since python 3.6.
You can check more about it here (https://www.python.org/dev/peps/pep-0498/)
(from https://stackoverflow.com/questions/50401632/f-strings-giving-syntaxerror)

OK, I changed the format statements to the old method. Now I get an error on the input() statement. I try to enter -2,1,-2 and it enters Ans-2 for the first number.


RE: Error is not an Error? - Didier Lachieze - 06-17-2021 03:01 PM

(06-17-2021 02:57 PM)toml_12953 Wrote:  OK, I changed the format statements to the old method. Now I get an error on the input() statement. I try to enter -2,1,-2 and it enters Ans-2 for the first number.

You need to enter -2 with [2] [+/-] or [+/-] [2], not with [-] [2]. If you start the entry with an operator key (+, -, x, /) the Prime will assume you want to apply this operator to the previous result (Ans).


RE: Error is not an Error? - Liamtoh Resu - 06-17-2021 06:30 PM

Here is a small python program that calculates the average of three numbers
entered by the user.

Code:

#PYTHON name
# avg3nr02
import math
def pintro():
  print("average three numbers")

def enter_3():
   a,b,c = input("a,b,c? ").split(",")
   print(" " + a + ", " + b + ", " + c)
   return (int(a)+ int(b) +int(c))/3

  
def pout():
   q = enter_3()
   print("the average is ",q)
   
pintro()

pout()

#end 
 
EXPORT avg3nr02()
BEGIN
  PRINT;
  PYTHON(name);
END;


And another version that provides formatted output.

Code:

#PYTHON name
# avg3nr03
import math
def pintro():
  print("average three numbers")

def enter_3():
   a,b,c = input("a,b,c? ").split(",")
   print(" " + a + ", " + b + ", " + c)
   return (float(a)+ float(b) + float(c))/3

  
def pout():
   q = enter_3()
   print("the average is {0:.5f}".format(q))
   
pintro()

pout()

#end 
 
EXPORT avg3nr03()
BEGIN
  PRINT;
  PYTHON(name);
END;

And thanks for the nomenclature for HPPL.

Thanks.


RE: Error is not an Error? - Albert Chan - 06-20-2021 03:25 PM

(06-17-2021 03:01 PM)Didier Lachieze Wrote:  You need to enter -2 with [2] [+/-] or [+/-] [2], not with [-] [2]. If you start the entry with an operator key (+, -, x, /) the Prime will assume you want to apply this operator to the previous result (Ans).

You can also enter a space before [-] [2]