HP Forums

Full Version: Error is not an Error?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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;
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.
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 }
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/5040...yntaxerror)
(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.
(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/5040...yntaxerror)

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.
(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).
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.
(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]
Reference URL's