Python to RPN converter

Discussion around the Swiss Micros DM42 calculator.
wawachief
Posts: 25
Joined: Tue Dec 12, 2017 6:39 pm
Location: France, Normandie

Re: Python to RPN converter

Post by wawachief » Tue Feb 20, 2018 1:55 pm

I am trying another program, this time using lists :

Code: Select all

LBL("ampoule")
ampoules=[]
nb=276
somme=0

for i in range(nb):
    ampoules.append(0)
    
for e in range(1,26):
    i=e-1 
    while i<nb:
        ampoules[i]=1-ampoules[i]
        i+=e 

for i in range(nb):
  somme += ampoules[i]
    
print(somme)
This time, the program is converted into RPN but I have a Dimension Error during execution. This program works fine in Python.
DM42 SN:00218
HP-11c - HP-19b - HP25 - HP 45 - HP42s - HP48gx

toml_12953
Posts: 426
Joined: Wed May 03, 2017 5:46 pm
Location: Malone, NY USA

Re: Python to RPN converter

Post by toml_12953 » Tue Feb 20, 2018 2:30 pm

wawachief wrote:
Tue Feb 20, 2018 1:36 pm
This is an incredible work ! thank you.

I try to convert a simple program to find the sum of all divisors of a given integer, just for testing :

Code: Select all

LBL("test")
print(sommediv(2016))

def sommediv(n):
  res = 0
  for d in range(2, n):
    if n%d == 0:
      res += d
  return res
But unfortunatly, I get an error :
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
Am I doing something wrong ?
If you're doing something wrong, then so am I. I get the same error.
Tom L

आपका दिन शुभ हो
DM42 SN: 00025 (Beta)
SN: 00221 (Shipping)

tcab
Posts: 12
Joined: Sun Jan 14, 2018 11:03 am

Re: Python to RPN converter

Post by tcab » Tue Feb 20, 2018 11:32 pm

I try to convert a simple program to find the sum of all divisors of a given integer, just for testing
The Python % operator (modulo) was not being converted to RPN’s MOD - this has now been fixed. Please try it again!

Note that at runtime you will get an error about for loops being limited to a thousand, so sommediv(2016) will hit this limit but sommediv(1000) will be OK and give the answer 1339. This is because under the hood, for range loops are implemented with RPN's ISG command, which seems to have a range limit of 1000 due to the ISG ccccccc.fffii format of fff.  If you want to loop more than 1000 times then using a while loop instead of a for loop, which has no such limitations. e.g.

Code: Select all

LBL("test")
print(sommediv(2016))

def sommediv(n):
  res = 0
  d = 2
  while d < n:
    if n%d == 0:
      res += d
    d += 1
  return res

tcab
Posts: 12
Joined: Sun Jan 14, 2018 11:03 am

Re: Python to RPN converter

Post by tcab » Tue Feb 20, 2018 11:43 pm

I am trying another program, this time using lists...LBL("ampoule")
Converts and runs fine for me on Free42, giving the answer 154. Can you please tell me which line number of the RPN it is failing on? Thanks.

wawachief
Posts: 25
Joined: Tue Dec 12, 2017 6:39 pm
Location: France, Normandie

Re: Python to RPN converter

Post by wawachief » Wed Feb 21, 2018 1:12 pm

Everything works fine now. I tried the "ampoule" program again and it works on free42 and on the dm42. I don't know what I did wrong yesterday :(
The sommediv program works fine too, the pb is fixed. Thank you.

By the way, maybe it would be useful to open a new subforum to post Python programs ? something like "Python Software Library" ? I think this Python2RPN converter is really useful to design quickly lots of new programs.
DM42 SN:00218
HP-11c - HP-19b - HP25 - HP 45 - HP42s - HP48gx

tcab
Posts: 12
Joined: Sun Jan 14, 2018 11:03 am

Re: Python to RPN converter

Post by tcab » Wed Feb 21, 2018 10:30 pm

new subforum to post Python programs
Sounds good - not sure how to set that up - have PM'd you to discuss.

Alternatively, people can create examples on the Python to RPN website itself, and when they are voted for (there is a link under each user created example to vote), they can become part of the permanent collection of examples. Feel free to add examples and vote on your own examples!

Post Reply