[Tutor] Python, VB math simple problem
Kent Johnson
kent37 at tds.net
Sat Apr 1 14:56:23 CEST 2006
Mr X wrote:
>
>
> Hi looking for help with what should be a fairly simple Python problem,
> relating to VB inter-operability.
> Got a great response from a fellow named Matt at help at python.org,
> pointed me in some good directions - some areas, concerns still foggy
> on, the below thread is included.... any feedback on this simple dilemma
> would be very appreciated.
You can use py2exe to make an executable from a python program. Or the
VB program could invoke a command line like "python prog.py data.txt"
without needing to use py2exe. You can also write COM servers in Python.
Kent
>
> Thanks,
>
> D
>
> thread follows below;
>
> ------------------------------------
>
> To: help at python.org
> Subject: Problem with Python math functions and VB
> Date: 3/30/2006 9:39:28 PM
> Download Message Display Headers Printer Friendly
> Previous | Next
>
> Wondering if you might either know how to solve the following.
>
> I've a background in Visual Basic, and am using an old version, 4.0, it
> compiles to a smaller executable which I prefer. I find myself in an odd
> situation, needing a very simple yet powerful capability of Python for a
> VB app
> Im working on.
>
> Simply, a large 300 digit number is divided by a smaller number ranging
> from 1 to 3 digits. I.e;
>
> This large 300 digit number is generated as a string from the VB app,
> and I want to input this somehow
> from the VB app directly to Python for simple math operations.
>
> Where; x = 300 digit number, y = divisor ( say '37')
>
>
> x / 37
>
> I want to divide x by y but I want the remainder of this division to at
> least 3 or 4 decimal places, so my Python script at the command line;
>
> x %y /y. = z
>
> So now I want to take the resultant, the full number plus its remainder,
> and I want to round this number up
> to the next highest number and divide it by the same constant;
>
> z rounded up to next highest number (never the lowest)
>
> so
>
> z /y = z Long
>
> Remove the 'L' at the end, round up the last digit of z = Z
>
> Then;
>
> Z %y /y. = a
>
> Then I want the last five digits of z (not Z) and a truncated at the
> end, so the last digit before
> the decimal point and the four digits past the decimal point printed to
> a text file.
>
> I want to be able to open the text file with the VB app and use this
> data as inputs.
> ==========
>
> Ok, so here is my dilemma, I know VERY litle about Python and a fair bit
> about VB.
>
> Ideally, I'd love to be able to simply have some extremely small
> executable that just accepts inputs
> does the calculations above and then spits out the outputs. If it were
> possible to write some
> simple lines of math code in Python and then compile these scripts in
> Python to a Windows
> compatible executable,that would be fantastic.
>
> If I could simply have my VB app, 'call' the name of the tiny Python
> executable, and then the Python executable
> just automatically looked for a named text file (created by the VB app)
> and extracted the 300 digit number from this, then performed the calcs,
> then spit this data out as a new text file name it created, which I
> could then use the VB app to open and read from, THAT would be ideal.
>
> However, I don't know if Python can compile scripts to an exe? If it can
> how could I find out how to do this?
>
> If it doesn't, how could I get VB to directly pass commands to the
> Python command line and then automatically
> extract the outputs? Shelling out from VB to Python would be tough to
> the command line I think, since the Python command line uses the 'Edit /
> Mark, Paste' approach to inserting, copy inputs, outputs and this would
> be virtually untenable, as far as I can tell to automate in a VB shell
> out routine.
>
> So basically, how the heck can I access Pythons ability to perform
> simple calculations on very large numbers, easily, from within VB 4.0 ?
> There must be a way, it seems like such a simple think to do, especially
> since the actual math operations are so simple, straight forward, and
> would never change.....
>
> Any ideas?
>
>
>
> ------
> Matthew, thanks for your response.
>
> <-----Original Message----->
> >From: Matthew Dixon Cowles
> >Sent: 3/31/2006 9:41:18 AM
> >To: durango at mail2world.com
> >Cc: help at python.org
> >Subject: Re: [Python-Help] Problem with Python math functions and VB
>
> >I'm sure that there's a way to do that, but I'm not familiar with
> >Visual Basic and I don't know what inter-process communication
> >facilities it offers.
>
> Is there a person or group you might direct me to that has worked with this
> inter-process communication between VB and Python?
>
> >I don't think that Python is going to be able to do that for you out
> >of the box. Hundreds of digits of floating-point precision is a lot.
>
> Could you explain that a bit more, sorry Im not sure what you mean
> by 'out of the box' ? If I run the Python command line screen in windows
> and manually type out a very large number, say 180 digits; where 'X' =
> very large number;
>
> X %37 /37.
>
> returns what Im after, value wise..... but of course I don't want to do
> this manually each time
> for every dividend.
>
> >You might find that one of the Python modules that let you use an
> >extended-precision library would do what you want. GMPY is one:
>
> >http://gmpy.sourceforge.net/
>
> Hey, thats interesting, wonder if these modules can be operated on with
> VB.....
>
> >> So now I want to take the resultant, the full number plus its
> >> remainder, and I want to round this number up
> >> to the next highest number and divide it by the same constant;
> >
> >That's easy enough.
> >
> >> I want to be able to open the text file with the VB app and use this
> >> data as inputs.
> >
> >Python can write to a file without any trouble, so it that form of
> >inter-process communication suits you, you shouldn't have much
> >trouble. I assume that Visual Basic has an easy way to start a
> >program and supply it with arguments, so you could have your Python
> >program get its inputs from sys.argv.
>
> What is sys.argv ? Thats really good news. In fact, all I really need
> for the moment is
> a python executable that;
>
> ================
> PYTHON ALGORITHM ABSTRACT
>
> a) opens a text file
> b) reads a string from the file, which is a very large number
> c) performs simple arithmetic operations;
>
> X %37 /37. = y (four digit remainder after decimal point)
> X /37 = w (quotient as long, the resulting output is stored as a
> variable, the 'L' suffix tagged on the end of this resultant then gets
> removed.
> then the last digit in the quotient resultant string is increased in
> value by one, rounded upwards = 'Z'
>
> then
>
> Z %37 /37. = a
>
> then, y and a are printed to a text file with hard returns between them.
> Thats it, thats all I need to do.
> ===================
> >Alas, it's not going to be extremely small. There isn't a compiler
> >from Python to machine code. Py2exe will bundle a Python program,
> >with everything that it needs to run, into a single executable
> >archive. But the archive isn't small. Py2exe is at:
> >
> >http://www.py2exe.org/
>
> the most important thing is the functionality, I'll sacrifice size if I
> have to. My guess is this should work based on your comments, because
> perhaps all I really have to do is have VB dump out the value of the
> Very large number, `180 to 300 digits or so', to a text file, which then
> becomes the input data for the Python executable, and then if I simply
> call the name of the Python executable from VB as an instance,
> then the Python App runs, spits out the data as a new text file, then
> the VB app goes and opens the new text file and reads in the values,
> and voila! There it is. I'm pretty sure I can call the Python app from
> VB....... the alternative to all this would be to try and feed Python
> scripts
> directly to Python from VB, which I have NO idea how to do or where to
> begin.... and am guessing would be much more messy...
>
> I haven't programmed in Python, how would the "PYTHON ALGORITHM
> ABSTRACT" I describe above look like, code wise?
> Is this fairly easy for you to describe?
>
> >It may be that Python isn't the best solution for you here. Are there
> >extended-precision libraries for Visual Basic?
>
> Alas, none that I know of that are reliable and not incredibly
> expensive, been looking for years, plus Im hooped because I have to work
> with VB 4.0 instead of 6 +, guh....
>
> >Regards,
> >Matt
>
> Matt..... good name, why do I always seem to get along with Matts, you
> people keep popping up in my life and its always a blast!
>
> Best regards,
>
> D
>
> _______________________________________________________________
> Get the FREE email that has everyone talking at http://www.mail2world.com
> Unlimited Email Storage – POP3 – Calendar – SMS – Translator – Much More!
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
More information about the Tutor
mailing list