snag at jool.po
Mon Jun 23 04:41:28 CEST 2003
"Ben Finney" <bignose-hates-spam at and-zip-does-too.com.au> wrote in message
news:slrnbfcp0s.gfb.bignose-hates-spam at iris.polar.local...
> On Mon, 23 Jun 2003 01:44:54 +0100, kpop wrote:
> > Hi, i am writing a maths program where i get input from the user and
> > store it in a string. i then use the eval fucntion to return the right
> > answer.
> I wonder what sort of checking you're performing on the input, to
> prevent users typing anything they like and having Python happily eval()
I will check first that the string olny contains numbers or + - / * and
if not i wont eval() it i will report an error instead.
> > The problem is division, I would like it that only exact division was
> > aloud, I mean no remainders.
> Read about math.ceil() and math.floor():
> > In python "22 / 5" returs an int of 5
> Because both arguments to the division were specified as integers. If
> you make either argument a floating-point number, the result will also
> be floating-point.
> >>> 22 / 5
> >>> 22.0 / 5
> >>> 22 / 5.0
> >>> import math
> >>> math.floor( 22 / 5.0 )
> > i would like if that was illegal because 5 doesnt go into 22 , 4 times
> > exactly, and have the eval function raise an execption which i could
> > handle.
> You want different behaviour to the existing arithmetic operators, which
> try to return a meaningful result if possible, rather than raising an
> > any advice?
> I suppose you could create new numeric classes to raise exceptions when
> they received input you don't like, but it seems like a lot of effort.
> Better would be to validate the input better when it is received, so
> that you didn't pass undesired inputs to the arithmetic.
> Why not simply math.floor() the result, to force it to an integer?
> \ "Know what I hate most? Rhetorical questions." -- Henry N. |
> `\ Camp |
> _o__) |
> http://bignose.squidly.org/ 9CFE12B0 791A4267 887F520C B7AC2E51 BD41714B
thanks for the help, I think i will change all the numbers to floating
points then do the eval
and if the result is not a float that end with..0 i will inform the user
they typed something wrong
More information about the Python-list