Aaaahhh *slap against forehead*, of course eval! Thanks!! This is perfect for
my needs.
Regards,
Albert-Jan
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine, education, wine, public
order, irrigation, roads, a
fresh water system, and public health, what have the Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>________________________________
>From: Steven D'Aprano <st...@pearwood.info>
>To: tutor@python.org
>Sent: Wednesday, August 1, 2012 10:55 AM
>Subject: Re: [Tutor] int("10**6")
>
>On Wed, Aug 01, 2012 at 01:37:00AM -0700, Albert-Jan Roskam wrote:
>> Hi
>> I want the user to be able to specify "10**6" as arguments. How can I cast
>> this string value (it's from sys.argv) to an int value?.
>> Simply doing int("10**6") won't work. The code below works, but seems overly
>> complicated.
>
>Is your intention to support arbitrary arithmetic? E.g. what happens if
>the user provides "23.45 + -17.9**5.3e2 * log(0.023 + 9.31)/3" ?
>
>If you want a full blown arithmetic parser, you will need to write one.
>It's not as hard as you might think, but neither is it trivial.
>
>If you're satisfied with a *simple* arithmetic parser, you can try
>these:
>
>http://effbot.org/zone/simple-iterator-parser.htm
>http://effbot.org/zone/simple-top-down-parsing.htm
>
>As an alternative, if you like living dangerously and don't mind having
>other people shouting at you, you can use eval. But BEWARE: you are
>opening yourself up to all sorts of nasty security vulnerabilities if
>you do so. But if this script is for your own personal use, it is worth
>considering.
>
>
>If all you want is to support arguments of the form "INT ** INT", that's
>easy:
>
>def eval_power(argument):
> if "**" in argument:
> a, b = argument.split("**", 1)
> a = a.strip() # ignore whitespace
> b = b.strip()
> a = int(a) # or float if you prefer
> b = int(b)
> return a**b
> else:
> return int(argument) # or raise an error?
>
>Now just call that function on each of your arguments, and you're done.
>
>
>
>--
>Steven
>_______________________________________________
>Tutor maillist - Tutor@python.org
>To unsubscribe or change subscription options:
>http://mail.python.org/mailman/listinfo/tutor
>
>
>
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor