[Tutor] int("10**6")

Albert-Jan Roskam fomcl at yahoo.com
Wed Aug 1 11:17:56 CEST 2012


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 <steve at pearwood.info>
>To: tutor at 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 at python.org
>To unsubscribe or change subscription options:
>http://mail.python.org/mailman/listinfo/tutor
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20120801/4065693d/attachment-0001.html>


More information about the Tutor mailing list