From alan.gauld at btinternet.com  Fri Feb  1 01:11:14 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Fri, 01 Feb 2013 00:11:14 +0000
Subject: [Tutor] operator order
In-Reply-To: <keedii$ub1$1@ger.gmane.org>
References: <keedii$ub1$1@ger.gmane.org>
Message-ID: <kef16v$ql5$1@ger.gmane.org>

On 31/01/13 18:36, heathen wrote:
> why is this:
>
>  >>> d = 2
>  >>> d *= 3 + 4
>  >>> d
> 14
>
> not this:

>  >>> d
> 10


Others have answered but I'll add my two cents variation...

d *= 3+4 works like
d *= X -> d = d * X

so what is X? Is it the 3 or the 3+4.
Let's put some parentheses around things to make it unambiguous:

where X=(3+4)
(d = d * (3+4))  -> 14 that all works OK

where X = 3
((d = d * 3) + 4)
which is a syntax error since assignment doesn't return
a value in Python...

So it has to be X = (3+4) to make any kind of sense.

In these cases you have to think the way the computer thinks.
How is Python going to interpret it? In the second case it can't.


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From D.Wilder at F5.com  Fri Feb  1 03:43:54 2013
From: D.Wilder at F5.com (Dave Wilder)
Date: Fri, 1 Feb 2013 02:43:54 +0000
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
Message-ID: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>

Hello,

In a script I am writing, I would like to be able to accept the PAGE DOWN key as an input  as well as the arrow keys.

Is that possible w/ Python (I am using python 2.7.3 and Linux OS)?  If so, could someone point me to documentation on how to do that?

I have done things like this before in python.  For example, I used the following to send the <ESC> character.
send (chr(27)) 

However, I have not been able to find the ascii code equivalent to use for PAGE DOWN and the up/down arrow keys.

I'm not even sure this is even a python question.

Thanks,

Dave 

From davea at davea.name  Fri Feb  1 03:55:53 2013
From: davea at davea.name (Dave Angel)
Date: Thu, 31 Jan 2013 21:55:53 -0500
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
Message-ID: <510B2EB9.1090903@davea.name>

On 01/31/2013 09:43 PM, Dave Wilder wrote:
> Hello,
>
> In a script I am writing, I would like to be able to accept the PAGE DOWN key as an input  as well as the arrow keys.
>
> Is that possible w/ Python (I am using python 2.7.3 and Linux OS)?  If so, could someone point me to documentation on how to do that?
>
> I have done things like this before in python.  For example, I used the following to send the <ESC> character.
> send (chr(27))
>
> However, I have not been able to find the ascii code equivalent to use for PAGE DOWN and the up/down arrow keys.
>
> I'm not even sure this is even a python question.
>

So how are you taking this input in?  If you're writing a terminal 
application, using raw_input(), it would be very difficult, as you'd 
probably have to modify the readline function.

Perhaps you're using some GUI.  Please tell us which one.

-- 
DaveA

From D.Wilder at F5.com  Fri Feb  1 04:19:39 2013
From: D.Wilder at F5.com (Dave Wilder)
Date: Fri, 1 Feb 2013 03:19:39 +0000
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <510B2EB9.1090903@davea.name>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
Message-ID: <DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>



>> On 01/31/2013 09:43 PM, Dave Wilder wrote:
>> Hello,
>>
>> In a script I am writing, I would like to be able to accept the PAGE DOWN key as an input  as well as the arrow keys.
>>
>> Is that possible w/ Python (I am using python 2.7.3 and Linux OS)?  If so, could someone point me to documentation on how to do that?
>>
>> I have done things like this before in python.  For example, I used the following to send the <ESC> character.
>> send (chr(27))
>>
>> However, I have not been able to find the ascii code equivalent to use for PAGE DOWN and the up/down arrow keys.
>>
>> I'm not even sure this is even a python question.
>>

> So how are you taking this input in?  If you're writing a terminal application, using raw_input(), it would be very difficult, as you'd probably have to modify the readline function.
> Perhaps you're using some GUI.  Please tell us which one.
>- DaveA

I am using a terminal application and an application called pexpect (instead of raw_input) where  I send something to the console and then look for a result, such as <PAGE DOWN> or
UP/DOWN arrows.  I'm not sure if pexpect is standard Python application.  I thought I recalled someone on this list saying it wasn't. 

Dave


From eryksun at gmail.com  Fri Feb  1 04:51:34 2013
From: eryksun at gmail.com (eryksun)
Date: Thu, 31 Jan 2013 22:51:34 -0500
Subject: [Tutor] operator order
In-Reply-To: <CAJmBOfkM_TTXtd2f0_ZX-7C99UR95qRvhJF1Tz2gv9=+VG0X-g@mail.gmail.com>
References: <keedii$ub1$1@ger.gmane.org>
	<CAGZAPF6+DHN8GyNQFm54HMiqs7v7Yxc6q9DHGYWGKZrTgp1gqg@mail.gmail.com>
	<CAJmBOfkM_TTXtd2f0_ZX-7C99UR95qRvhJF1Tz2gv9=+VG0X-g@mail.gmail.com>
Message-ID: <CACL+1avDWXyj-oeTWA=Sh0JYR7FuzBZEBaUHw7uz6SXwinOG4Q@mail.gmail.com>

On Thu, Jan 31, 2013 at 5:53 PM, Hugo Arts <hugo.yoshi at gmail.com> wrote:
>
>>>> a = ([], [])
>>>> a[0] += [1]
> TypeError: 'tuple' object does not support item assignment
>>>> a
> ([1], [])

Yep, storing the result fails for a read-only subscript or attribute
(e.g. a property without fset), but only after the in-place op
executes. Solution: don't do that. ;)

From davea at davea.name  Fri Feb  1 04:55:23 2013
From: davea at davea.name (Dave Angel)
Date: Thu, 31 Jan 2013 22:55:23 -0500
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
	<DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
Message-ID: <510B3CAB.3050702@davea.name>

On 01/31/2013 10:19 PM, Dave Wilder wrote:
>
>
>>> On 01/31/2013 09:43 PM, Dave Wilder wrote:
>>> Hello,
>>>
>>> In a script I am writing, I would like to be able to accept the PAGE DOWN key as an input  as well as the arrow keys.
>>>
>>> Is that possible w/ Python (I am using python 2.7.3 and Linux OS)?  If so, could someone point me to documentation on how to do that?
>>>
>>> I have done things like this before in python.  For example, I used the following to send the <ESC> character.
>>> send (chr(27))
>>>
>>> However, I have not been able to find the ascii code equivalent to use for PAGE DOWN and the up/down arrow keys.
>>>
>>> I'm not even sure this is even a python question.
>>>
>
>> So how are you taking this input in?  If you're writing a terminal application, using raw_input(), it would be very difficult, as you'd probably have to modify the readline function.
>> Perhaps you're using some GUI.  Please tell us which one.
>> - DaveA
>
> I am using a terminal application and an application called pexpect (instead of raw_input) where  I send something to the console and then look for a result, such as <PAGE DOWN> or
> UP/DOWN arrows.  I'm not sure if pexpect is standard Python application.  I thought I recalled someone on this list saying it wasn't.
>

I don't use pexpect.  But there is both a pexpect in the stdlib, and at 
least one external library of the same name.  So it may be relevant 
which one you're using.  But it's still quite confusing to me whether 
you're writing the controlled app or the controlling app.  And your 
wording is confusing me still further, by referring to pexpect as an 
application.

Maybe somebody else can make sense out of it.  Or maybe you should start 
over, using names and verbal diagrams.  Who is sending what to whom? 
Which programs are you stuck with, which ones are you writing?  If 
you're writing all of it, why would you use pexpect?



-- 
DaveA

From alan.gauld at btinternet.com  Fri Feb  1 09:34:25 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Fri, 01 Feb 2013 08:34:25 +0000
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
	<DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
Message-ID: <kefumf$162$1@ger.gmane.org>

On 01/02/13 03:19, Dave Wilder wrote:

>> So how are you taking this input in?
>
> I am using a terminal application and an application called pexpect

OK, We need to get the terminology a lot more exact.

I'm guessing that what you mean is that you have an application that 
somebody else wrote running in a terminal session and that you are 
writing a program to communicate with that application using the pexpect 
module. Is that correct?

 > (instead of raw_input) where  I send something to the console
> and then look for a result,

When you say you send "something" to the console I'm guessing you mean 
you send a command string to the external application via pexpect
and then read the response from the application  coming back via 
pexpect? Is that correct?

 > such as <PAGE DOWN> or UP/DOWN arrows.

If I got the previous guesses right then this is, I suspect, impossible.
Pagedown and page up are terminal control characters that are not part 
of the output that would be sent to pexpect. pexpect reads the monitored 
session's stdin/stdout. There are some exceptional cases where you might 
see those characters but in most cases they will be swallowed by the app 
before pexpect ever sees them.

OTOH if you mean you want to send the page up/down/arrows as the 
"something" then its a different game and you can do it. In that case 
you need todo what you did with ESC. The character set your external app 
uses will determine the codes you send. Assuming its the same set as 
your local setup you can use the following program(untested!) to read 
the codes from your keyboard (assuming you are on Windows):

import msvcrt

print "Hit space to end..."
print

while True:
    ky = msvcrt.getch()
    length = len(ky)
    if length != 0:
       if ky == " ": # check for quit event
          print ord(ky)
          raise SystemExit
       else:
          if ky == '\x00' or ky == '\xe0': # non ASCII
              ky = msvcrt.getch() # fetch second character
          print ord(ky),

There is also a curses version for Linux/MacOS on my tutor
topic page for event driven programming...


> I'm not sure if pexpect is standard Python application.

It's not an application it's a module. If you are using an app called 
pexpect then its not part of Python (although it may still be written in 
Python!)

hth
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From davea at davea.name  Fri Feb  1 13:38:03 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 01 Feb 2013 07:38:03 -0500
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <kefumf$162$1@ger.gmane.org>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
	<DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
	<kefumf$162$1@ger.gmane.org>
Message-ID: <510BB72B.90403@davea.name>

On 02/01/2013 03:34 AM, Alan Gauld wrote:
>
>   <snip>
>
> OTOH if you mean you want to send the page up/down/arrows as the
> "something" then its a different game and you can do it. In that case
> you need todo what you did with ESC. The character set your external app
> uses will determine the codes you send. Assuming its the same set as
> your local setup you can use the following program(untested!) to read
> the codes from your keyboard (assuming you are on Windows):
>
> import msvcrt
>
> print "Hit space to end..."
> print
>
> while True:
>     ky = msvcrt.getch()

The OP is running Python 2.73 on Linux.

-- 
DaveA

From D.Wilder at F5.com  Fri Feb  1 16:35:22 2013
From: D.Wilder at F5.com (Dave Wilder)
Date: Fri, 1 Feb 2013 15:35:22 +0000
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <510BB72B.90403@davea.name>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
	<DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
	<kefumf$162$1@ger.gmane.org> <510BB72B.90403@davea.name>
Message-ID: <DF8381D0C668344094293D48724112BC315B3566@SEAEMBX01.olympus.F5Net.com>



-----Original Message-----
From: Tutor [mailto:tutor-bounces+d.wilder=f5.com at python.org] On Behalf Of Dave Angel
Sent: Friday, February 01, 2013 7:38 AM
To: tutor at python.org
Subject: Re: [Tutor] Need to be able to accept Page Down or CTRL-E

On 02/01/2013 03:34 AM, Alan Gauld wrote:
>>
>>   <snip>
>>
>> OTOH if you mean you want to send the page up/down/arrows as the 
>> "something" then its a different game and you can do it. In that case 
>> you need todo what you did with ESC. The character set your external 
>> app uses will determine the codes you send. Assuming its the same set 
>> as your local setup you can use the following program(untested!) to 
>> read the codes from your keyboard (assuming you are on Windows):
>>
>> import msvcrt
>>
>> print "Hit space to end..."
>> print
>>
>> while True:
>>     ky = msvcrt.getch()

> The OP is running Python 2.73 on Linux.

Okay, thanks Alan and Dave.  I will look into this a little more and if need be, email the list again but taking Dave's advice and start over w/ a clearer problem statement.

Dave

--
DaveA
_______________________________________________
Tutor maillist  -  Tutor at python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

From simonyan at fedoraproject.org  Fri Feb  1 18:11:12 2013
From: simonyan at fedoraproject.org (Simon Yan)
Date: Sat, 2 Feb 2013 01:11:12 +0800
Subject: [Tutor] First Python Test
In-Reply-To: <CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
Message-ID: <CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>

On Fri, Feb 1, 2013 at 9:18 PM, Dustin Guerri <dustinguerri at gmail.com>wrote:

> Thanks for replying, Simon.  I have no particular reason to use Xcode -
> what would you recommend instead ?
>
I would recommend start off from a simple text editor that has basic syntax
highlighting features. There are a number of options out there.
TextMate is a good choice, a little pricy.
VIM, if you are a terminal guy
Even Python IDLE is a good choice you wanted to edit just a few simple .py
files.

I would suggest give it a look in the Mac App Store and you will find a few
other good ones too.


>
>
> *Dustin Guerri*
> Mobile : (+ 34) 625 857 967
> dustinguerri at gmail.com
> [image: LinkedIn]<http://www.linkedin.com/profile/view?id=16395850&trk=tab_pro>
>
> Contact me: [image: Google Talk] dustinguerri [image: Skype] dustinguerri
>   Get a signature like this.
> <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20> CLICK
> HERE.<http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>
>
>
> On 1 February 2013 13:05, Simon Yan <simonyan at fedoraproject.org> wrote:
>
>>
>>
>>
>> On Thu, Jan 17, 2013 at 6:47 AM, Dustin Guerri <dustinguerri at gmail.com>wrote:
>>
>>> Hi there,
>>>
>>> I'm trying to create a plain text file called "hello.py" with the
>>> following text :
>>>
>>>     print('hello world')
>>>     raw_input('Press any key to continue')
>>>
>>> I'd then like to run this program with Python Launcher on a Mac.
>>>
>>> I'd lke to use Xcode as my text editor.  Once I have Xcode open, which
>>> template should I use to input the text ?
>>>
>> I don't think there is a file type of Python that you can create from
>> Xcode.
>> Just curious, why would you want to use XCode as a Python editor?
>>
>>
>>>
>>> Thanks,
>>>
>>> *Dustin Guerri*
>>> Mobile : (+ 34) 625 857 967
>>> dustinguerri at gmail.com | www.vimeo.com/dustinguerri/pop
>>> [image: LinkedIn]<http://www.linkedin.com/profile/view?id=16395850&trk=tab_pro>
>>> Contact me: [image: Google Talk] dustinguerri [image: Skype]dustinguerri
>>>   Get a signature like this.
>>> <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20> CLICK
>>> HERE.<http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>>>
>>>
>>> _______________________________________________
>>> Tutor maillist  -  Tutor at python.org
>>> To unsubscribe or change subscription options:
>>> http://mail.python.org/mailman/listinfo/tutor
>>>
>>>
>>
>>
>> --
>> Regards,
>> YeeYaa (Simon Yan)
>>
>> http://simonyan.fedorapeople.org/
>>
>
>


-- 
Regards,
YeeYaa (Simon Yan)

http://simonyan.fedorapeople.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130202/18737e2c/attachment.html>

From etanes.rm at gmail.com  Fri Feb  1 21:09:23 2013
From: etanes.rm at gmail.com (Scurvy Scott)
Date: Fri, 1 Feb 2013 12:09:23 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
Message-ID: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>

Hey all how're things?

I'm hoping for some guidance on a problem I'm trying to work through.
I know this has been previously covered on this list but I'm hoping it
won't bother you guys to run through it again.

My basic program I'm attempting to create is like this..

I want to read from a large, very large file.
I want to find a certain string
if it finds the string I would like to select the first 15-20
characters pre and proceeding the string and then output that new
string to a new file along with the line the string was located on
within the file.

It seems fairly straight forward but I'm wondering if y'all can point
me to a direction that would help me accomplish this..

Firstly I know I can read a file and search for the string with (a
portion of this code was found on stackoverflow and is not mine and
some of it is my own)

with open('largeFile', 'r') as inF:
    for line in inF:
        myString = "The String"
        if 'myString' in line:
            f = open(thenewfile', 'w')
            f.write(myString)
            f.close()

I guess what I'm looking for then is tips on A)My stated goal of also
writing the 15-20 characters before and after myString to the new file
and
B)finding the line number and writing that to the file as well.

Any information you can give me or pointers would be awesome, thanks in advance.

I'm on Ubuntu 12.10 running LXDE and working with Python 2.7

Scott

From pacificmorrowind at gmail.com  Fri Feb  1 21:31:07 2013
From: pacificmorrowind at gmail.com (Nick W)
Date: Fri, 1 Feb 2013 12:31:07 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
Message-ID: <CAHXRGSO_+aaX+aHP6X3PsLeWe6hbNE85Fet_A+WU5hvJ=wyFxg@mail.gmail.com>

quite easy to do; just use enumerate - as so:
myString = "The String"
with open('largeFile', 'r') as inF:
    for index, line in enumerate(inF):
        #myString = "The String" ##Not here because otherwise this gets run
for every single line of the large file (which is nasty waste of resources)
        if 'myString' in line:
            with open(thenewfile', 'w') as f:
                f.write("Line #%d has string: %s"  (index, line))
That will print the whole line into the new file, If you only want the
characters before that use find and take a slice of the line instead.
HTH
Nick


On Fri, Feb 1, 2013 at 12:09 PM, Scurvy Scott <etanes.rm at gmail.com> wrote:

> Hey all how're things?
>
> I'm hoping for some guidance on a problem I'm trying to work through.
> I know this has been previously covered on this list but I'm hoping it
> won't bother you guys to run through it again.
>
> My basic program I'm attempting to create is like this..
>
> I want to read from a large, very large file.
> I want to find a certain string
> if it finds the string I would like to select the first 15-20
> characters pre and proceeding the string and then output that new
> string to a new file along with the line the string was located on
> within the file.
>
> It seems fairly straight forward but I'm wondering if y'all can point
> me to a direction that would help me accomplish this..
>
> Firstly I know I can read a file and search for the string with (a
> portion of this code was found on stackoverflow and is not mine and
> some of it is my own)
>
> with open('largeFile', 'r') as inF:
>     for line in inF:
>         myString = "The String"
>         if 'myString' in line:
>             f = open(thenewfile', 'w')
>             f.write(myString)
>             f.close()
>
> I guess what I'm looking for then is tips on A)My stated goal of also
> writing the 15-20 characters before and after myString to the new file
> and
> B)finding the line number and writing that to the file as well.
>
> Any information you can give me or pointers would be awesome, thanks in
> advance.
>
> I'm on Ubuntu 12.10 running LXDE and working with Python 2.7
>
> Scott
> _______________________________________________
> 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/20130201/bab74e60/attachment.html>

From davea at davea.name  Fri Feb  1 21:36:43 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 01 Feb 2013 15:36:43 -0500
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
Message-ID: <510C275B.7060200@davea.name>

On 02/01/2013 03:09 PM, Scurvy Scott wrote:
> Hey all how're things?
>
> I'm hoping for some guidance on a problem I'm trying to work through.
> I know this has been previously covered on this list but I'm hoping it
> won't bother you guys to run through it again.
>
> My basic program I'm attempting to create is like this..
>
> I want to read from a large, very large file.
> I want to find a certain string
> if it finds the string I would like to select the first 15-20
> characters pre and proceeding the string and then output that new
> string to a new file along with the line the string was located on
> within the file.

Why not just use grep ?

>
> It seems fairly straight forward but I'm wondering if y'all can point
> me to a direction that would help me accomplish this..
>
> Firstly I know I can read a file and search for the string with (a
> portion of this code was found on stackoverflow and is not mine and
> some of it is my own)
>

First, you probably want to do something to quit when you get your first 
match.  If you do want to continue finding matches, then you'd have to 
change the location of that open() on the newfile.  Currently, it'll 
throw out any earlier contents, and just write the match.

The linenum is easy, using enumerate.

> with open('largeFile', 'r') as inF:
>      for line in inF:

        for linenum, line in enumerate(inF):


>          myString = "The String"

This should be moved to a location before the loop;  it's a waste 
reassigning it every time through the loop.

>          if 'myString' in line:
>              f = open(thenewfile', 'w')
>              f.write(myString)
>              f.close()

                break     #quit upon first match

>
> I guess what I'm looking for then is tips on A)My stated goal of also
> writing the 15-20 characters before and after myString to the new file
> and
> B)finding the line number and writing that to the file as well.
>
> Any information you can give me or pointers would be awesome, thanks in advance.
>
> I'm on Ubuntu 12.10 running LXDE and working with Python 2.7
>

About giving the 15 characters before and after the match:

Is it sufficient to truncate that spec at the line boundaries?  What I 
mean is that if the match occurs at column 10, do you really need the 
last 5 characters of the previous line?   Likewise, if it occurs near 
the end of the line, do you need some from the next line(s) ?


If you never need to show more than the current line, then you can parse 
the line (write a separate function).  If you have to go 15 characters 
earlier in the file, then consider using file.seek

http://docs.python.org/2/library/stdtypes.html?highlight=seek#file.seek

The catch to that is that it messes up the position in the file, so if 
you do want multiple matches, you'll need to use file.tell to save and 
restore the location to continue reading lines.

Lots of other options, but it all depends on what you REALLY want.



-- 
DaveA

From etanes.rm at gmail.com  Fri Feb  1 22:03:53 2013
From: etanes.rm at gmail.com (Scurvy Scott)
Date: Fri, 1 Feb 2013 13:03:53 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <510C275B.7060200@davea.name>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
Message-ID: <CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>

>
> Why not just use grep ?
>
Honestly this seemed like a good excuse to write some code and learn
some stuff, secondly, it honestly just didn't dawn on me.

Also, the code y'all both showed me was exactly what I was looking for
and I'm planning on using Nicks code as a template to improve upon.

As always, thank you guys a lot, it usually only takes a couple of
emails from y'all to get my brain working correctly.

Be safe,
Scott

From etanes.rm at gmail.com  Fri Feb  1 22:24:31 2013
From: etanes.rm at gmail.com (Scurvy Scott)
Date: Fri, 1 Feb 2013 13:24:31 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
Message-ID: <CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>

One last question on this topic..

I'd like to call the files and the string form the command line like

Python whatever.py STRINGTOSEARCH NEWFILE FILETOOPEN

My understanding is that it would be accomplished as such

import sys

myString = sys.argv[1]
filetoopen = sys.argv[2]
newfile = sys.argv[3]


ETC ETC CODE HERE

Is this correct/pythonic? Is there a more recommended way? Am I retarded?

Thanks again in advance,
Scott

From davea at davea.name  Fri Feb  1 23:22:49 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 01 Feb 2013 17:22:49 -0500
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
Message-ID: <510C4039.901@davea.name>

On 02/01/2013 04:24 PM, Scurvy Scott wrote:
> One last question on this topic..
>
> I'd like to call the files and the string form the command line like
>
> Python whatever.py STRINGTOSEARCH NEWFILE FILETOOPEN
>
> My understanding is that it would be accomplished as such
>
> import sys
>
> myString = sys.argv[1]
> filetoopen = sys.argv[2]
> newfile = sys.argv[3]

Notice that you have 2 and 3 reversed from your description above. 
Neither one is wrong, but you have to pick one of them.

If it were my utility, I'd not specify any outfile on the commandline, 
but use redirection as is normal in Linux/Unix/Windows.  In other words, 
just use print as your output, and don't have an argument for the output 
file.


>
>
> ETC ETC CODE HERE
>

If it were my code, I'd be first checking the number of arguments ( 
len(sys.argv) ).  If the number isn't exactly right, print a usage 
string and exit the program.

If your commandline gets any more complex, consider using the argparse 
module.

http://docs.python.org/2/library/argparse.html?highlight=argparse#argparse

-- 
DaveA

From simonyan at fedoraproject.org  Fri Feb  1 13:05:01 2013
From: simonyan at fedoraproject.org (Simon Yan)
Date: Fri, 1 Feb 2013 20:05:01 +0800
Subject: [Tutor] First Python Test
In-Reply-To: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
Message-ID: <CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>

On Thu, Jan 17, 2013 at 6:47 AM, Dustin Guerri <dustinguerri at gmail.com>wrote:

> Hi there,
>
> I'm trying to create a plain text file called "hello.py" with the
> following text :
>
>     print('hello world')
>     raw_input('Press any key to continue')
>
> I'd then like to run this program with Python Launcher on a Mac.
>
> I'd lke to use Xcode as my text editor.  Once I have Xcode open, which
> template should I use to input the text ?
>
I don't think there is a file type of Python that you can create from Xcode.
Just curious, why would you want to use XCode as a Python editor?


>
> Thanks,
>
> *Dustin Guerri*
> Mobile : (+ 34) 625 857 967
> dustinguerri at gmail.com | www.vimeo.com/dustinguerri/pop
> [image: LinkedIn]<http://www.linkedin.com/profile/view?id=16395850&trk=tab_pro>
> Contact me: [image: Google Talk] dustinguerri [image: Skype] dustinguerri
>   Get a signature like this.
> <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20> CLICK
> HERE.<http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>


-- 
Regards,
YeeYaa (Simon Yan)

http://simonyan.fedorapeople.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130201/43870e2e/attachment.html>

From alan.gauld at btinternet.com  Sat Feb  2 00:15:58 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Fri, 01 Feb 2013 23:15:58 +0000
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <510BB72B.90403@davea.name>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
	<DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
	<kefumf$162$1@ger.gmane.org> <510BB72B.90403@davea.name>
Message-ID: <kehibb$p6h$1@ger.gmane.org>

On 01/02/13 12:38, Dave Angel wrote:

>> your local setup you can use the following program(untested!) to read
>> the codes from your keyboard (assuming you are on Windows):
>>
>> import msvcrt
>>
>
> The OP is running Python 2.73 on Linux.

OK, I didn't notice that. In that case the Linux variant on my tutor 
page will work for him.


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From steve at pearwood.info  Sat Feb  2 00:24:49 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 02 Feb 2013 10:24:49 +1100
Subject: [Tutor] Need to be able to accept Page Down or CTRL-E
In-Reply-To: <510BB72B.90403@davea.name>
References: <DF8381D0C668344094293D48724112BC315B328C@SEAEMBX01.olympus.F5Net.com>
	<510B2EB9.1090903@davea.name>
	<DF8381D0C668344094293D48724112BC315B32E9@SEAEMBX01.olympus.F5Net.com>
	<kefumf$162$1@ger.gmane.org> <510BB72B.90403@davea.name>
Message-ID: <510C4EC1.1020500@pearwood.info>

On 01/02/13 23:38, Dave Angel wrote:
> On 02/01/2013 03:34 AM, Alan Gauld wrote:
>>
>> <snip>
>>
>> OTOH if you mean you want to send the page up/down/arrows as the
>> "something" then its a different game and you can do it. In that case
>> you need todo what you did with ESC. The character set your external app
>> uses will determine the codes you send. Assuming its the same set as
>> your local setup you can use the following program(untested!) to read
>> the codes from your keyboard (assuming you are on Windows):
>>
>> import msvcrt
>>
>> print "Hit space to end..."
>> print
>>
>> while True:
>> ky = msvcrt.getch()
>
> The OP is running Python 2.73 on Linux.

You can use getch under Linux.

http://code.activestate.com/recipes/577977/


Using that recipe, I see that PageUp sends the following four bytes:

'\x1b[5~'


PageDown also sends four bytes:

'\x1b[6~'


and Ctrl-E sends a single byte:

'\x05'



-- 
Steven

From alan.gauld at btinternet.com  Sat Feb  2 00:26:28 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Fri, 01 Feb 2013 23:26:28 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
Message-ID: <kehiv1$vbd$1@ger.gmane.org>

On 01/02/13 12:05, Simon Yan wrote:

>     I'd lke to use Xcode as my text editor.  Once I have Xcode open,
>     which template should I use to input the text ?
>

I don;t know about templates but there are instructions on the MacPython 
pages that tell you how to set up XCode. I used it for some experiments 
in Cocoa programming on my Mac. But it was a while ago.

> Just curious, why would you want to use XCode as a Python editor?

Lots of possible reasons:
1) He is already using XCode for other Mac projects and
    wants a familiar tool
2) XCode is a better editor than IDLE
3) He wants to do Cocoa (Mac GUI) programming and XCode
    provides integration with the MacOS GUI creator
4) He wants to have a mixed language program using
    Objective C and Python in the same project.

Any and all are perfectly reasonable and valid.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From steve at pearwood.info  Sat Feb  2 02:00:09 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 02 Feb 2013 12:00:09 +1100
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
Message-ID: <510C6519.5040502@pearwood.info>

On 02/02/13 08:24, Scurvy Scott wrote:
> One last question on this topic..
>
> I'd like to call the files and the string form the command line like
>
> Python whatever.py STRINGTOSEARCH NEWFILE FILETOOPEN
>
> My understanding is that it would be accomplished as such
>
> import sys
>
> myString = sys.argv[1]
> filetoopen = sys.argv[2]
> newfile = sys.argv[3]
>
>
> ETC ETC CODE HERE
>
> Is this correct/pythonic? Is there a more recommended way? Am I retarded?



Best practice is to check if your program is being run as a script before doing anything. That way you can still import the module for testing or similar:


def main(mystring, infile, outfile):
    # do stuff here


if __name__ == '__main__':
    # Running as a script.
    import sys
    mystring = sys.argv[1]
    infile = sys.argv[2]
    outfile = sys.argv[3]
    main(mystring, infile, outfile)



Best practice for scripts (not just Python scripts, but *any* script) is to provide help when asked. Insert this after the "import sys" line, before you start processing:

    if '-h' in sys.argv or '--help' in sys.argv:
        print(help_text)
        sys.exit()



If your argument processing is more complicated that above, you should use one of the three argument parsing modules that Python provides:

http://docs.python.org/2/library/getopt.html
http://docs.python.org/2/library/optparse.html (deprecated -- do not use this for new code)
http://docs.python.org/2/library/argparse.html


getopt is (in my opinion) the simplest to get started, but the weakest.

There are also third-party argument parsers that you could use. Here's one which I have never used but am intrigued by:

http://docopt.org/



-- 
Steven

From jacklittlemc at yahoo.com  Sat Feb  2 02:47:46 2013
From: jacklittlemc at yahoo.com (Jack Little)
Date: Fri, 1 Feb 2013 17:47:46 -0800 (PST)
Subject: [Tutor] Help
Message-ID: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>

I get this error

Traceback (most recent call last):
? File "C:\Users\Jack\Desktop\python\g.py", line 56, in <module>
? ? path1pt1()
NameError: name 'path1pt1' is not defined

With this amount of code:


def simpstart():
? global ammo1
? global ammo2
? global ammo3
? global health
? global tech_parts
? global exp
? global radio_parts
? ammo1=10
? ammo2=0
? ammo3=0
? health=100
? tech_parts=0
? exp=0
? radio_parts=0
print "You awake in a haze. A crate,a door and a radio."
g1 = raw_input("Which do you choose ?")
if g1 == "CRATE" or g1 == "Crate" or g1 == "crate":
? ? ? ? print "There is a pack of ammo,some food and an odd microchip"
? ? ? ? ammo1=ammo1 + 6
? ? ? ? health=health + 10
? ? ? ? tech_parts=tech_parts + 1
elif g1 =="DOOR" or g1 == "Door" or g1 == "door":
? ? ? print "You are outside"
elif g1 == "RADIO" or g1 == "Radio" or g1 == "radio":
? ? ? print "It's only a few parts"
? ? ? radio_parts=radio_parts+3
g2 = raw_input("So this is NYC.Ten years after.There are a few streets.Go west or north ?")
if g2 == "WEST" or g2 == "West" or g2 == "west":
? ? ? path2_pt1()
elif g2 == "NORTH" or g2 == "North" or g2 == "north":
? ? ? path1pt1()

? ? ??
def path1pt1():
? ? print "This is where it all started. Freedom Tower. A biotech firm called Aesthos Biotechnology. Based here."
? ? print "I worked there."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130201/f10f34eb/attachment-0001.html>

From btiqui at gmail.com  Sat Feb  2 03:01:15 2013
From: btiqui at gmail.com (Brandon)
Date: Fri, 1 Feb 2013 18:01:15 -0800
Subject: [Tutor] Help
In-Reply-To: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>
References: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>
Message-ID: <CAAcreeOAeArUusW7QT12_XTCRs_BGnGHAnTRCZ8UwT8ykiBNDg@mail.gmail.com>

You get the error because you call path1pt1() before it is defined.  Define
your path1pt1() method at the top of your code before simpstart().

Brandon

On Fri, Feb 1, 2013 at 5:47 PM, Jack Little <jacklittlemc at yahoo.com> wrote:

> I get this error
>
> Traceback (most recent call last):
>   File "C:\Users\Jack\Desktop\python\g.py", line 56, in <module>
>     path1pt1()
> NameError: name 'path1pt1' is not defined
>
> With this amount of code:
>
>
> def simpstart():
>   global ammo1
>   global ammo2
>   global ammo3
>   global health
>   global tech_parts
>   global exp
>   global radio_parts
>   ammo1=10
>   ammo2=0
>   ammo3=0
>   health=100
>   tech_parts=0
>   exp=0
>   radio_parts=0
> print "You awake in a haze. A crate,a door and a radio."
> g1 = raw_input("Which do you choose  ")
> if g1 == "CRATE" or g1 == "Crate" or g1 == "crate":
>         print "There is a pack of ammo,some food and an odd microchip"
>         ammo1=ammo1 + 6
>         health=health + 10
>         tech_parts=tech_parts + 1
> elif g1 =="DOOR" or g1 == "Door" or g1 == "door":
>       print "You are outside"
> elif g1 == "RADIO" or g1 == "Radio" or g1 == "radio":
>       print "It's only a few parts"
>       radio_parts=radio_parts+3
> g2 = raw_input("So this is NYC.Ten years after.There are a few streets.Go
> west or north  ")
> if g2 == "WEST" or g2 == "West" or g2 == "west":
>       path2_pt1()
> elif g2 == "NORTH" or g2 == "North" or g2 == "north":
>       path1pt1()
>
>
> def path1pt1():
>     print "This is where it all started. Freedom Tower. A biotech firm
> called Aesthos Biotechnology. Based here."
>     print "I worked there."
>
> _______________________________________________
> 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/20130201/baa5fe8a/attachment.html>

From davea at davea.name  Sat Feb  2 03:07:36 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 01 Feb 2013 21:07:36 -0500
Subject: [Tutor] Help
In-Reply-To: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>
References: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>
Message-ID: <510C74E8.6050508@davea.name>

On 02/01/2013 08:47 PM, Jack Little wrote:
> I get this error
>
> Traceback (most recent call last):
>    File "C:\Users\Jack\Desktop\python\g.py", line 56, in <module>
>      path1pt1()
> NameError: name 'path1pt1' is not defined
>
> With this amount of code:
>
>
> def simpstart():
>    global ammo1
>    global ammo2
>    global ammo3
>    global health
>    global tech_parts
>    global exp
>    global radio_parts
>    ammo1=10
>    ammo2=0
>    ammo3=0
>    health=100
>    tech_parts=0
>    exp=0
>    radio_parts=0

You've stopped defining that function, and now are doing top-level code

This following stuff belongs in a function, probably called main()

> print "You awake in a haze. A crate,a door and a radio."
> g1 = raw_input("Which do you choose  ")
> if g1 == "CRATE" or g1 == "Crate" or g1 == "crate":
>          print "There is a pack of ammo,some food and an odd microchip"
>          ammo1=ammo1 + 6
>          health=health + 10
>          tech_parts=tech_parts + 1
> elif g1 =="DOOR" or g1 == "Door" or g1 == "door":
>        print "You are outside"
> elif g1 == "RADIO" or g1 == "Radio" or g1 == "radio":
>        print "It's only a few parts"
>        radio_parts=radio_parts+3
> g2 = raw_input("So this is NYC.Ten years after.There are a few streets.Go west or north  ")
> if g2 == "WEST" or g2 == "West" or g2 == "west":
>        path2_pt1()
> elif g2 == "NORTH" or g2 == "North" or g2 == "north":
>        path1pt1()

Now, in top-level code, you're trying to call a function that hasn't 
been defined yet.  If you want to have complete freedom of order when 
you define your functions, don't put any top-level code except a tiny 
block at the end of the script.  No function may be called before it has 
been defined.  But inside a function, the call won't be made till the 
function is called.  So if the only calls happen at the end of the 
script, there'll never be such a problem.


>
>
> def path1pt1():
>      print "This is where it all started. Freedom Tower. A biotech firm called Aesthos Biotechnology. Based here."
>      print "I worked there."
>

This should be the only non-trivial top-level code, and it should be at 
the end of the script.

if __name__ == "__main__":
     simpstart()
     main()


-- 
DaveA

From etanes.rm at gmail.com  Sat Feb  2 05:31:49 2013
From: etanes.rm at gmail.com (Scurvy Scott)
Date: Fri, 1 Feb 2013 20:31:49 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <510C6519.5040502@pearwood.info>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
	<510C6519.5040502@pearwood.info>
Message-ID: <CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>

> Best practice is to check if your program is being run as a script before
> doing anything. That way you can still import the module for testing or
> similar:
>
>
> def main(mystring, infile, outfile):
>    # do stuff here
>
>
> if __name__ == '__main__':
>    # Running as a script.
>    import sys
>    mystring = sys.argv[1]
>    infile = sys.argv[2]
>    outfile = sys.argv[3]
>    main(mystring, infile, outfile)
>
>
>
> Best practice for scripts (not just Python scripts, but *any* script) is to
> provide help when asked. Insert this after the "import sys" line, before you
> start processing:
>
>    if '-h' in sys.argv or '--help' in sys.argv:
>        print(help_text)
>        sys.exit()
>
>
>
> If your argument processing is more complicated that above, you should use
> one of the three argument parsing modules that Python provides:
>
> http://docs.python.org/2/library/getopt.html
> http://docs.python.org/2/library/optparse.html (deprecated -- do not use
> this for new code)
> http://docs.python.org/2/library/argparse.html
>
>
> getopt is (in my opinion) the simplest to get started, but the weakest.
>
> There are also third-party argument parsers that you could use. Here's one
> which I have never used but am intrigued by:
>
> http://docopt.org/
>
>
>
> --
> Steven
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor

Steve-
 thanks a lot for showing me the if __name__ = main part
I've often wondered how it was used and it didn't make sense until I
saw it in my own code if that makes any sense.
Also appreciate the help on the "instructional" side of things.

One question related to the instruction aspect- does this make sense to you?

If len(sys.argv) == 0:
    print "usage: etc etc etc"



Nick, Dave, and Steve, again, you guys are awesome. Thanks for all your help.

Scott

From msirenef at lightbird.net  Sat Feb  2 05:54:34 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Fri, 01 Feb 2013 23:54:34 -0500
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
	<510C6519.5040502@pearwood.info>
	<CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
Message-ID: <510C9C0A.8040705@lightbird.net>

On 02/01/2013 11:31 PM, Scurvy Scott wrote:
>
 > Steve-
 > thanks a lot for showing me the if __name__ = main part
 > I've often wondered how it was used and it didn't make sense until I
 > saw it in my own code if that makes any sense.
 > Also appreciate the help on the "instructional" side of things.
 >
 > One question related to the instruction aspect- does this make sense 
to you?
 >
 > If len(sys.argv) == 0:
 > print "usage: etc etc etc"


If should not be capitalized; sys.argv always has the name
of the script as the first item.

So you need to do something like:

if len(sys.argv) != 3:
     print "usage: ..."

HTH!  -m


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

Emotion is primarily about nothing and much of it remains about nothing to
the end.  George Santayana


From etanes.rm at gmail.com  Sat Feb  2 05:57:41 2013
From: etanes.rm at gmail.com (Scurvy Scott)
Date: Fri, 1 Feb 2013 20:57:41 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
	<510C6519.5040502@pearwood.info>
	<CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
Message-ID: <CALyVa3Vcu9aqO2j2iO6KgB0P7ox+nuwCQvBAcLxZRVi6m8pmxA@mail.gmail.com>

And just for the records sake, this is what I've gotten and you guys
should see obviously that you helped a lot and I learned a thing or
two so I won't have to ask the same silly questions next time:




def main(mystring, infile, outfile):
    with open('infile', 'r') as inF:
		for index, line in enumerate(inF):
			if myString in line:
				newfile.write("string %s found on line #%d" (line, index))
print "complete."


if __name__ == '__main__':
   import sys
   newfile = open('outfile', 'w')
   help_text = "usage: python scanfile.py STRINGTOSEARCH
IMPORTFILENAME OUTPUTFILENAME"
   if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 0:
	   print (help_text)
	   sys.exit()
   myString = sys.argv[1]
   infile = sys.argv[2]
   outfile = sys.argv[3]
   main(mystring, infile, outfile)

Look right to you? Looks okay to me, except maybe the three ORs in the
information line, is there a more pythonic way to accomplish that
task?

Scott

On Fri, Feb 1, 2013 at 8:31 PM, Scurvy Scott <etanes.rm at gmail.com> wrote:
>> Best practice is to check if your program is being run as a script before
>> doing anything. That way you can still import the module for testing or
>> similar:
>>
>>
>> def main(mystring, infile, outfile):
>>    # do stuff here
>>
>>
>> if __name__ == '__main__':
>>    # Running as a script.
>>    import sys
>>    mystring = sys.argv[1]
>>    infile = sys.argv[2]
>>    outfile = sys.argv[3]
>>    main(mystring, infile, outfile)
>>
>>
>>
>> Best practice for scripts (not just Python scripts, but *any* script) is to
>> provide help when asked. Insert this after the "import sys" line, before you
>> start processing:
>>
>>    if '-h' in sys.argv or '--help' in sys.argv:
>>        print(help_text)
>>        sys.exit()
>>
>>
>>
>> If your argument processing is more complicated that above, you should use
>> one of the three argument parsing modules that Python provides:
>>
>> http://docs.python.org/2/library/getopt.html
>> http://docs.python.org/2/library/optparse.html (deprecated -- do not use
>> this for new code)
>> http://docs.python.org/2/library/argparse.html
>>
>>
>> getopt is (in my opinion) the simplest to get started, but the weakest.
>>
>> There are also third-party argument parsers that you could use. Here's one
>> which I have never used but am intrigued by:
>>
>> http://docopt.org/
>>
>>
>>
>> --
>> Steven
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>
> Steve-
>  thanks a lot for showing me the if __name__ = main part
> I've often wondered how it was used and it didn't make sense until I
> saw it in my own code if that makes any sense.
> Also appreciate the help on the "instructional" side of things.
>
> One question related to the instruction aspect- does this make sense to you?
>
> If len(sys.argv) == 0:
>     print "usage: etc etc etc"
>
>
>
> Nick, Dave, and Steve, again, you guys are awesome. Thanks for all your help.
>
> Scott

From steve at pearwood.info  Sat Feb  2 08:54:33 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 02 Feb 2013 18:54:33 +1100
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
	<510C6519.5040502@pearwood.info>
	<CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
Message-ID: <510CC639.2090200@pearwood.info>

On 02/02/13 15:31, Scurvy Scott wrote:
> One question related to the instruction aspect- does this make sense to you?
>
> If len(sys.argv) == 0:
>      print "usage: etc etc etc"


Right idea, but not quite correct.

sys.argv always includes at least one item, the name of the script being called. This is why you will often see code like this, to extract the actual arguments:


argv = sys.argv[1:]  # slice excluding the first item
if len(argv) == 0:
     usage()
else:
     main(argv)


or similar.


-- 
Steven

From alan.gauld at btinternet.com  Sat Feb  2 09:29:29 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 02 Feb 2013 08:29:29 +0000
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3Vcu9aqO2j2iO6KgB0P7ox+nuwCQvBAcLxZRVi6m8pmxA@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
	<510C6519.5040502@pearwood.info>
	<CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
	<CALyVa3Vcu9aqO2j2iO6KgB0P7ox+nuwCQvBAcLxZRVi6m8pmxA@mail.gmail.com>
Message-ID: <keiip6$63q$1@ger.gmane.org>

On 02/02/13 04:57, Scurvy Scott wrote:

It may just be an email thing but...

> def main(mystring, infile, outfile):
>      with open('infile', 'r') as inF:
> 		for index, line in enumerate(inF):
> 			if myString in line:
> 				newfile.write("string %s found on line #%d" (line, index))
> print "complete."

The print should be inside the function not outside.

And main is probably not the best name. You could call it
printFoundString or somesuch...

'main' is usually used to collect all the program driver code that you 
currently have under the if name... test. The stuff you wouldn't ever 
use if importing as a module. Your way works fine too, a main is not 
obligatory. :-)

> if __name__ == '__main__':
>     import sys
>     newfile = open('outfile', 'w')
>     help_text = "usage: python scanfile.py STRINGTOSEARCH
> IMPORTFILENAME OUTPUTFILENAME"
>     if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 0:

The last test should be == 1 since the program name will always be 
there. But in fact you need the string and file args too so it
should really be:

len(sys.argv) < 4

anything less than 4 args and your code breaks...

>     myString = sys.argv[1]
>     infile = sys.argv[2]
>     outfile = sys.argv[3]

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Sat Feb  2 09:35:01 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 02 Feb 2013 08:35:01 +0000
Subject: [Tutor] Help
In-Reply-To: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>
References: <1359769666.32784.YahooMailNeo@web124501.mail.ne1.yahoo.com>
Message-ID: <keij3i$83r$1@ger.gmane.org>

On 02/02/13 01:47, Jack Little wrote:

> def simpstart():
>    global ammo1
>    global ammo2
>    global ammo3
>    global health
>    global tech_parts
>    global exp
>    global radio_parts
>    ammo1=10
>    ammo2=0
>    ammo3=0
>    health=100
>    tech_parts=0
>    exp=0
>    radio_parts=0

This function is completely pointless, you might as well
just define the variables at the top level.

> print "You awake in a haze. A crate,a door and a radio."
> g1 = raw_input("Which do you choose  ")
> if g1 == "CRATE" or g1 == "Crate" or g1 == "crate":
...
> elif g1 =="DOOR" or g1 == "Door" or g1 == "door":
>        print "You are outside"
> elif g1 == "RADIO" or g1 == "Radio" or g1 == "radio":
...
> g2 = raw_input("So this is NYC.Ten years after.There are a few
> streets.Go west or north  ")
> if g2 == "WEST" or g2 == "West" or g2 == "west":
>        path2_pt1()
> elif g2 == "NORTH" or g2 == "North" or g2 == "north":
>        path1pt1()

The block above is at top level so Python will execute it as it reads 
the file. And at this stage pathpt1 does not exist so it fails. You need 
to move this block into a function (maybe it was intended to be part of 
the one above but you messed up the indent?). Alternatively you need to 
move the definition of pathpt1 above this block.

> def path1pt1():
>      print "This is where it all started. Freedom Tower. A biotech firm
> called Aesthos Biotechnology. Based here."
>      print "I worked there."

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From jamie at kode5.net  Sat Feb  2 10:31:18 2013
From: jamie at kode5.net (Jamie Griffin)
Date: Sat, 2 Feb 2013 09:31:18 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
Message-ID: <20130202093118.GB6079@kontrol.kode5.net>

* Simon Yan <simonyan at fedoraproject.org> [2013-02-02 01:11:12 +0800]:

> I would recommend start off from a simple text editor that has basic syntax
> highlighting features. There are a number of options out there.
> TextMate is a good choice, a little pricy.
> VIM, if you are a terminal guy
> Even Python IDLE is a good choice you wanted to edit just a few simple .py
> files.
> 
> I would suggest give it a look in the Mac App Store and you will find a few
> other good ones too.

I believe the editor of choice on Mac OS X these days is BBEdit -
again, a bit expensive. TextMate used to be good but there are
better ones out there now. Personally, I prefer the commandline
editors, vi or vim which is already installed on Mac OS X. I haven't
used the Xcode editor before but if it's what you're comfortable
with then it's probably best to stick with it.


Primary Key: 4096R/1D31DC38 2011-12-03
Key Fingerprint: A4B9 E875 A18C 6E11 F46D  B788 BEE6 1251 1D31 DC38

From aurelien at cwb.io  Sat Feb  2 10:54:51 2013
From: aurelien at cwb.io (=?utf-8?Q?Aur=C3=A9lien_DESBRI=C3=88RES?=)
Date: Sat, 02 Feb 2013 10:54:51 +0100
Subject: [Tutor] First Python Test
In-Reply-To: <20130202093118.GB6079@kontrol.kode5.net> (Jamie Griffin's
	message of "Sat, 2 Feb 2013 09:31:18 +0000")
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
Message-ID: <87ehgz82hg.fsf@pbot.home>


hmm ... you should use GNU Emacs, it's Free in price and license!

Extensible Text Editor with a cool Python-mode ;-)

Jamie Griffin <jamie at kode5.net> writes:

> * Simon Yan <simonyan at fedoraproject.org> [2013-02-02 01:11:12 +0800]:
>
>> I would recommend start off from a simple text editor that has basic syntax
>> highlighting features. There are a number of options out there.
>> TextMate is a good choice, a little pricy.
>> VIM, if you are a terminal guy
>> Even Python IDLE is a good choice you wanted to edit just a few simple .py
>> files.
>> 
>> I would suggest give it a look in the Mac App Store and you will find a few
>> other good ones too.
>
> I believe the editor of choice on Mac OS X these days is BBEdit -
> again, a bit expensive. TextMate used to be good but there are
> better ones out there now. Personally, I prefer the commandline
> editors, vi or vim which is already installed on Mac OS X. I haven't
> used the Xcode editor before but if it's what you're comfortable
> with then it's probably best to stick with it.
>
>
> Primary Key: 4096R/1D31DC38 2011-12-03
> Key Fingerprint: A4B9 E875 A18C 6E11 F46D  B788 BEE6 1251 1D31 DC38
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor

-- 
Aur?lien DESBRI?RES
Ride free! Ride GNU.ORG

From sydney.shall at kcl.ac.uk  Sat Feb  2 13:45:15 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sat, 2 Feb 2013 12:45:15 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
Message-ID: <510D0A5B.4060809@kcl.ac.uk>

Two free good text editors for the MAC are;
1. Komodo
2. Text Wrangler.
hth
Sydney



On 01/02/2013 17:11, Simon Yan wrote:
>
>
>
> On Fri, Feb 1, 2013 at 9:18 PM, Dustin Guerri <dustinguerri at gmail.com 
> <mailto:dustinguerri at gmail.com>> wrote:
>
>     Thanks for replying, Simon.  I have no particular reason to use
>     Xcode - what would you recommend instead ?
>
> I would recommend start off from a simple text editor that has basic 
> syntax highlighting features. There are a number of options out there.
> TextMate is a good choice, a little pricy.
> VIM, if you are a terminal guy
> Even Python IDLE is a good choice you wanted to edit just a few simple 
> .py files.
>
> I would suggest give it a look in the Mac App Store and you will find 
> a few other good ones too.
>
>
>
>     *Dustin Guerri*
>     Mobile : (+ 34) 625 857 967 <tel:%28%2B%2034%29%20625%20857%20967>
>     dustinguerri at gmail.com <mailto:dustinguerri at gmail.com>
>
>     LinkedIn
>     <http://www.linkedin.com/profile/view?id=16395850&trk=tab_pro>
>
>     Contact me: Google Talk dustinguerri Skype dustinguerri
>     Get a signature like this.
>     <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>     CLICK HERE.
>     <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>
>
>
>     On 1 February 2013 13:05, Simon Yan <simonyan at fedoraproject.org
>     <mailto:simonyan at fedoraproject.org>> wrote:
>
>
>
>
>         On Thu, Jan 17, 2013 at 6:47 AM, Dustin Guerri
>         <dustinguerri at gmail.com <mailto:dustinguerri at gmail.com>> wrote:
>
>             Hi there,
>
>             I'm trying to create a plain text file called "hello.py"
>             with the following text :
>
>             print('hello world')
>             raw_input('Press any key to continue')
>
>             I'd then like to run this program with Python Launcher on
>             a Mac.
>
>             I'd lke to use Xcode as my text editor.  Once I have Xcode
>             open, which template should I use to input the text ?
>
>         I don't think there is a file type of Python that you can
>         create from Xcode.
>         Just curious, why would you want to use XCode as a Python editor?
>
>
>             Thanks,
>
>             *Dustin Guerri*
>             Mobile : (+ 34) 625 857 967
>             <tel:%28%2B%2034%29%20625%20857%20967>
>             dustinguerri at gmail.com <mailto:dustinguerri at gmail.com> |
>             www.vimeo.com/dustinguerri/pop
>             <http://www.vimeo.com/dustinguerri/pop>
>
>             LinkedIn
>             <http://www.linkedin.com/profile/view?id=16395850&trk=tab_pro>
>             Contact me: Google Talk dustinguerri Skype dustinguerri
>             Get a signature like this.
>             <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>             CLICK HERE.
>             <http://r1.wisestamp.com/r/landing?promo=20&dest=http%3A%2F%2Fwww.wisestamp.com%2Femail-install%3Futm_source%3Dextension%26utm_medium%3Demail%26utm_campaign%3Dpromo_20>
>
>
>             _______________________________________________
>             Tutor maillist  - Tutor at python.org <mailto:Tutor at python.org>
>             To unsubscribe or change subscription options:
>             http://mail.python.org/mailman/listinfo/tutor
>
>
>
>
>         -- 
>         Regards,
>         YeeYaa (Simon Yan)
>
>         http://simonyan.fedorapeople.org/
>
>
>
>
>
> -- 
> Regards,
> YeeYaa (Simon Yan)
>
> http://simonyan.fedorapeople.org/
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130202/b5349300/attachment.html>

From sydney.shall at kcl.ac.uk  Sat Feb  2 13:53:26 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sat, 2 Feb 2013 12:53:26 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <20130202093118.GB6079@kontrol.kode5.net>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
Message-ID: <510D0C46.3000600@kcl.ac.uk>

Text Wrangler is a free, cut-down version of BB-Edit, I think.
Sydney



On 02/02/2013 09:31, Jamie Griffin wrote:
> * Simon Yan <simonyan at fedoraproject.org> [2013-02-02 01:11:12 +0800]:
>
>> I would recommend start off from a simple text editor that has basic syntax
>> highlighting features. There are a number of options out there.
>> TextMate is a good choice, a little pricy.
>> VIM, if you are a terminal guy
>> Even Python IDLE is a good choice you wanted to edit just a few simple .py
>> files.
>>
>> I would suggest give it a look in the Mac App Store and you will find a few
>> other good ones too.
> I believe the editor of choice on Mac OS X these days is BBEdit -
> again, a bit expensive. TextMate used to be good but there are
> better ones out there now. Personally, I prefer the commandline
> editors, vi or vim which is already installed on Mac OS X. I haven't
> used the Xcode editor before but if it's what you're comfortable
> with then it's probably best to stick with it.
>
>
> Primary Key: 4096R/1D31DC38 2011-12-03
> Key Fingerprint: A4B9 E875 A18C 6E11 F46D  B788 BEE6 1251 1D31 DC38
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From sydney.shall at kcl.ac.uk  Sat Feb  2 13:57:02 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sat, 2 Feb 2013 12:57:02 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <87ehgz82hg.fsf@pbot.home>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home>
Message-ID: <510D0D1E.9010903@kcl.ac.uk>

Dear Aurelien,
Would you please explain how one installs GNU Emacs on a MAC using OS X 
v10.6.
I cannot find a binary package. The GNU site seems to me to have only 
source code packages.
Mille fois merci.
Sydney


On 02/02/2013 09:54, Aur?lien DESBRI?RES wrote:
> hmm ... you should use GNU Emacs, it's Free in price and license!
>
> Extensible Text Editor with a cool Python-mode ;-)
>
> Jamie Griffin <jamie at kode5.net> writes:
>
>> * Simon Yan <simonyan at fedoraproject.org> [2013-02-02 01:11:12 +0800]:
>>
>>> I would recommend start off from a simple text editor that has basic syntax
>>> highlighting features. There are a number of options out there.
>>> TextMate is a good choice, a little pricy.
>>> VIM, if you are a terminal guy
>>> Even Python IDLE is a good choice you wanted to edit just a few simple .py
>>> files.
>>>
>>> I would suggest give it a look in the Mac App Store and you will find a few
>>> other good ones too.
>> I believe the editor of choice on Mac OS X these days is BBEdit -
>> again, a bit expensive. TextMate used to be good but there are
>> better ones out there now. Personally, I prefer the commandline
>> editors, vi or vim which is already installed on Mac OS X. I haven't
>> used the Xcode editor before but if it's what you're comfortable
>> with then it's probably best to stick with it.
>>
>>
>> Primary Key: 4096R/1D31DC38 2011-12-03
>> Key Fingerprint: A4B9 E875 A18C 6E11 F46D  B788 BEE6 1251 1D31 DC38
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From aurelien at cwb.io  Sat Feb  2 14:23:24 2013
From: aurelien at cwb.io (=?utf-8?Q?Aur=C3=A9lien_DESBRI=C3=88RES?=)
Date: Sat, 02 Feb 2013 14:23:24 +0100
Subject: [Tutor] First Python Test
In-Reply-To: <510D0D1E.9010903@kcl.ac.uk> (Sydney Shall's message of "Sat, 2
	Feb 2013 12:57:02 +0000")
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net> <87ehgz82hg.fsf@pbot.home>
	<510D0D1E.9010903@kcl.ac.uk>
Message-ID: <874nhu97eb.fsf@pbot.home>


Join #emacs on irc.freenode.net and ask them.

I do not bring any support for non free Operating System nor
BrainWashing ones ;-)

"Shall, Sydney" <sydney.shall at kcl.ac.uk> writes:

> Dear Aurelien,
> Would you please explain how one installs GNU Emacs on a MAC using OS
> X v10.6.
> I cannot find a binary package. The GNU site seems to me to have only
> source code packages.
> Mille fois merci.
> Sydney
>
>
> On 02/02/2013 09:54, Aur?lien DESBRI?RES wrote:
>> hmm ... you should use GNU Emacs, it's Free in price and license!
>>
>> Extensible Text Editor with a cool Python-mode ;-)
>>
>> Jamie Griffin <jamie at kode5.net> writes:
>>
>>> * Simon Yan <simonyan at fedoraproject.org> [2013-02-02 01:11:12 +0800]:
>>>
>>>> I would recommend start off from a simple text editor that has basic syntax
>>>> highlighting features. There are a number of options out there.
>>>> TextMate is a good choice, a little pricy.
>>>> VIM, if you are a terminal guy
>>>> Even Python IDLE is a good choice you wanted to edit just a few simple .py
>>>> files.
>>>>
>>>> I would suggest give it a look in the Mac App Store and you will find a few
>>>> other good ones too.
>>> I believe the editor of choice on Mac OS X these days is BBEdit -
>>> again, a bit expensive. TextMate used to be good but there are
>>> better ones out there now. Personally, I prefer the commandline
>>> editors, vi or vim which is already installed on Mac OS X. I haven't
>>> used the Xcode editor before but if it's what you're comfortable
>>> with then it's probably best to stick with it.
>>>
>>>
>>> Primary Key: 4096R/1D31DC38 2011-12-03
>>> Key Fingerprint: A4B9 E875 A18C 6E11 F46D  B788 BEE6 1251 1D31 DC38
>>> _______________________________________________
>>> Tutor maillist  -  Tutor at python.org
>>> To unsubscribe or change subscription options:
>>> http://mail.python.org/mailman/listinfo/tutor

-- 
Aur?lien DESBRI?RES
Ride free! Ride GNU.ORG

From pacificmorrowind at gmail.com  Sat Feb  2 15:29:13 2013
From: pacificmorrowind at gmail.com (Nick W)
Date: Sat, 2 Feb 2013 06:29:13 -0800
Subject: [Tutor] Read from large text file, parse, find string,
 print string + line number to second text file.
In-Reply-To: <CALyVa3Vcu9aqO2j2iO6KgB0P7ox+nuwCQvBAcLxZRVi6m8pmxA@mail.gmail.com>
References: <CALyVa3XSp-D8zUy=TULerfPj3nX1g0QAch08CfXBFFz48WpzBg@mail.gmail.com>
	<510C275B.7060200@davea.name>
	<CALyVa3Xmh6gbaKU6RNg5ghCAVpuC1Z68USA1wkDDvMwUXjk5DA@mail.gmail.com>
	<CALyVa3UfCRh=UF3O0qQMogbiYUh2smQX=J_4Pitx+Zo+3_Pq8Q@mail.gmail.com>
	<510C6519.5040502@pearwood.info>
	<CALyVa3WbBUDnafxvtdUmLeXmZy3EMz7vaB8P8XWVRevXrciowQ@mail.gmail.com>
	<CALyVa3Vcu9aqO2j2iO6KgB0P7ox+nuwCQvBAcLxZRVi6m8pmxA@mail.gmail.com>
Message-ID: <CAHXRGSP8+qdtrof0PKijCSgVnqQ3jpLr7xPdp_XOQkR5qQ10QA@mail.gmail.com>

I'd suggest having the newfile open after outfile is defined also a close
statement on newfile - or use it with 'with' such as:
<unchanged code except removing "newfile = open('outfile', 'w')" line>
... and replace the last line like so:
with open(outfile, 'w') as newfile:
    main(mystring, infile, newfile)

(and looking muchly improved, well done)
Nick


On Fri, Feb 1, 2013 at 8:57 PM, Scurvy Scott <etanes.rm at gmail.com> wrote:

> And just for the records sake, this is what I've gotten and you guys
> should see obviously that you helped a lot and I learned a thing or
> two so I won't have to ask the same silly questions next time:
>
>
>
>
> def main(mystring, infile, outfile):
>     with open('infile', 'r') as inF:
>                 for index, line in enumerate(inF):
>                         if myString in line:
>                                 newfile.write("string %s found on line
> #%d" (line, index))
> print "complete."
>
>
> if __name__ == '__main__':
>    import sys
>    newfile = open('outfile', 'w')
>    help_text = "usage: python scanfile.py STRINGTOSEARCH
> IMPORTFILENAME OUTPUTFILENAME"
>    if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 0:
>            print (help_text)
>            sys.exit()
>    myString = sys.argv[1]
>    infile = sys.argv[2]
>    outfile = sys.argv[3]
>    main(mystring, infile, outfile)
>
> Look right to you? Looks okay to me, except maybe the three ORs in the
> information line, is there a more pythonic way to accomplish that
> task?
>
> Scott
>
> On Fri, Feb 1, 2013 at 8:31 PM, Scurvy Scott <etanes.rm at gmail.com> wrote:
> >> Best practice is to check if your program is being run as a script
> before
> >> doing anything. That way you can still import the module for testing or
> >> similar:
> >>
> >>
> >> def main(mystring, infile, outfile):
> >>    # do stuff here
> >>
> >>
> >> if __name__ == '__main__':
> >>    # Running as a script.
> >>    import sys
> >>    mystring = sys.argv[1]
> >>    infile = sys.argv[2]
> >>    outfile = sys.argv[3]
> >>    main(mystring, infile, outfile)
> >>
> >>
> >>
> >> Best practice for scripts (not just Python scripts, but *any* script)
> is to
> >> provide help when asked. Insert this after the "import sys" line,
> before you
> >> start processing:
> >>
> >>    if '-h' in sys.argv or '--help' in sys.argv:
> >>        print(help_text)
> >>        sys.exit()
> >>
> >>
> >>
> >> If your argument processing is more complicated that above, you should
> use
> >> one of the three argument parsing modules that Python provides:
> >>
> >> http://docs.python.org/2/library/getopt.html
> >> http://docs.python.org/2/library/optparse.html (deprecated -- do not
> use
> >> this for new code)
> >> http://docs.python.org/2/library/argparse.html
> >>
> >>
> >> getopt is (in my opinion) the simplest to get started, but the weakest.
> >>
> >> There are also third-party argument parsers that you could use. Here's
> one
> >> which I have never used but am intrigued by:
> >>
> >> http://docopt.org/
> >>
> >>
> >>
> >> --
> >> Steven
> >>
> >> _______________________________________________
> >> Tutor maillist  -  Tutor at python.org
> >> To unsubscribe or change subscription options:
> >> http://mail.python.org/mailman/listinfo/tutor
> >
> > Steve-
> >  thanks a lot for showing me the if __name__ = main part
> > I've often wondered how it was used and it didn't make sense until I
> > saw it in my own code if that makes any sense.
> > Also appreciate the help on the "instructional" side of things.
> >
> > One question related to the instruction aspect- does this make sense to
> you?
> >
> > If len(sys.argv) == 0:
> >     print "usage: etc etc etc"
> >
> >
> >
> > Nick, Dave, and Steve, again, you guys are awesome. Thanks for all your
> help.
> >
> > Scott
> _______________________________________________
> 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/20130202/836af2ef/attachment.html>

From sydney.shall at kcl.ac.uk  Sat Feb  2 16:27:17 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sat, 2 Feb 2013 15:27:17 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <874nhu97eb.fsf@pbot.home>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<874nhu97eb.fsf@pbot.home>
Message-ID: <510D3055.4020703@kcl.ac.uk>

You are correct, of course.
OK. So Bluefish is the Free open-source GNU editor and it is suitable 
for Python.
We will have a complete menagerie soon.
Thanks.
Sydney


On 02/02/2013 13:23, Aur?lien DESBRI?RES wrote:
> Join #emacs on irc.freenode.net and ask them.
>
> I do not bring any support for non free Operating System nor
> BrainWashing ones ;-)
>
> "Shall, Sydney" <sydney.shall at kcl.ac.uk> writes:
>
>> Dear Aurelien,
>> Would you please explain how one installs GNU Emacs on a MAC using OS
>> X v10.6.
>> I cannot find a binary package. The GNU site seems to me to have only
>> source code packages.
>> Mille fois merci.
>> Sydney
>>
>>
>> On 02/02/2013 09:54, Aur?lien DESBRI?RES wrote:
>>> hmm ... you should use GNU Emacs, it's Free in price and license!
>>>
>>> Extensible Text Editor with a cool Python-mode ;-)
>>>
>>> Jamie Griffin <jamie at kode5.net> writes:
>>>
>>>> * Simon Yan <simonyan at fedoraproject.org> [2013-02-02 01:11:12 +0800]:
>>>>
>>>>> I would recommend start off from a simple text editor that has basic syntax
>>>>> highlighting features. There are a number of options out there.
>>>>> TextMate is a good choice, a little pricy.
>>>>> VIM, if you are a terminal guy
>>>>> Even Python IDLE is a good choice you wanted to edit just a few simple .py
>>>>> files.
>>>>>
>>>>> I would suggest give it a look in the Mac App Store and you will find a few
>>>>> other good ones too.
>>>> I believe the editor of choice on Mac OS X these days is BBEdit -
>>>> again, a bit expensive. TextMate used to be good but there are
>>>> better ones out there now. Personally, I prefer the commandline
>>>> editors, vi or vim which is already installed on Mac OS X. I haven't
>>>> used the Xcode editor before but if it's what you're comfortable
>>>> with then it's probably best to stick with it.
>>>>
>>>>
>>>> Primary Key: 4096R/1D31DC38 2011-12-03
>>>> Key Fingerprint: A4B9 E875 A18C 6E11 F46D  B788 BEE6 1251 1D31 DC38
>>>> _______________________________________________
>>>> Tutor maillist  -  Tutor at python.org
>>>> To unsubscribe or change subscription options:
>>>> http://mail.python.org/mailman/listinfo/tutor


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From alan.gauld at btinternet.com  Sat Feb  2 18:49:14 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 02 Feb 2013 17:49:14 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <510D0D1E.9010903@kcl.ac.uk>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
Message-ID: <kejjin$9k6$1@ger.gmane.org>

On 02/02/13 12:57, Shall, Sydney wrote:
> Dear Aurelien,
> Would you please explain how one installs GNU Emacs on a MAC using OS X
> v10.6.

Last time I looked it was already installed. Just type emacs at a 
Terminal prompt.

You can also get a Cocoa version that run in a separate Window, try 
Google for Cocoa emacs...



-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Sat Feb  2 18:50:47 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 02 Feb 2013 17:50:47 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <510D3055.4020703@kcl.ac.uk>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<874nhu97eb.fsf@pbot.home> <510D3055.4020703@kcl.ac.uk>
Message-ID: <kejjlk$9k6$2@ger.gmane.org>

On 02/02/13 15:27, Shall, Sydney wrote:

> OK. So Bluefish is the Free open-source GNU editor and it is suitable
> for Python.


No thats emacs.
Bluefish is an open source web editor(HTML, CSS etc).

It may support Python but its not an ideal IDE.


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From sydney.shall at kcl.ac.uk  Sat Feb  2 19:09:37 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sat, 2 Feb 2013 18:09:37 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <kejjlk$9k6$2@ger.gmane.org>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<874nhu97eb.fsf@pbot.home> <510D3055.4020703@kcl.ac.uk>
	<kejjlk$9k6$2@ger.gmane.org>
Message-ID: <510D5661.7090909@kcl.ac.uk>

Thanks for both your comments, Alan. I am wiser now.
Sydney

On 02/02/2013 17:50, Alan Gauld wrote:
> On 02/02/13 15:27, Shall, Sydney wrote:
>
>> OK. So Bluefish is the Free open-source GNU editor and it is suitable
>> for Python.
>
>
> No thats emacs.
> Bluefish is an open source web editor(HTML, CSS etc).
>
> It may support Python but its not an ideal IDE.
>
>


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From david at graniteweb.com  Sat Feb  2 20:25:33 2013
From: david at graniteweb.com (David Rock)
Date: Sat, 2 Feb 2013 13:25:33 -0600
Subject: [Tutor] First Python Test
In-Reply-To: <kejjin$9k6$1@ger.gmane.org>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<kejjin$9k6$1@ger.gmane.org>
Message-ID: <20130202192533.GA2129@wdfs.bad>

* Alan Gauld <alan.gauld at btinternet.com> [2013-02-02 17:49]:
> On 02/02/13 12:57, Shall, Sydney wrote:
> > Dear Aurelien,
> > Would you please explain how one installs GNU Emacs on a MAC using OS X
> > v10.6.
> 
> Last time I looked it was already installed. Just type emacs at a 
> Terminal prompt.

Verified on 10.6.8

-- 
David Rock
david at graniteweb.com

From sydney.shall at kcl.ac.uk  Sun Feb  3 13:20:43 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sun, 3 Feb 2013 12:20:43 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <kejjin$9k6$1@ger.gmane.org>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<kejjin$9k6$1@ger.gmane.org>
Message-ID: <510E561B.6070003@kcl.ac.uk>

Dear Alan,
I installed Cocoa emacs successfully.
But it does not run on OS X 10.6.8.
The notes with it say that it was built for 10.4.
Where may I look for an update, please?
With many thanks for your help.
Sydney


On 02/02/2013 17:49, Alan Gauld wrote:
> On 02/02/13 12:57, Shall, Sydney wrote:
>> Dear Aurelien,
>> Would you please explain how one installs GNU Emacs on a MAC using OS X
>> v10.6.
>
> Last time I looked it was already installed. Just type emacs at a 
> Terminal prompt.
>
> You can also get a Cocoa version that run in a separate Window, try 
> Google for Cocoa emacs...
>
>
>


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From jguadamuz at gmail.com  Sun Feb  3 14:13:44 2013
From: jguadamuz at gmail.com (=?ISO-8859-1?Q?Jonat=E1n_Guadamuz?=)
Date: Sun, 3 Feb 2013 07:13:44 -0600
Subject: [Tutor] First Python Test
In-Reply-To: <510E561B.6070003@kcl.ac.uk>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net> <87ehgz82hg.fsf@pbot.home>
	<510D0D1E.9010903@kcl.ac.uk> <kejjin$9k6$1@ger.gmane.org>
	<510E561B.6070003@kcl.ac.uk>
Message-ID: <7583509039403960590@unknownmsgid>

El 03/02/2013, a las 06:53 a.m., "Shall, Sydney"
<sydney.shall at kcl.ac.uk> escribi?:

> Dear Alan,
> I installed Cocoa emacs successfully.
> But it does not run on OS X 10.6.8.
> The notes with it say that it was built for 10.4.
> Where may I look for an update, please?
> With many thanks for your help.
> Sydney

Maybe you can look here

aquamacs.org

From sydney.shall at kcl.ac.uk  Sun Feb  3 17:47:26 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Sun, 3 Feb 2013 16:47:26 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <7583509039403960590@unknownmsgid>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<kejjin$9k6$1@ger.gmane.org> <510E561B.6070003@kcl.ac.uk>
	<7583509039403960590@unknownmsgid>
Message-ID: <510E949E.7010506@kcl.ac.uk>



Thanks Jonatan.
Sydney


On 03/02/2013 13:13, Jonat?n Guadamuz wrote:
> El 03/02/2013, a las 06:53 a.m., "Shall, Sydney"
> <sydney.shall at kcl.ac.uk> escribi?:
>
>> Dear Alan,
>> I installed Cocoa emacs successfully.
>> But it does not run on OS X 10.6.8.
>> The notes with it say that it was built for 10.4.
>> Where may I look for an update, please?
>> With many thanks for your help.
>> Sydney
> Maybe you can look here
>
> aquamacs.org
>


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From jmz.griffin at kode5.net  Sun Feb  3 17:53:48 2013
From: jmz.griffin at kode5.net (James Griffin)
Date: Sun, 3 Feb 2013 16:53:48 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <510D0A5B.4060809@kcl.ac.uk>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<510D0A5B.4060809@kcl.ac.uk>
Message-ID: <20130203165348.GB30919@kontrol.kode5.net>

--> Shall, Sydney <sydney.shall at kcl.ac.uk> [2013-02-02 12:45:15 +0000]:

> Two free good text editors for the MAC are;
> 1. Komodo
> 2. Text Wrangler.
> hth
> Sydney

aquamacs is the correct gui version to use. There is also a gvim
binary available. Both emacs and vim are installed already on Mac
OS X but in text only versions, no GUI.

I have never used Komodo or Text Wrangler, or any other GUI editor
for that matter so I cannot comment on how good they are. I tend
to spend about 90% of my time using the command-line on my Mac, but
that's just my preference. Some people prefer GUI editors.

From alan.gauld at btinternet.com  Sun Feb  3 18:11:48 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sun, 03 Feb 2013 17:11:48 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <510E561B.6070003@kcl.ac.uk>
References: <CAP1XXT15Z8ENrxK8kG9HstwQKUbc-WLG9AjPcR65kkB4c19O+g@mail.gmail.com>
	<CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<kejjin$9k6$1@ger.gmane.org> <510E561B.6070003@kcl.ac.uk>
Message-ID: <kem5oh$eep$1@ger.gmane.org>

On 03/02/13 12:20, Shall, Sydney wrote:
> Dear Alan,
> I installed Cocoa emacs successfully.
> But it does not run on OS X 10.6.8.
> The notes with it say that it was built for 10.4.

Sofware built for 10.4 should run fine on 10.6.
But I only have 10.4 so can't do any testing...

Not sure why its broke, but thee are several variants
to choose from, somebody said aquamacs, there are others
too.


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From jacklittlemc at yahoo.com  Sun Feb  3 20:15:42 2013
From: jacklittlemc at yahoo.com (Jack Little)
Date: Sun, 3 Feb 2013 11:15:42 -0800 (PST)
Subject: [Tutor] More Help
Message-ID: <1359918942.19290.YahooMailNeo@web124503.mail.ne1.yahoo.com>

So I have gotten responses to my previous email sent 3 days ago, all saying define path1pt1() before simpstart, but I do not know how. Help?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130203/8957c277/attachment.html>

From s.charonis at gmail.com  Sun Feb  3 20:26:05 2013
From: s.charonis at gmail.com (Spyros Charonis)
Date: Sun, 3 Feb 2013 19:26:05 +0000
Subject: [Tutor] pickle.dump yielding awkward output
Message-ID: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>

Hello Pythoners,

I am experiencing a strange result with the pickle module when using it to
write certain results to a separate file.

In short, I have a program that reads a file, finds lines which satisfy
some criteria, and extracts those lines, storing them in a list. I am
trying to write this list to a separate file.

The list of extracted lines looks like this:

ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
  N

ATOM      2  CA  GLN A   1      29.809  11.972  54.274  1.00 58.51
  C

ATOM      3  C   GLN A   1      28.376  11.536  54.029  1.00 55.13
  C

The output stored from the call to the pickle.dump method, however, looks
like this:

(lp0
S'ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
    N  \r\n'
p1
aS'ATOM      2  CA  GLN A   1      29.809  11.972  54.274  1.00 58.51
    C  \r\n'
p2
aS'ATOM      3  C   GLN A   1      28.376  11.536  54.029  1.00 55.13
    C  \r\n'

The code I am using to write the output to an external file goes as follows:

def export_antibody_chains():
''' EXPORT LIST OF EXTRACTED CHAINS TO FILE '''
chains_file = open(query + '_Chains', 'wb')
pickle.dump(ab_chains, chains_file)  # ab_chains is global
chains_file.close()
return

Does anyone know why the strings lp0, S', aS' are showing up?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130203/8f1bb8af/attachment-0001.html>

From joel.goldstick at gmail.com  Sun Feb  3 20:29:44 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Sun, 3 Feb 2013 14:29:44 -0500
Subject: [Tutor] More Help
In-Reply-To: <1359918942.19290.YahooMailNeo@web124503.mail.ne1.yahoo.com>
References: <1359918942.19290.YahooMailNeo@web124503.mail.ne1.yahoo.com>
Message-ID: <CAPM-O+x7KXH+snx=6zctaB5AJ4UZaiXC51BngRXLEMXCRaXVyg@mail.gmail.com>

Move the code that defines path1pt1 above the function that calls it.

Also, don't start of new thread -- you are making it impossible for someone
to know the context of your question.  Also, Use a better subject line


On Sun, Feb 3, 2013 at 2:15 PM, Jack Little <jacklittlemc at yahoo.com> wrote:

> So I have gotten responses to my previous email sent 3 days ago, all
> saying define path1pt1() before simpstart, but I do not know how. Help?
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>


-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130203/9f5d0715/attachment.html>

From joel.goldstick at gmail.com  Sun Feb  3 20:54:26 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Sun, 3 Feb 2013 14:54:26 -0500
Subject: [Tutor] More Help
In-Reply-To: <CAPM-O+x7KXH+snx=6zctaB5AJ4UZaiXC51BngRXLEMXCRaXVyg@mail.gmail.com>
References: <1359918942.19290.YahooMailNeo@web124503.mail.ne1.yahoo.com>
	<CAPM-O+x7KXH+snx=6zctaB5AJ4UZaiXC51BngRXLEMXCRaXVyg@mail.gmail.com>
Message-ID: <CAPM-O+zD-jditcP4CnVhzR1ECz_-XZwwx4c3YrsB-HaKCCXMzA@mail.gmail.com>

On Sun, Feb 3, 2013 at 2:29 PM, Joel Goldstick <joel.goldstick at gmail.com>wrote:

> Move the code that defines path1pt1 above the function that calls it.
>
> Also, don't start of new thread -- you are making it impossible for
> someone to know the context of your question.  Also, Use a better subject
> line
>
>
> On Sun, Feb 3, 2013 at 2:15 PM, Jack Little <jacklittlemc at yahoo.com>wrote:
>
>> So I have gotten responses to my previous email sent 3 days ago, all
>> saying define path1pt1() before simpstart, but I do not know how. Help?
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
I was curious about this post, and so I looked back through your previous
posts.  They all seem to be about getting this game code to work.  I'm
guessing that you copied it from somewhere -- or mostly copied it.  You
don't seem to have a grasp of basic concepts of programming in python.
This seems to be a good example of cargo cult programming
http://en.wikipedia.org/wiki/Cargo_cult_programming I suggest you set aside
this project and go to the python online tutorial, or use Alan's book
http://www.alan-g.me.uk/ , or google for Leaning Python the hard way, and
get some basic concepts together in your mind.

Also, set your mail client to text -- not rich text or html.  Since
indentation in python is essential to the meaning of the code, using rich
text which often mangles indentation makes your examples impossible to
decipher.

When you've done that you will be able to ask question here that will help
you learn more and raise your skill level.


>
>
> --
> Joel Goldstick
> http://joelgoldstick.com
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130203/2c47a0b6/attachment.html>

From steve at pearwood.info  Sun Feb  3 23:36:16 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Mon, 04 Feb 2013 09:36:16 +1100
Subject: [Tutor] More Help
In-Reply-To: <1359918942.19290.YahooMailNeo@web124503.mail.ne1.yahoo.com>
References: <1359918942.19290.YahooMailNeo@web124503.mail.ne1.yahoo.com>
Message-ID: <510EE660.3090802@pearwood.info>

On 04/02/13 06:15, Jack Little wrote:
> So I have gotten responses to my previous email sent 3 days ago, all saying
>define path1pt1() before simpstart, but I do not know how. Help?


You have something like this:


...code...
...more code...
path1pt1()
...
...

def path1pt1():
     definition goes here



Select the text starting with "def path1pt1" in your text editor, and ending
with the end of the function. Then cut the text (Ctrl-X), move the cursor to
the top of the file, and paste it (Ctrl-V). Clean up any extra blank lines
needed. Your code should then look like this:


def path1pt1():
     definition goes here

...code...
...more code...
path1pt1()
...
...




-- 
Steven

From davea at davea.name  Mon Feb  4 00:07:15 2013
From: davea at davea.name (Dave Angel)
Date: Sun, 03 Feb 2013 18:07:15 -0500
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
Message-ID: <510EEDA3.2050205@davea.name>

On 02/03/2013 02:26 PM, Spyros Charonis wrote:
> Hello Pythoners,
>
> I am experiencing a strange result with the pickle module when using it to
> write certain results to a separate file.
>
> In short, I have a program that reads a file, finds lines which satisfy
> some criteria, and extracts those lines, storing them in a list. I am
> trying to write this list to a separate file.
>
> The list of extracted lines looks like this:
>
> ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>    N
>
> ATOM      2  CA  GLN A   1      29.809  11.972  54.274  1.00 58.51
>    C
>
> ATOM      3  C   GLN A   1      28.376  11.536  54.029  1.00 55.13
>    C
>
> The output stored from the call to the pickle.dump method, however, looks
> like this:
>
> (lp0
> S'ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>      N  \r\n'
> p1
> aS'ATOM      2  CA  GLN A   1      29.809  11.972  54.274  1.00 58.51
>      C  \r\n'
> p2
> aS'ATOM      3  C   GLN A   1      28.376  11.536  54.029  1.00 55.13
>      C  \r\n'
>
> The code I am using to write the output to an external file goes as follows:
>
> def export_antibody_chains():
> ''' EXPORT LIST OF EXTRACTED CHAINS TO FILE '''
> chains_file = open(query + '_Chains', 'wb')
> pickle.dump(ab_chains, chains_file)  # ab_chains is global
> chains_file.close()
> return
>
> Does anyone know why the strings lp0, S', aS' are showing up?
>
>

Pickle stores the type of each variable, as well as the value, and 
stores it in a way as to make it easy to "unpickle" it.

-- 
DaveA

From davea at davea.name  Mon Feb  4 00:48:35 2013
From: davea at davea.name (Dave Angel)
Date: Sun, 03 Feb 2013 18:48:35 -0500
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <CADe=Ya-31Rpd2DoWPxqJZJTJrWNoAR1mPn3Mypwr1SGddJr=Lg@mail.gmail.com>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
	<510EEDA3.2050205@davea.name>
	<CADe=Ya-31Rpd2DoWPxqJZJTJrWNoAR1mPn3Mypwr1SGddJr=Lg@mail.gmail.com>
Message-ID: <510EF753.4090804@davea.name>

(top-posting and offline response fixed)

On Sun, Feb 3, 2013 at 11:07 PM, Dave Angel <davea at davea.name> wrote:
>> On 02/03/2013 02:26 PM, Spyros Charonis wrote:
>>
>>> Hello Pythoners,
>>>
>>> I am experiencing a strange result with the pickle module when using it to
>>> write certain results to a separate file.
>>>
>>> In short, I have a program that reads a file, finds lines which satisfy
>>> some criteria, and extracts those lines, storing them in a list. I am
>>> trying to write this list to a separate file.
>>>
>>> The list of extracted lines looks like this:
>>>
>>> ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>>>     N
>>>
>>> ATOM      2  CA  GLN A   1      29.809  11.972  54.274  1.00 58.51
>>>     C
>>>
>>> ATOM      3  C   GLN A   1      28.376  11.536  54.029  1.00 55.13
>>>     C
>>>
>>> The output stored from the call to the pickle.dump method, however, looks
>>> like this:
>>>
>>> (lp0
>>> S'ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>>>       N  \r\n'
>>> p1
>>> aS'ATOM      2  CA  GLN A   1      29.809  11.972  54.274  1.00 58.51
>>>       C  \r\n'
>>> p2
>>> aS'ATOM      3  C   GLN A   1      28.376  11.536  54.029  1.00 55.13
>>>       C  \r\n'
>>>
>>> The code I am using to write the output to an external file goes as
>>> follows:
>>>
>>> def export_antibody_chains():
>>> ''' EXPORT LIST OF EXTRACTED CHAINS TO FILE '''
>>> chains_file = open(query + '_Chains', 'wb')
>>> pickle.dump(ab_chains, chains_file)  # ab_chains is global
>>> chains_file.close()
>>> return
>>>
>>> Does anyone know why the strings lp0, S', aS' are showing up?
>>>
>>>
>>>
>> Pickle stores the type of each variable, as well as the value, and stores
>> it in a way as to make it easy to "unpickle" it.
>>
>>

On 02/03/2013 06:17 PM, Spyros Charonis wrote:
> Thank you Dave,
>
> Is there any way to circumvent this so that I get the list rendered
> normally? Many thanks.
>

You'd better define "normally."  Pickle's output is normal for pickle.  
Perhaps you want the values to be human readable instead.

One possibility of many:  If you know that all the values in the list 
are strings, and you want to produce a text file, with one such string 
per line, then try:

     outfile = open( "filename.txt", 'wt")
     for line in mylist:
         outfile.write( line + "\n")
     outfile.close()

There are ways to clean that up, but since you haven't specified your 
python version, that'll do for a first attempt.

--
DaveA


From steve at pearwood.info  Mon Feb  4 01:17:13 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Mon, 04 Feb 2013 11:17:13 +1100
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
Message-ID: <510EFE09.7070002@pearwood.info>

On 04/02/13 06:26, Spyros Charonis wrote:

> The output stored from the call to the pickle.dump method, however, looks
> like this:
[...]
> Does anyone know why the strings lp0, S', aS' are showing up?


Why do you care?

Pickle is not a human-readable format. It may use plain text (optionally, there are also binary pickle formats) but it is not intended for humans to read or write. Pickle will write whatever information it needs in order to be able to reconstruct the data that you give it. My guess is that the things you see tell pickle which protocol is being used, and that the data you are writing is a list of strings.

Unless you are creating a tool for analyzing pickle files, all you need care is that you can round-trip data into and out of pickle files.

f = open('filename', 'wb')
pickle.dump(data, f)
f.close()
f = open('filename', 'rb')
newdata = pickle.load(f)
f.close()

assert data == newdata


If you're looking for a storage format that is human-editable, check out the json or plist modules, or the third-party pyyaml module.


http://docs.python.org/2/library/json.html
http://docs.python.org/2/library/plistlib.html
http://pyyaml.org/




-- 
Steven

From alan.gauld at btinternet.com  Mon Feb  4 02:03:45 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 04 Feb 2013 01:03:45 +0000
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
Message-ID: <ken1de$fhn$1@ger.gmane.org>

On 03/02/13 19:26, Spyros Charonis wrote:
> I am experiencing a strange result with the pickle module when using it
> to write certain results to a separate file.

The only strangec results using pickle would be if the uinpickle failed 
to bring back that which was pickled.
Pickle is a storage format not a display format.

> In short, I have a program that reads a file, finds lines which satisfy
> some criteria, and extracts those lines, storing them in a list.

Extracting them with pickle I hope? That's the only thing that should be 
used to unpickle a pickled file.


> The list of extracted lines looks like this:
>
> ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>      N
>
> The output stored from the call to the pickle.dump method, however,
> looks like this:
>
> (lp0
> S'ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>        N  \r\n'

Yep, I'm sure pickle can make sense of it.

> Does anyone know why the strings lp0, S', aS' are showing up?

Because that's what pickle puts in there to help it unpickle it later.

Why do you care? You shouldn't be looking at it (unless you want to 
understand how pickle works).

pickle, as the name suggests, is intended for storing python objects
for later use. This is often called object persistence in programming 
parlance. It is not designed for anything else.

If you want cleanly formatted data in a file that you can read in a text 
editor or similar you need to do the formatting yourself or use another 
recognised format such as CSV or configparser (aka ini file).

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From gayathri.s112 at gmail.com  Mon Feb  4 07:24:35 2013
From: gayathri.s112 at gmail.com (Gayathri S)
Date: Mon, 4 Feb 2013 11:54:35 +0530
Subject: [Tutor] Help- Regarding python
Message-ID: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>

Hi All....!
            If i have data set like this means...

3626,5000,2918,5000,2353,2334,2642,1730,1687,1695,1717,1744,593,502,493,504,449,431,444,444,429,10
438,498,3626,3629,5000,2918,5000,2640,2334,2639,1696,1687,1695,1717,1744,592,502,493,504,449,431,444,441,429,10
439,498,3626,3629,5000,2918,5000,2633,2334,2645,1705,1686,1694,1719,1744,589,502,493,504,446,431,444,444,430,10
440,5000,3627,3628,5000,2919,3028,2346,2330,2638,1727,1684,1692,1714,1745,588,501,492,504,451,433,446,444,432,10
444,5021,3631,3634,5000,2919,5000,2626,2327,2638,1698,1680,1688,1709,1740,595,500,491,503,453,436,448,444,436,10
451,5025,3635,3639,5000,2920,3027,2620,2323,2632,1706,1673,1681,1703,753,595,499,491,502,457,440,453,454,442,20
458,5022,3640,3644,5000,2922,5000,2346,2321,2628,1688,1666,1674,1696,744,590,496.

How to do PCA on this data? if it is in array how to do that? and also how
to use princomp() in PCA?

Shall i use the following code for doing PCA on given input? could you tell
me?

from numpy import mean,cov,double,cumsum,dot,linalg,array,rank
from pylab import plot,subplot,axis,stem,show,figure
A = array([ [2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9],
            [2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1] ])
M = (A-mean(A.T,axis=1)).T[latent,coeff] = linalg.eig(cov(M))
score = dot(coeff.T,M)
return coeff,score,latent
princomp(A):
coeff, score, latent = princomp(A.T)
figure()
subplot(121)
m = mean(A,axis=1)
plot([0, -coeff[0,0]*2]+m[0], [0, -coeff[0,1]*2]+m[1],'--k')
plot([0, coeff[1,0]*2]+m[0], [0, coeff[1,1]*2]+m[1],'--k')
plot(A[0,:],A[1,:],'ob') # the data
axis('equal')
subplot(122)
plot(score[0,:],score[1,:],'*g')
axis('equal')
plt.show()

                                                     Thanks....!

      Regards,

       Gayathri.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130204/d26fbf8e/attachment.html>

From alan.gauld at btinternet.com  Mon Feb  4 09:45:10 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 04 Feb 2013 08:45:10 +0000
Subject: [Tutor] Help- Regarding python
In-Reply-To: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
References: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
Message-ID: <kensej$rnf$1@ger.gmane.org>

On 04/02/13 06:24, Gayathri S wrote:
> Hi All....!
>              If i have data set like this means...
>
> 3626,5000,2918,5000,2353,2334,2642,1730,1687,1695,1717,1744,593,502,493,504,449,431,444,444,429,10
...
> 458,5022,3640,3644,5000,2922,5000,2346,2321,2628,1688,1666,1674,1696,744,590,496.
>
> How to do PCA on this data? if it is in array how to do that? and also
> how to use princomp() in PCA?

No idea. I don't know what pca or princomp are.
It looks like they might be numpy or pylab functions in which case you 
probably will get better results posting on a forum for those modules.
This list is for learning the core language and standard library.

Having said that it looks like you could use some time learning the 
basics before delving into numpy etc. comments below...

> from numpy import mean,cov,double,cumsum,dot,linalg,array,rank
> from pylab import plot,subplot,axis,stem,show,figure
> A = array([ [2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9],
>              [2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1] ])
> M = (A-mean(A.T,axis=1)).T[latent,coeff] = linalg.eig(cov(M))
> score = dot(coeff.T,M)
> return coeff,score,latent

You have a return that is not inside a function. That makes no sense
and in fact I get a syntax error so presumably you haven't actually 
tried running this code.

> princomp(A):

This calls princomp() but does nothing with the return values

> coeff, score, latent = princomp(A.T)

This calls princomp() and stores 3 return values.
Its unusual for a function to have such different semantics.
Which is correct?

> figure()
> subplot(121)

Again calling functions without storing values. It may be valid
but looks unlikely...

> m = mean(A,axis=1)
> plot([0, -coeff[0,0]*2]+m[0], [0, -coeff[0,1]*2]+m[1],'--k')
> plot([0, coeff[1,0]*2]+m[0], [0, coeff[1,1]*2]+m[1],'--k')
> plot(A[0,:],A[1,:],'ob') # the data
> axis('equal')
> subplot(122)
> plot(score[0,:],score[1,:],'*g')
> axis('equal')
> plt.show()

Here you use plt but plt is not defined anywhere in your program.

I think you need to go back to Python basics and learn
how to write basic code before trying to use the more
exotic modules.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From s.charonis at gmail.com  Mon Feb  4 12:12:22 2013
From: s.charonis at gmail.com (Spyros Charonis)
Date: Mon, 4 Feb 2013 11:12:22 +0000
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <ken1de$fhn$1@ger.gmane.org>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
	<ken1de$fhn$1@ger.gmane.org>
Message-ID: <CADe=Ya-q3ykOhP2_umVhjKm2Aw1rEomUyxCgxag-Z_n=b1kqVw@mail.gmail.com>

Thank you Alan, Steven,

I don't care about the characters from the pickle operation per se, I just
want the list to be stored in its native format.

What I am trying to do is basically the Unix shell equivalent of: "Unix
command" > newfile.txt

I am trying to store the list that I get from my code in a separate file,
in human-readable format.


On Mon, Feb 4, 2013 at 1:03 AM, Alan Gauld <alan.gauld at btinternet.com>wrote:

> On 03/02/13 19:26, Spyros Charonis wrote:
>
>> I am experiencing a strange result with the pickle module when using it
>> to write certain results to a separate file.
>>
>
> The only strangec results using pickle would be if the uinpickle failed to
> bring back that which was pickled.
> Pickle is a storage format not a display format.
>
>
>  In short, I have a program that reads a file, finds lines which satisfy
>> some criteria, and extracts those lines, storing them in a list.
>>
>
> Extracting them with pickle I hope? That's the only thing that should be
> used to unpickle a pickled file.
>
>
>  The list of extracted lines looks like this:
>>
>> ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>>      N
>>
>> The output stored from the call to the pickle.dump method, however,
>> looks like this:
>>
>> (lp0
>> S'ATOM      1  N   GLN A   1      29.872  13.384  54.754  1.00 60.40
>>        N  \r\n'
>>
>
> Yep, I'm sure pickle can make sense of it.
>
>
>  Does anyone know why the strings lp0, S', aS' are showing up?
>>
>
> Because that's what pickle puts in there to help it unpickle it later.
>
> Why do you care? You shouldn't be looking at it (unless you want to
> understand how pickle works).
>
> pickle, as the name suggests, is intended for storing python objects
> for later use. This is often called object persistence in programming
> parlance. It is not designed for anything else.
>
> If you want cleanly formatted data in a file that you can read in a text
> editor or similar you need to do the formatting yourself or use another
> recognised format such as CSV or configparser (aka ini file).
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
>
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130204/bf3901fa/attachment.html>

From alan.gauld at btinternet.com  Mon Feb  4 13:50:41 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 04 Feb 2013 12:50:41 +0000
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <CADe=Ya-q3ykOhP2_umVhjKm2Aw1rEomUyxCgxag-Z_n=b1kqVw@mail.gmail.com>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
	<ken1de$fhn$1@ger.gmane.org>
	<CADe=Ya-q3ykOhP2_umVhjKm2Aw1rEomUyxCgxag-Z_n=b1kqVw@mail.gmail.com>
Message-ID: <keoaqt$uer$1@ger.gmane.org>

On 04/02/13 11:12, Spyros Charonis wrote:

> What I am trying to do is basically the Unix shell equivalent of: "Unix
> command" > newfile.txt

That works just fine with Python too. Just print to stdout in whatever 
format you want and redirect the output to a file


$ python myscript.py > myfile.txt

That will work from a command line in Windows, Linux and MacOS...

> I am trying to store the list that I get from my code in a separate
> file, in human-readable format.

Then print it in the format you want using string formatting to control 
spacing, justification etc.


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From steve at pearwood.info  Mon Feb  4 15:21:29 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Tue, 05 Feb 2013 01:21:29 +1100
Subject: [Tutor] pickle.dump yielding awkward output
In-Reply-To: <CADe=Ya-q3ykOhP2_umVhjKm2Aw1rEomUyxCgxag-Z_n=b1kqVw@mail.gmail.com>
References: <CADe=Ya_aj+jaOzgKihDn+vfdD7b9r724b75J9G7DYhSorA7+4Q@mail.gmail.com>
	<ken1de$fhn$1@ger.gmane.org>
	<CADe=Ya-q3ykOhP2_umVhjKm2Aw1rEomUyxCgxag-Z_n=b1kqVw@mail.gmail.com>
Message-ID: <510FC3E9.1000209@pearwood.info>

On 04/02/13 22:12, Spyros Charonis wrote:
> Thank you Alan, Steven,
>
> I don't care about the characters from the pickle operation per se, I just
> want the list to be stored in its native format.

That's an in-memory binary format. There is no way to get access to that from
pure Python code. You may be able to do it using the ctypes module, which is
an interface to the underlying C implementation. But keep in mind that this
is only in the CPython implementation, and will not work in IronPython, PyPy
or Jython.


> What I am trying to do is basically the Unix shell equivalent of: "Unix
> command">  newfile.txt

In Unix commands, virtually everything is text. Python is not like that --
everything is a binary object.

But you can get a text representation of Python objects, e.g. a list, with:

print repr(mylist)



-- 
Steven

From steve at pearwood.info  Mon Feb  4 15:33:09 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Tue, 05 Feb 2013 01:33:09 +1100
Subject: [Tutor] Help- Regarding python
In-Reply-To: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
References: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
Message-ID: <510FC6A5.8090407@pearwood.info>

On 04/02/13 17:24, Gayathri S wrote:
> Hi All....!
>              If i have data set like this means...
>
> 3626,5000,2918,5000,2353,2334,2642,[...],496.

No need to dump your entire data set on us. Just a few representative
values will do.


> How to do PCA on this data? if it is in array how to do that? and also how
> to use princomp() in PCA?

What's PCA? What's princomp?


> Shall i use the following code for doing PCA on given input? could you tell
> me?

Have you tried it? What happens?

This is a list for people learning Python the programming language. We are not
experts on numpy, which is a specialist package for scientific use. We are not
statisticians either. You can probably assume that most of us know what
"standard deviation" is. Anything more complicated than that, you should ask
on a specialist numpy mailing list.

Good luck!



-- 
Steven

From david at graniteweb.com  Mon Feb  4 15:58:26 2013
From: david at graniteweb.com (David Rock)
Date: Mon, 4 Feb 2013 08:58:26 -0600
Subject: [Tutor] First Python Test
In-Reply-To: <510E949E.7010506@kcl.ac.uk>
References: <CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5.net>
	<87ehgz82hg.fsf@pbot.home> <510D0D1E.9010903@kcl.ac.uk>
	<kejjin$9k6$1@ger.gmane.org> <510E561B.6070003@kcl.ac.uk>
	<7583509039403960590@unknownmsgid> <510E949E.7010506@kcl.ac.uk>
Message-ID: <20130204145826.GB2129@wdfs.bad>

* Shall, Sydney <sydney.shall at kcl.ac.uk> [2013-02-03 16:47]:
> 
> On 03/02/2013 13:13, Jonat?n Guadamuz wrote:
> > El 03/02/2013, a las 06:53 a.m., "Shall, Sydney"
> > <sydney.shall at kcl.ac.uk> escribi?:
> >
> >> Dear Alan,
> >> I installed Cocoa emacs successfully.
> >> But it does not run on OS X 10.6.8.
> >> The notes with it say that it was built for 10.4.
> >> Where may I look for an update, please?
> >> With many thanks for your help.
> >> Sydney
> > Maybe you can look here
> >
> > aquamacs.org

The first hit I get googling for "cocoa emacs" returns:
http://emacsformacosx.com/

Perhaps that will work for you.  I've tested that it works on my system,
at least ("works" = it ran).

-- 
David Rock
david at graniteweb.com

From fomcl at yahoo.com  Mon Feb  4 16:32:57 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Mon, 4 Feb 2013 07:32:57 -0800 (PST)
Subject: [Tutor] nose, git, post-commit hook
Message-ID: <1359991977.53244.YahooMailNeo@web163806.mail.gq1.yahoo.com>

Hi,

I am using git VCS and I read about the possibility to use post-commit hooks for nose tests. That sounds pretty cool, but does this also have disadvantages?
It would be very annoying if I couldn't check in code, safely tucked away on some server, that is not yet working. Is there also a way to by-pass the 'mandatory' tests?

?
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 sydney.shall at kcl.ac.uk  Mon Feb  4 18:08:43 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Mon, 4 Feb 2013 17:08:43 +0000
Subject: [Tutor] First Python Test
In-Reply-To: <20130204145826.GB2129@wdfs.bad>
References: <CALEWkc_3erWsv93EMSLS+k631G0B660v=haLsPLrojzdEG=33A@mail.gmail.com>
	<CAP1XXT3vdnQRNbqZcyhW7E+wVfG1dOVzjpFDv3pAtonzm=Xcxg@mail.gmail.com>
	<CALEWkc_01bRO-5VKDNrN2b10hLCO9rMf=MkG-RtAsbAp5vrL4A@mail.gmail.com>
	<20130202093118.GB6079@kontrol.kode5
Message-ID: <510FEB1B.2070302@kcl.ac.uk>

Dear David,
Many thanks for this information.
It was exactly what I needed.
It anyone wants Emacs editor for MAC OS X 10.6, this is the place to 
find it.

I would also like to say that I am deeply impressed with the knowledge 
and generosity of the people on this list.
Thanks.
Sydney




On 04/02/2013 14:58, David Rock wrote:
> * Shall, Sydney <sydney.shall at kcl.ac.uk> [2013-02-03 16:47]:
>> On 03/02/2013 13:13, Jonat?n Guadamuz wrote:
>>> El 03/02/2013, a las 06:53 a.m., "Shall, Sydney"
>>> <sydney.shall at kcl.ac.uk> escribi?:
>>>
>>>> Dear Alan,
>>>> I installed Cocoa emacs successfully.
>>>> But it does not run on OS X 10.6.8.
>>>> The notes with it say that it was built for 10.4.
>>>> Where may I look for an update, please?
>>>> With many thanks for your help.
>>>> Sydney
>>> Maybe you can look here
>>>
>>> aquamacs.org
> The first hit I get googling for "cocoa emacs" returns:
> http://emacsformacosx.com/
>
> Perhaps that will work for you.  I've tested that it works on my system,
> at least ("works" = it ran).
>


-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From modulok at gmail.com  Mon Feb  4 18:13:33 2013
From: modulok at gmail.com (Modulok)
Date: Mon, 4 Feb 2013 10:13:33 -0700
Subject: [Tutor] Iterating a dict with an iteration counter? How would *you*
	do it?
Message-ID: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>

List,

Simple question: Is there a common pattern for iterating a dict, but also
providing access to an iteration counter? Here's what I usually do (below). I'm
just wondering if there are other, more clever ways::

    data = {'a': "apple", 'b': "banana", 'c': "cherry"}
    i = 0
    for k,v in data.items():
        print("i: %s, k: %s, v: %s" % (i,k,v))
        i += 1

Another variant, same idea::

    data = {'a': "apple", 'b': "banana", 'c': "cherry"}
    for i,k,v in zip(range(len(data)), data.keys(), data.values()):
        print("i: %s, k: %s, v: %s" % (i,k,v))


How would you do it?
-Modulok-

From davea at davea.name  Mon Feb  4 18:28:38 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 04 Feb 2013 12:28:38 -0500
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
Message-ID: <510FEFC6.8030000@davea.name>

On 02/04/2013 12:13 PM, Modulok wrote:
> List,
>
> Simple question: Is there a common pattern for iterating a dict, but also
> providing access to an iteration counter? Here's what I usually do (below). I'm
> just wondering if there are other, more clever ways::
>
>      data = {'a': "apple", 'b': "banana", 'c': "cherry"}
>      i = 0
>      for k,v in data.items():
>          print("i: %s, k: %s, v: %s" % (i,k,v))
>          i += 1
>
> Another variant, same idea::
>
>      data = {'a': "apple", 'b': "banana", 'c': "cherry"}
>      for i,k,v in zip(range(len(data)), data.keys(), data.values()):
>          print("i: %s, k: %s, v: %s" % (i,k,v))
>
>
> How would you do it?
> -Modulok-

enumerate()


for i, (k, v) in enumerate(data.items()):

-- 
DaveA

From robert.day at merton.oxon.org  Mon Feb  4 18:42:08 2013
From: robert.day at merton.oxon.org (Rob Day)
Date: Mon, 4 Feb 2013 17:42:08 +0000
Subject: [Tutor] nose, git, post-commit hook
In-Reply-To: <1359991977.53244.YahooMailNeo@web163806.mail.gq1.yahoo.com>
References: <1359991977.53244.YahooMailNeo@web163806.mail.gq1.yahoo.com>
Message-ID: <CAH1RVijO7rygQ4Y=CBFKm5o-TdWrqWgdcZXR3rgatwwkVGy90Q@mail.gmail.com>

On 4 February 2013 15:32, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
> I am using git VCS and I read about the possibility to use post-commit hooks for nose tests. That sounds pretty cool, but does this also have disadvantages?
> It would be very annoying if I couldn't check in code, safely tucked away on some server, that is not yet working. Is there also a way to by-pass the 'mandatory' tests?

This isn't really a Python question, but if you use pre-commit hooks,
you can bypass them with the "--no-verify" option to "git commit". See
http://git-scm.com/book/en/Customizing-Git-Git-Hooks.


--
Robert K. Day
robert.day at merton.oxon.org

From ghasemmg01 at leedslearning.net  Mon Feb  4 18:52:18 2013
From: ghasemmg01 at leedslearning.net (Ghadir Ghasemi)
Date: Mon, 4 Feb 2013 17:52:18 +0000
Subject: [Tutor] (no subject)
Message-ID: <010FB2F3C55002408EE1404538D1B6AE030D8379478C@LLN-SPP-ES-04.user01.lln.local>

hi guys, this is the first bit of my program converting from binary to decimal without use of built in functions.

binnum = input("Please enter a binary number:  ")
decnum = 0
rank = 1

for i in reversed(binnum):
    decnum += rank * int(i)
    rank *= 2
    print(decnum).

When I first tested the program, It printed the answer in a weird way. you can see the print screen of first tirst in the attachment. I wanted to know how I could adjust the program so that
it only prints the real answer. e.g If user enters 11111111, then program should only print 255.
thank you.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: firstprogramttest.PNG
Type: image/x-png
Size: 18199 bytes
Desc: firstprogramttest.PNG
URL: <http://mail.python.org/pipermail/tutor/attachments/20130204/d0f0796e/attachment-0001.bin>

From modulok at gmail.com  Mon Feb  4 18:58:10 2013
From: modulok at gmail.com (Modulok)
Date: Mon, 4 Feb 2013 10:58:10 -0700
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <510FEFC6.8030000@davea.name>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
Message-ID: <CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>

Hmm.. no kidding. Well, at least I knew I was over-complicating it.

Cheers!
-Modulok-


On 2/4/13, Dave Angel <davea at davea.name> wrote:
> On 02/04/2013 12:13 PM, Modulok wrote:
>> List,
>>
>> Simple question: Is there a common pattern for iterating a dict, but also
>> providing access to an iteration counter? Here's what I usually do
>> (below). I'm
>> just wondering if there are other, more clever ways::
>>
>>      data = {'a': "apple", 'b': "banana", 'c': "cherry"}
>>      i = 0
>>      for k,v in data.items():
>>          print("i: %s, k: %s, v: %s" % (i,k,v))
>>          i += 1
>>
>> Another variant, same idea::
>>
>>      data = {'a': "apple", 'b': "banana", 'c': "cherry"}
>>      for i,k,v in zip(range(len(data)), data.keys(), data.values()):
>>          print("i: %s, k: %s, v: %s" % (i,k,v))
>>
>>
>> How would you do it?
>> -Modulok-
>
> enumerate()
>
>
> for i, (k, v) in enumerate(data.items()):
>
> --
> DaveA
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

From kwpolska at gmail.com  Mon Feb  4 19:06:49 2013
From: kwpolska at gmail.com (Kwpolska)
Date: Mon, 4 Feb 2013 19:06:49 +0100
Subject: [Tutor] (no subject)
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D8379478C@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478C@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <CAMw+j7J5Ths1oXZ66jRSzOznDw=RaVzVK6w60oHfdyQ3TssZ5Q@mail.gmail.com>

On Mon, Feb 4, 2013 at 6:52 PM, Ghadir Ghasemi
<ghasemmg01 at leedslearning.net> wrote:
> hi guys, this is the first bit of my program converting from binary to decimal without use of built in functions.
>
> binnum = input("Please enter a binary number:  ")
> decnum = 0
> rank = 1
>
> for i in reversed(binnum):
>     decnum += rank * int(i)
>     rank *= 2
>     print(decnum).
>
> When I first tested the program, It printed the answer in a weird way. you can see the print screen of first tirst in the attachment. I wanted to know how I could adjust the program so that
> it only prints the real answer. e.g If user enters 11111111, then program should only print 255.
> thank you.
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

Move the print out of the loop.  Also, do not post screenshots, use
copy-paste.  So, this becomes:

binnum = input("Please enter a binary number: ")
decnum = 0
rank = 1

for i in reversed(binnum):
    decnum += rank * int(i)
    rank *= 2

print(decnum)

-- 
Kwpolska <http://kwpolska.tk> | GPG KEY: 5EAAEA16
stop html mail                | always bottom-post
http://asciiribbon.org        | http://caliburn.nl/topposting.html

From dyoo at hashcollision.org  Mon Feb  4 19:49:41 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Mon, 4 Feb 2013 11:49:41 -0700
Subject: [Tutor] Help- Regarding python
In-Reply-To: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
References: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
Message-ID: <CAGZAPF4P1zNvZYDH06=7iuwPwiQOtMQR7u7oH2tLZJMsnbBWjA@mail.gmail.com>

> How to do PCA on this data? if it is in array how to do that? and also how
> to use princomp() in PCA?


Principal component analysis,

    http://en.wikipedia.org/wiki/Principal_component_analysis

may not be "built in".  Do you know for sure that it is?  According to
this blog entry, you can do it in numpy by coding the algorithm:

    http://glowingpython.blogspot.com/2011/07/principal-component-analysis-with-numpy.html

If you use Google and search for the term "Principal component
analysis Python", you should see several implementations of modules
that provide that algorithm.

From davea at davea.name  Mon Feb  4 23:26:31 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 04 Feb 2013 17:26:31 -0500
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
Message-ID: <51103597.20105@davea.name>

On 02/04/2013 12:58 PM, Modulok wrote:
> Hmm.. no kidding. Well, at least I knew I was over-complicating it.
>
> Cheers!
> -Modulok-
>
>
Please don't top-post.

Another point.  I don't currently have Python 3.x installed, but I seem 
to remember that in Python 3 you can use the dict itself as an iterator 
providing both key and value.  If I'm right, then it could be simplified 
further to:


for i, (k, v) in enumerate(data):

A simple test will prove me right or wrong.


-- 
DaveA

From steve at pearwood.info  Tue Feb  5 00:18:14 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Tue, 05 Feb 2013 10:18:14 +1100
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <51103597.20105@davea.name>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
	<51103597.20105@davea.name>
Message-ID: <511041B6.5010902@pearwood.info>

On 05/02/13 09:26, Dave Angel wrote:

> Another point. I don't currently have Python 3.x installed, but I seem to
>remember that in Python 3 you can use the dict itself as an iterator
>providing both key and value. If I'm right, then it could be simplified
>further to:
>
>
> for i, (k, v) in enumerate(data):

Nope, in both Python 2 and 3 iterating over a dict directly just provides the
key. That's also how "if key in dict" works.



-- 
Steven

From davea at davea.name  Tue Feb  5 01:04:07 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 04 Feb 2013 19:04:07 -0500
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <511041B6.5010902@pearwood.info>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
	<51103597.20105@davea.name> <511041B6.5010902@pearwood.info>
Message-ID: <51104C77.6050200@davea.name>

On 02/04/2013 06:18 PM, Steven D'Aprano wrote:
> On 05/02/13 09:26, Dave Angel wrote:
>
>> Another point. I don't currently have Python 3.x installed, but I seem to
>> remember that in Python 3 you can use the dict itself as an iterator
>> providing both key and value. If I'm right, then it could be simplified
>> further to:
>>
>>
>> for i, (k, v) in enumerate(data):
>
> Nope, in both Python 2 and 3 iterating over a dict directly just
> provides the
> key. That's also how "if key in dict" works.
>

Then I'm glad I was tentative about it.  I do recall there was some 
difference.  Was it just that items(), keys() and values() methods 
return a view (iterator) instead of a list, and the iter*() versions are 
gone?

-- 
DaveA

From oscar.j.benjamin at gmail.com  Tue Feb  5 01:21:24 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Tue, 5 Feb 2013 00:21:24 +0000
Subject: [Tutor] Help- Regarding python
In-Reply-To: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
References: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
Message-ID: <CAHVvXxS--2=sJijR9mrBzg-Lxj5-WofwjbNfq771hLWTz0QXPA@mail.gmail.com>

On 4 February 2013 06:24, Gayathri S <gayathri.s112 at gmail.com> wrote:
> Hi All....!
>             If i have data set like this means...
>
> 3626,5000,2918,5000,2353,2334,2642,1730,1687,1695,1717,1744,593,502,493,504,449,431,444,444,429,10
> 438,498,3626,3629,5000,2918,5000,2640,2334,2639,1696,1687,1695,1717,1744,592,502,493,504,449,431,444,441,429,10
> 439,498,3626,3629,5000,2918,5000,2633,2334,2645,1705,1686,1694,1719,1744,589,502,493,504,446,431,444,444,430,10
> 440,5000,3627,3628,5000,2919,3028,2346,2330,2638,1727,1684,1692,1714,1745,588,501,492,504,451,433,446,444,432,10
> 444,5021,3631,3634,5000,2919,5000,2626,2327,2638,1698,1680,1688,1709,1740,595,500,491,503,453,436,448,444,436,10
> 451,5025,3635,3639,5000,2920,3027,2620,2323,2632,1706,1673,1681,1703,753,595,499,491,502,457,440,453,454,442,20
> 458,5022,3640,3644,5000,2922,5000,2346,2321,2628,1688,1666,1674,1696,744,590,496.

PCA only makes sense for multivariate data: your data should be a set
of vectors *all of the same length*. I'll assume that you were just
being lazy when you posted it and that you didn't bother to copy the
first and last lines properly...

[snip]
>
> Shall i use the following code for doing PCA on given input? could you tell
> me?

This code you posted is all screwed up. It will give you errors if you
try to run it.

Also I don't really know what you mean by "doing PCA". The code below
transforms your data into PCA space and plots a 2D scatter plot using
the first two principal components.

#!/usr/bin/env python
import numpy as np
from matplotlib import pyplot as plt

data = np.array([
    [438,498,3626,3629,5000,2918,5000,2640,2334,2639,1696,1687,1695,1717,1744,592,502,493,504,449,431,444,441,429,10],
    [439,498,3626,3629,5000,2918,5000,2633,2334,2645,1705,1686,1694,1719,1744,589,502,493,504,446,431,444,444,430,10],
    [440,5000,3627,3628,5000,2919,3028,2346,2330,2638,1727,1684,1692,1714,1745,588,501,492,504,451,433,446,444,432,10],
    [444,5021,3631,3634,5000,2919,5000,2626,2327,2638,1698,1680,1688,1709,1740,595,500,491,503,453,436,448,444,436,10],
    [451,5025,3635,3639,5000,2920,3027,2620,2323,2632,1706,1673,1681,1703,753,595,499,491,502,457,440,453,454,442,20],
])

# Compute the eigenvalues and vectors of the covariance matrix
C = np.cov(data.T)
eigenvalues, eigenvectors = np.linalg.eig(C)

# 2D PCA - get the two eigenvectors with the largest eigenvalues
v1, v2 = eigenvectors[:,:2].T
# Project the data onto the two principal components
data_pc1 = [np.dot(v1, d) for d in data]
data_pc2 = [np.dot(v2, d) for d in data]

# Scatter plot in PCA space
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(data_pc1, data_pc2, 'x')
ax.set_xlabel(r'$PC_1$')
ax.set_ylabel(r'$PC_2$')
ax.legend(['data'])
plt.show()


Oscar

From eryksun at gmail.com  Tue Feb  5 04:56:50 2013
From: eryksun at gmail.com (eryksun)
Date: Mon, 4 Feb 2013 22:56:50 -0500
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <51104C77.6050200@davea.name>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
	<51103597.20105@davea.name> <511041B6.5010902@pearwood.info>
	<51104C77.6050200@davea.name>
Message-ID: <CACL+1avqba=hMVXkFsaberHR7wxOhG7TzzsmAyBk6g32S2t8kA@mail.gmail.com>

On Mon, Feb 4, 2013 at 7:04 PM, Dave Angel <davea at davea.name> wrote:
>> Nope, in both Python 2 and 3 iterating over a dict directly just
>> provides the key. That's also how "if key in dict" works.

A dict implements __contains__ for an efficient "in" test. In general,
the interpreter falls back to using iteration if a type lacks
__contains__.

In 2.x iter(some_dict) returns a dictionary-keyiterator (weird
hyphen). In 3.x it's a dict_keyiterator (normal underscore).

> Was it just that items(), keys() and values() methods return a view
> (iterator) instead of a list, and the iter*() versions are gone?

In 3.x, keys() and items() return views that are iterable (__iter__)
and that implement the sequence methods __len__ and __contains__ as
well as a few set operations that return a set: intersection (&),
union (|), difference (-), and symmetric difference (^). Using the set
methods for items() requires the values to also be hashable. The view
returned by values() doesn't bother implementing __contains__ and the
set operations, but it does have __iter__ and __len__. 2.7 provides
these views via viewkeys(), viewitems(), and viewvalues().

The corresponding iterators returned by iter() in 3.x are
dict_keyiterator, dict_itemiterator, and dict_valueiterator.

From godsofliberty at lavabit.com  Tue Feb  5 05:39:31 2013
From: godsofliberty at lavabit.com (heathen)
Date: Mon, 04 Feb 2013 23:39:31 -0500
Subject: [Tutor] (no subject)
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D8379478C@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478C@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <51108D03.8070709@lavabit.com>

On 02/04/2013 12:52 PM, Ghadir Ghasemi wrote:
> hi guys, this is the first bit of my program converting from binary to decimal without use of built in functions.
>
> binnum = input("Please enter a binary number:  ")
> decnum = 0
> rank = 1
>
> for i in reversed(binnum):
>      decnum += rank * int(i)
>      rank *= 2
>      print(decnum).
>
> When I first tested the program, It printed the answer in a weird way. you can see the print screen of first tirst in the attachment. I wanted to know how I could adjust the program so that
> it only prints the real answer. e.g If user enters 11111111, then program should only print 255.
> thank you.
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
Move your print statement out of the for loop.

for i in reversed(binnum):
       decnum += rank * int(i)
       rank *= 2
print(decnum)


From eryksun at gmail.com  Tue Feb  5 06:08:26 2013
From: eryksun at gmail.com (eryksun)
Date: Tue, 5 Feb 2013 00:08:26 -0500
Subject: [Tutor] Help- Regarding python
In-Reply-To: <CAHVvXxS--2=sJijR9mrBzg-Lxj5-WofwjbNfq771hLWTz0QXPA@mail.gmail.com>
References: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
	<CAHVvXxS--2=sJijR9mrBzg-Lxj5-WofwjbNfq771hLWTz0QXPA@mail.gmail.com>
Message-ID: <CACL+1asGC+UffOqA_-gD8U5HBDqjq07wfHD_-LnsGbz5-Dd7+w@mail.gmail.com>

On Mon, Feb 4, 2013 at 7:21 PM, Oscar Benjamin
<oscar.j.benjamin at gmail.com> wrote:
> eigenvalues, eigenvectors = np.linalg.eig(C)

First sort by eigenvalue magnitude:

    >>> idx = np.argsort(eigenvalues)[::-1]
    >>> print idx
    [ 0  1  2  3  8 10 11 12 14 22 20 21 18 19 23 24 17 16 15 13  9  7  5  6  4]

    >>> eigenvalues = eigenvalues[idx]
    >>> eigenvectors = eigenvectors[:, idx]

> # 2D PCA - get the two eigenvectors with the largest eigenvalues
> v1, v2 = eigenvectors[:,:2].T

From aaronmisquith at gmail.com  Tue Feb  5 10:38:56 2013
From: aaronmisquith at gmail.com (Aaron Misquith)
Date: Tue, 5 Feb 2013 15:08:56 +0530
Subject: [Tutor] How to create a GUI for python using tkinter
Message-ID: <CAF9tAr4sxQYwfu98b8AfUav3k-p3X_9Zzch5WF3s+mVV1JRRFQ@mail.gmail.com>

I have attached a python program with this mail which peforms following
operations:
1.Logs in to facebook.
2.Asks the user for access tokens.
3.Gets the friend list of the user.
4.outputs the friend list as pdf.

My Problems regarding the above program are:
1.I want to display the names of my friends(in output) one in each line in
the intermediate .doc file that i have created.
              example output: {'data': [{'name': 'Roy Fernandes'}, {'name':
'Aniruddh Beigh'},
                                       I want it to be displayed as : Roy
Fernandes

Aniruddh Beigh

2.Is there a way to automate getting access tokens for the user that is
logging in? If not how to get access tokens for each user while logging in?

3.How to dislpay text with clickable links.
   Eg: Something thing like alert box, wherein if you click the link you go
to the page.

4. Finally my lecturer has asked me to create a gui for the facebook login
program using tkinter library module. I don't know how to create one (the
lecturer has not thought this topic in class so i'm just clueless here). So
if someone can do it and explain me the steps it will be very helpfull.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130205/2d4d5e6c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: newfb.py
Type: application/octet-stream
Size: 2049 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/tutor/attachments/20130205/2d4d5e6c/attachment.obj>

From oscar.j.benjamin at gmail.com  Tue Feb  5 12:27:22 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Tue, 5 Feb 2013 11:27:22 +0000
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <CACL+1avqba=hMVXkFsaberHR7wxOhG7TzzsmAyBk6g32S2t8kA@mail.gmail.com>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
	<51103597.20105@davea.name> <511041B6.5010902@pearwood.info>
	<51104C77.6050200@davea.name>
	<CACL+1avqba=hMVXkFsaberHR7wxOhG7TzzsmAyBk6g32S2t8kA@mail.gmail.com>
Message-ID: <CAHVvXxQrJcjQ_v_4-a52O20RfA5CU8cS6hUpGPk37FFCsqr8UA@mail.gmail.com>

On 5 February 2013 03:56, eryksun <eryksun at gmail.com> wrote:
> On Mon, Feb 4, 2013 at 7:04 PM, Dave Angel <davea at davea.name> wrote:
>>> Nope, in both Python 2 and 3 iterating over a dict directly just
>>> provides the key. That's also how "if key in dict" works.
>
> A dict implements __contains__ for an efficient "in" test. In general,
> the interpreter falls back to using iteration if a type lacks
> __contains__.

I almost wrote this response but then I realised that Dave probably
meant that "obj in dict" returns True if the dict has a key equal to
obj rather than if the dict has a (key, value) pair equal to obj.


Oscar

From eryksun at gmail.com  Tue Feb  5 12:36:39 2013
From: eryksun at gmail.com (eryksun)
Date: Tue, 5 Feb 2013 06:36:39 -0500
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <CAHVvXxQrJcjQ_v_4-a52O20RfA5CU8cS6hUpGPk37FFCsqr8UA@mail.gmail.com>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
	<51103597.20105@davea.name> <511041B6.5010902@pearwood.info>
	<51104C77.6050200@davea.name>
	<CACL+1avqba=hMVXkFsaberHR7wxOhG7TzzsmAyBk6g32S2t8kA@mail.gmail.com>
	<CAHVvXxQrJcjQ_v_4-a52O20RfA5CU8cS6hUpGPk37FFCsqr8UA@mail.gmail.com>
Message-ID: <CACL+1au5PCEHv1T92Jb2tq0oDCfy_QxnKuPmvHjMNBmibOBZHQ@mail.gmail.com>

On Tue, Feb 5, 2013 at 6:27 AM, Oscar Benjamin
<oscar.j.benjamin at gmail.com> wrote:
>
> I almost wrote this response but then I realised that Dave probably
> meant that "obj in dict" returns True if the dict has a key equal to
> obj rather than if the dict has a (key, value) pair equal to obj.

Thanks, that's probably what Steven meant. It's keeping "item in
a_dict" consistent with "item in list(a_dict)".

From fomcl at yahoo.com  Tue Feb  5 13:01:02 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Tue, 5 Feb 2013 04:01:02 -0800 (PST)
Subject: [Tutor] nose, git, post-commit hook
In-Reply-To: <CAH1RVijO7rygQ4Y=CBFKm5o-TdWrqWgdcZXR3rgatwwkVGy90Q@mail.gmail.com>
References: <1359991977.53244.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<CAH1RVijO7rygQ4Y=CBFKm5o-TdWrqWgdcZXR3rgatwwkVGy90Q@mail.gmail.com>
Message-ID: <1360065662.673.YahooMailNeo@web163801.mail.gq1.yahoo.com>



> On 4 February 2013 15:32, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
>> I am using git VCS and I read about the possibility to use post-commit 
> hooks for nose tests. That sounds pretty cool, but does this also have 
> disadvantages?
>> It would be very annoying if I couldn't check in code, safely tucked 
> away on some server, that is not yet working. Is there also a way to by-pass the 
> 'mandatory' tests?
> 
> This isn't really a Python question, but if you use pre-commit hooks,
> you can bypass them with the "--no-verify" option to "git 
> commit". See
> http://git-scm.com/book/en/Customizing-Git-Git-Hooks.

Hi Rob,

Thanks for this useful link. I'll see what's most practical for me. As usual, the number of options of git is bedazzlingly large.
I dared to ask this question on the Python list because I am planning to use this in conjunction with the nose package.
I figured that this package (or something of python) *may* have some other functionality that ensures that tests are automatically 
run on a regular basis. It would be ideal if it could be combined with other tasks (I have pylint or pep8 in mind). Commit hooks appear
to be a good method.

Regards,
Albert-Jan

From wprins at gmail.com  Tue Feb  5 14:40:12 2013
From: wprins at gmail.com (Walter Prins)
Date: Tue, 5 Feb 2013 13:40:12 +0000
Subject: [Tutor] Fwd:  How to create a GUI for python using tkinter
In-Reply-To: <CAF9tAr7EgutAXLwtA_RhE6JFrNquDDeq4pR1MsD63_fWJB5Zuw@mail.gmail.com>
References: <CAF9tAr4sxQYwfu98b8AfUav3k-p3X_9Zzch5WF3s+mVV1JRRFQ@mail.gmail.com>
	<CANLXbfB7O1NW19UJV6GoTfBS3tzL7CRpBV1+E-NYxqvfTSeUUw@mail.gmail.com>
	<CAF9tAr7EgutAXLwtA_RhE6JFrNquDDeq4pR1MsD63_fWJB5Zuw@mail.gmail.com>
Message-ID: <CANLXbfCYM3erpsDB5E4fLT=DRMpr-AgtyOHfEw8c8VtVpaWc6g@mail.gmail.com>

Forwarding (presumed accidental) personal reply back to list.

---------- Forwarded message ----------
From: Aaron Misquith <aaronmisquith at gmail.com>
Date: 5 February 2013 13:01
Subject: Re: [Tutor] How to create a GUI for python using tkinter
To: Walter Prins <wprins at gmail.com>



On Tue, Feb 5, 2013 at 5:40 PM, Walter Prins <wprins at gmail.com> wrote:

> On 5 February 2013 09:38, Aaron Misquith <aaronmisquith at gmail.com> wrote:
>
>> I have attached a python program with this mail which peforms following
>> operations:
>> 1.Logs in to facebook.
>> 2.Asks the user for access tokens.
>> 3.Gets the friend list of the user.
>> 4.outputs the friend list as pdf.
>>
>> My Problems regarding the above program are:
>> 1.I want to display the names of my friends(in output) one in each line
>> in the intermediate .doc file that i have created.
>>               example output: {'data': [{'name': 'Roy Fernandes'},
>> {'name': 'Aniruddh Beigh'},
>>                                        I want it to be displayed as : Roy
>> Fernandes
>>
>> Aniruddh Beigh
>>
>> 2.Is there a way to automate getting access tokens for the user that is
>> logging in? If not how to get access tokens for each user while logging in?
>>
>> 3.How to dislpay text with clickable links.
>>    Eg: Something thing like alert box, wherein if you click the link you
>> go to the page.
>>
>> 4. Finally my lecturer has asked me to create a gui for the facebook
>> login program using tkinter library module. I don't know how to create one
>> (the lecturer has not thought this topic in class so i'm just clueless
>> here). So if someone can do it and explain me the steps it will be very
>> helpfull.
>
>
> The way this tutoring mailing list (and in general, any programming
> mailing list or support forum) works is that you do the legwork first, then
> come with the actual problems you're having.  You don't just ask for people
> to write your solutions for you.
>
> Also, your questions together with a partial solution by (apparently)
> someone else makes me wonder whether this is homework.  Can you please
> clarify?  Obviously, apart from the above comment on this not being a
> solution service, we cannot provide direct solutions to homework
> assignments.
>
> All that said, to address your questions somewhat:
> 1.) The program is directly printing the returned Python dict object (e.g.
> nik) which is why you're getting the curly-braced representation of it.  To
> print/output it differently, take some more control over the printing
> process.  E.g. print the attributes of the nik object manually and use
> newline characters (\n) where required.  If you don't understand this
> answer then you're lacking some basic Python skills/understanding and I'd
> recommend learning some basic Python first, perhaps by working through Alan
> Gauld's tutorial: http://www.alan-g.me.uk/tutor/index.htm
> Then try your hand at this problem again yourself, and *then* post back
> with specific problems you're having.
>
> 2.) Probably, but I don't offhand know how.  This is not really a Python
> tutoring question and may be a question for appropriate for a Facebook API
> programming forum.
>
> 3.) There's lots of TkInter materials on the web that will get you
> started.  Here's a decent tutorial:
> http://www.tkdocs.com/tutorial/index.html
>

First of all i would like to confirm that this was my assignment and i have
completed it and shown to my lecturer. I'll also confirm that the class
facebook was available in stackoverflow( Not completely, I had to make some
changes to suit my requirements).But the rest is all mine especially
exporting the output as pdf. None of the forums were helpful regarding
this. Everywhere people have mentioned about pypdf and reportlab toolkit ,
but none of them worked for me (i have also posted the solution on
stackoverflow yesterday). After showing the output my lecturer informed me
if i could Display better  using tkinter GUI. Since it wasn't thought in
class I have no idea regarding this. The problem that i encounter in
creating GUI is I already have a class *facebook*; How am i supposed to
integrate it to class "*Application*"(required to create GUI with tkinter)
which i have to integrate it with (the small bookish knowledge i possess in
the topic).

I don't expect direct solutions but if you do give them i want possible *
explanations* on it so i can understand how it was done. And since this is
a tutor i want someone who knows the answers to teach me; since you cant
study everything in class.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130205/61f426ef/attachment-0001.html>

From wprins at gmail.com  Tue Feb  5 15:43:15 2013
From: wprins at gmail.com (Walter Prins)
Date: Tue, 5 Feb 2013 14:43:15 +0000
Subject: [Tutor] How to create a GUI for python using tkinter
In-Reply-To: <CANLXbfCYM3erpsDB5E4fLT=DRMpr-AgtyOHfEw8c8VtVpaWc6g@mail.gmail.com>
References: <CAF9tAr4sxQYwfu98b8AfUav3k-p3X_9Zzch5WF3s+mVV1JRRFQ@mail.gmail.com>
	<CANLXbfB7O1NW19UJV6GoTfBS3tzL7CRpBV1+E-NYxqvfTSeUUw@mail.gmail.com>
	<CAF9tAr7EgutAXLwtA_RhE6JFrNquDDeq4pR1MsD63_fWJB5Zuw@mail.gmail.com>
	<CANLXbfCYM3erpsDB5E4fLT=DRMpr-AgtyOHfEw8c8VtVpaWc6g@mail.gmail.com>
Message-ID: <CANLXbfAFOV7_VHoCg5LKJVHHDk0iYLcFQRv=zHgFKke6kW_ZEA@mail.gmail.com>

Hi


 On 5 February 2013 09:38, Aaron Misquith <aaronmisquith at gmail.com> wrote:
>>
>>> I have attached a python program with this mail which peforms following
>>> operations:
>>> 1.Logs in to facebook.
>>> 2.Asks the user for access tokens.
>>> 3.Gets the friend list of the user.
>>> 4.outputs the friend list as pdf.
>>>
>>> My Problems regarding the above program are:
>>> 1.I want to display the names of my friends(in output) one in each line
>>> in the intermediate .doc file that i have created.
>>>               example output: {'data': [{'name': 'Roy Fernandes'},
>>> {'name': 'Aniruddh Beigh'},
>>>                                        I want it to be displayed as :
>>> Roy Fernandes
>>>
>>> Aniruddh Beigh
>>>
>>> 2.Is there a way to automate getting access tokens for the user that is
>>> logging in? If not how to get access tokens for each user while logging in?
>>>
>>> 3.How to dislpay text with clickable links.
>>>    Eg: Something thing like alert box, wherein if you click the link you
>>> go to the page.
>>>
>>> 4. Finally my lecturer has asked me to create a gui for the facebook
>>> login program using tkinter library module. I don't know how to create one
>>> (the lecturer has not thought this topic in class so i'm just clueless
>>> here). So if someone can do it and explain me the steps it will be very
>>> helpfull.
>>
>>
>> The way this tutoring mailing list (and in general, any programming
>> mailing list or support forum) works is that you do the legwork first, then
>> come with the actual problems you're having.  You don't just ask for people
>> to write your solutions for you.
>>
>> Also, your questions together with a partial solution by (apparently)
>> someone else makes me wonder whether this is homework.  Can you please
>> clarify?  Obviously, apart from the above comment on this not being a
>> solution service, we cannot provide direct solutions to homework
>> assignments.
>>
>> All that said, to address your questions somewhat:
>> 1.) The program is directly printing the returned Python dict object
>> (e.g. nik) which is why you're getting the curly-braced representation of
>> it.  To print/output it differently, take some more control over the
>> printing process.  E.g. print the attributes of the nik object manually and
>> use newline characters (\n) where required.  If you don't understand this
>> answer then you're lacking some basic Python skills/understanding and I'd
>> recommend learning some basic Python first, perhaps by working through Alan
>> Gauld's tutorial: http://www.alan-g.me.uk/tutor/index.htm
>> Then try your hand at this problem again yourself, and *then* post back
>> with specific problems you're having.
>>
>> 2.) Probably, but I don't offhand know how.  This is not really a Python
>> tutoring question and may be a question for appropriate for a Facebook API
>> programming forum.
>>
>> 3.) There's lots of TkInter materials on the web that will get you
>> started.  Here's a decent tutorial:
>> http://www.tkdocs.com/tutorial/index.html
>>
>
> First of all i would like to confirm that this was my assignment and i
> have completed it and shown to my lecturer. I'll also confirm that the
> class facebook was available in stackoverflow( Not completely, I had to
> make some changes to suit my requirements).But the rest is all mine
> especially exporting the output as pdf. None of the forums were helpful
> regarding this.
>

Making simple PDF's is almost trivial with Python.  The following example
is from http://is.gd/ol6bhn (a ReportLab tutorial that was turned up with
the google search "python reportlab example"):

from reportlab.pdfgen import canvas

c = canvas.Canvas("hello.pdf")
c.drawString(100,750,"Welcome to Reportlab!")
c.save()



> Everywhere people have mentioned about pypdf and reportlab toolkit , but
> none of them worked for me (i have also posted the solution on
> stackoverflow yesterday).
>

What did you try and what problems or errors did you run into? What did you
want to happen instead?


The problem that i encounter in creating GUI is I already have a class *
> facebook*; How am i supposed to integrate it to class "*Application*"(required
> to create GUI with tkinter)  which i have to integrate it with (the small
> bookish knowledge i possess in the topic).
>

Put your Facebook class in it's own module.  Then import that module from
your GUI application module (or from whatever module needs to use it) and
create an instance of the Facebook class where you need it.

Seriously, work through a Python programming tutorial, and then a TkInter
one.   You wouldn't be asking these questions if you had a proper grounding
in programming concepts in general and Python.  However it's not feasible
to address that piecemeal style via a mailing list exchange here.

Walter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130205/5666316a/attachment.html>

From oscar.j.benjamin at gmail.com  Tue Feb  5 16:27:24 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Tue, 5 Feb 2013 15:27:24 +0000
Subject: [Tutor] Help- Regarding python
In-Reply-To: <CACL+1asGC+UffOqA_-gD8U5HBDqjq07wfHD_-LnsGbz5-Dd7+w@mail.gmail.com>
References: <CA+wSkXvRK042PCRpTVhATAKpwDAr4ccKqOz20aSsChW_0HUE3w@mail.gmail.com>
	<CAHVvXxS--2=sJijR9mrBzg-Lxj5-WofwjbNfq771hLWTz0QXPA@mail.gmail.com>
	<CACL+1asGC+UffOqA_-gD8U5HBDqjq07wfHD_-LnsGbz5-Dd7+w@mail.gmail.com>
Message-ID: <CAHVvXxRYBBwbhnZh5kPEnBci-Ez5r5dichKwf9rKp=4oO8bgew@mail.gmail.com>

On 5 February 2013 05:08, eryksun <eryksun at gmail.com> wrote:
> On Mon, Feb 4, 2013 at 7:21 PM, Oscar Benjamin
> <oscar.j.benjamin at gmail.com> wrote:
>> eigenvalues, eigenvectors = np.linalg.eig(C)
>
> First sort by eigenvalue magnitude:
>
>     >>> idx = np.argsort(eigenvalues)[::-1]
>     >>> print idx
>     [ 0  1  2  3  8 10 11 12 14 22 20 21 18 19 23 24 17 16 15 13  9  7  5  6  4]
>
>     >>> eigenvalues = eigenvalues[idx]
>     >>> eigenvectors = eigenvectors[:, idx]
>
>> # 2D PCA - get the two eigenvectors with the largest eigenvalues
>> v1, v2 = eigenvectors[:,:2].T

Thanks. I thought that eig already sorted them. The doc claims says
that the values are "not necessarily ordered" but when I run it they
are in descending order of absolute value.

Also I should have used eigh since the covariance matrix is Hermitian
(eigh seems to give the eigenvalues in ascending order).


Oscar

From alan.gauld at btinternet.com  Tue Feb  5 19:38:52 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 05 Feb 2013 18:38:52 +0000
Subject: [Tutor] How to create a GUI for python using tkinter
In-Reply-To: <CAF9tAr4sxQYwfu98b8AfUav3k-p3X_9Zzch5WF3s+mVV1JRRFQ@mail.gmail.com>
References: <CAF9tAr4sxQYwfu98b8AfUav3k-p3X_9Zzch5WF3s+mVV1JRRFQ@mail.gmail.com>
Message-ID: <kerjjp$fu6$1@ger.gmane.org>

On 05/02/13 09:38, Aaron Misquith wrote:

> 2.Is there a way to automate getting access tokens for the user that is
> logging in? If not how to get access tokens for each user while logging in?

No idea, you'll need to ask on a Facebook programming list. This one 
only deals with Python programming issues.

> 3.How to dislpay text with clickable links.
>     Eg: Something thing like alert box, wherein if you click the link
> you go to the page.

Presumably you need to construct a URL. I'm not sure where you want 
these links but if its in the PDF you'll need to find out how PDFs do 
URLs... Find one and open it, or look at Reportlab again.

> 4. Finally my lecturer has asked me to create a gui for the facebook
> login program using tkinter library module. I don't know how to create
> one

Then read the tutorials online. You can start with the GUI topic in my 
tutoroial, then go to the TKinter section of the Python web site. There 
are at least 2 other excellent tkinter reference sites and the Tcl/Tk 
pages have a lot of good detail too.


HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From ilhs_hs at yahoo.com  Tue Feb  5 22:08:08 2013
From: ilhs_hs at yahoo.com (Hs Hs)
Date: Tue, 5 Feb 2013 13:08:08 -0800 (PST)
Subject: [Tutor] Getting range of a list
Message-ID: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>



Dear List members:

I always have problem in getting ranges:

Following is my representation of part of my file.

>X1
A
G
C
G
>X2
A
G
>X3
A
G
>X4
H
T


I want to print the above contents in the following way:

X1 \t A
X1 \t G
X1 \t C
X1 \t G
X2 \t A
X2 \t G
X3 \t A
X3 \t G
X4 \t H
X4 \t H


Here is what I do :
>>> f1 = open('test','r')
>>> da = f1.read().split('\n')
>>> dat = da[:-1]
>>> dat
>>> mpos = []

>>> for i in range(len(dat)):
if dat[i].startswith('>'):
mpos.append(i)

>>> mpos
[0, 3, 6, 9]

>>> for item in range(len(mpos)):
start = mpos[item]
enda = item+1
end ?= mpos[enda]-1
head = dat[start]
block ?= dat[start+1:end]
for i in block:
print head+'\t'+i

>X1A
>X2A
>X3A

Traceback (most recent call last):
? File "<pyshell#31>", line 4, in <module>
? ? end ?= mpos[enda]-1
IndexError: list index out of range
>>>?


By the time I am looping through last item, I do not have anything to take 1 from and thus end up with that indexerror.?

Could anyone please help me how to get a good habit of making this work. ?This is a very wrong and bad habit.?

thank you for your help in advance.?

Hs.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130205/2ba1f956/attachment-0001.html>

From steve at pearwood.info  Tue Feb  5 22:28:47 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Wed, 06 Feb 2013 08:28:47 +1100
Subject: [Tutor] Getting range of a list
In-Reply-To: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
References: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
Message-ID: <5111798F.4040100@pearwood.info>

On 06/02/13 08:08, Hs Hs wrote:

> Here is what I do :
>>>> f1 = open('test','r')
>>>> da = f1.read().split('\n')
>>>> dat = da[:-1]
>>>> dat
>>>> mpos = []
>
>>>> for i in range(len(dat)):
> if dat[i].startswith('>'):
> mpos.append(i)
>
>>>> mpos
> [0, 3, 6, 9]
>
>>>> for item in range(len(mpos)):
> start = mpos[item]
> enda = item+1
> end  = mpos[enda]-1
> head = dat[start]
> block  = dat[start+1:end]
> for i in block:
> print head+'\t'+i


You are thinking like a C programmer, not a Python programmer. You should almost never need to iterate over a range of numbers like this.

Instead, try something like this:

f = open('test')
head = '----'
for line in f:
     if line.startswith('>'):
         head = line[1:].rstrip()  # remove trailing newline
     else:
         print head + '\t' + line

f.close()



In general, you should iterate over collections of data directly. For example:

# WRONG
for i in range(len(data)):
     x = data[i]
     print x

# RIGHT
for x in data:
     print x



# WRONG
for i in range(len(data)):
     x = data[i]
     if x == 'spam':
         data[i] = 'ham'

# RIGHT
for i, x in enumerate(data):
     if x == 'spam':
         data[i] = 'ham'



Hope this helps.



-- 
Steven

From steve at pearwood.info  Tue Feb  5 22:35:51 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Wed, 06 Feb 2013 08:35:51 +1100
Subject: [Tutor] Iterating a dict with an iteration counter? How would
 *you* do it?
In-Reply-To: <CAHVvXxQrJcjQ_v_4-a52O20RfA5CU8cS6hUpGPk37FFCsqr8UA@mail.gmail.com>
References: <CAN2+EpaVcRYqNsTWsaG8+rDdtSLCNSLrybaDDZJiCLX4U=UBAw@mail.gmail.com>
	<510FEFC6.8030000@davea.name>
	<CAN2+EpYEQTk46g7k_2tk5hDa61bcds=vs65gKBb24i0+ofZa_g@mail.gmail.com>
	<51103597.20105@davea.name> <511041B6.5010902@pearwood.info>
	<51104C77.6050200@davea.name>
	<CACL+1avqba=hMVXkFsaberHR7wxOhG7TzzsmAyBk6g32S2t8kA@mail.gmail.com>
	<CAHVvXxQrJcjQ_v_4-a52O20RfA5CU8cS6hUpGPk37FFCsqr8UA@mail.gmail.com>
Message-ID: <51117B37.2090908@pearwood.info>

On 05/02/13 22:27, Oscar Benjamin wrote:
> On 5 February 2013 03:56, eryksun<eryksun at gmail.com>  wrote:
>> On Mon, Feb 4, 2013 at 7:04 PM, Dave Angel<davea at davea.name>  wrote:
>>>> Nope, in both Python 2 and 3 iterating over a dict directly just
>>>> provides the key. That's also how "if key in dict" works.
>>
>> A dict implements __contains__ for an efficient "in" test. In general,
>> the interpreter falls back to using iteration if a type lacks
>> __contains__.
>
> I almost wrote this response but then I realised that Dave probably
> meant that "obj in dict" returns True if the dict has a key equal to
> obj rather than if the dict has a (key, value) pair equal to obj.


It was actually me, not Dave, and yes, that's what I meant. I didn't mean
that dict containment tests were literally implemented by iterating over
the keys checking each one in turn, since that would be horribly
inefficient for something so critical as a dict. Although I can see why
eryksun may have thought so, sorry for any confusion caused by my poor
wording.

Although note that Python does fallback on iteration for containment if
you don't define a __contains__ method:


py> class Test(object):
...     def __getitem__(self, n):
...             if n >= 5: raise IndexError
...             return n + 100
...
py> t = Test()
py> 3 in t
False
py> 103 in t
True



-- 
Steven

From davea at davea.name  Tue Feb  5 22:39:54 2013
From: davea at davea.name (Dave Angel)
Date: Tue, 05 Feb 2013 16:39:54 -0500
Subject: [Tutor] Getting range of a list
In-Reply-To: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
References: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
Message-ID: <51117C2A.403@davea.name>

On 02/05/2013 04:08 PM, Hs Hs wrote:
>
>

First comment:  do NOT post in html, as it frequently messes up 
indenting.  Send your email in text mode, as this is a text mailing list.

Compounding that, you apparently are running inside some shell program 
(pyshell ?) which is doing a further mess.  But even if you were running 
under the real interpreter, once you've got doubly nested loops, it gets 
really hard to read.

> Dear List members:
>
> I always have problem in getting ranges:
>
> Following is my representation of part of my file.
>
>> X1
> A
> G
> C
> G
>> X2
> A
> G
>> X3
> A
> G
>> X4
> H
> T
>
>
> I want to print the above contents in the following way:
>
> X1 \t A
> X1 \t G
> X1 \t C
> X1 \t G
> X2 \t A
> X2 \t G
> X3 \t A
> X3 \t G
> X4 \t H
> X4 \t H
>
>
> Here is what I do
>>>> f1 = open('test','r')
>>>> da = f1.read().split('\n')

Why not just use readlines() ?  That's what it's for.

>>>> dat = da[:-1]
>>>> dat

Your shell forgot to display dat here.

>>>> mpos = []
>
>>>> for i in range(len(dat)):
> if dat[i].startswith('>'):
> mpos.append(i)
>
>>>> mpos
> [0, 3, 6, 9]
>
>>>> for item in range(len(mpos)):
> start = mpos[item]
> enda = item+1
> end  = mpos[enda]-1

What is this line intended to do?   enda is too big, so why are you 
surprised it will throw an exception last time through?

> head = dat[start]
> block  = dat[start+1:end]
> for i in block:
> print head+'\t'+i
>
>> X1A
>> X2A
>> X3A
>
> Traceback (most recent call last):
>    File "<pyshell#31>", line 4, in <module>
>      end  = mpos[enda]-1
> IndexError: list index out of range
>>>>
>
>
> By the time I am looping through last item, I do not have anything to take 1 from and thus end up with that indexerror.
>
> Could anyone please help me how to get a good habit of making this work.  This is a very wrong and bad habit.
>
> thank you for your help in advance.
>
> Hs.
>
>
Your mpos list is an index of starting points for records in the dat 
array.  But you're using it also as ending points, and you're missing 
the last one.  The usual way to fix this is to append one more entry to 
mpos, that points just beyond the end of the list dat
    mpos.append(len(dat))

Once you do that,you'll have to change your next for-loop, so it uses 
the original length, perhaps like:
    for item in range(len(mpos))-1:

That should get you closer to working.

However, this whole program feels like it was transliterated from BASIC 
or maybe C.  Any time you have to range(len(...  as the list for a for 
loop, something's probably wrong.  The entire program could be done much 
more elegantly.  And now I can see Steven has posted such an improvement.





-- 
DaveA

From ilhs_hs at yahoo.com  Tue Feb  5 22:48:10 2013
From: ilhs_hs at yahoo.com (Hs Hs)
Date: Tue, 5 Feb 2013 13:48:10 -0800 (PST)
Subject: [Tutor] Getting range of a list
In-Reply-To: <5111798F.4040100@pearwood.info>
References: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
	<5111798F.4040100@pearwood.info>
Message-ID: <1360100890.8386.YahooMailNeo@web163502.mail.gq1.yahoo.com>

Thanks Steve.?

But one question, when I print, I get extra empty lines. How to get rid of them! ?Thanks again.
>>> f = open('test')
>>> head = '---'
>>> for line in f:
if line.startswith('>'):
head = line[1:].strip()
else:
print head+'\t'+line

X1A
? ? ? ? ? ? ? ? ? ? ? ? <------
X1G
? ? ? ? ? ? ? ? ? ? ? ?<-----
X2A

X2G

X3A

X3G

X4A

X4A

Thanks
Hs.



________________________________
 From: Steven D'Aprano <steve at pearwood.info>
To: tutor at python.org 
Sent: Tuesday, February 5, 2013 4:28 PM
Subject: Re: [Tutor] Getting range of a list
 
On 06/02/13 08:08, Hs Hs wrote:

> Here is what I do :
>>>> f1 = open('test','r')
>>>> da = f1.read().split('\n')
>>>> dat = da[:-1]
>>>> dat
>>>> mpos = []
> 
>>>> for i in range(len(dat)):
> if dat[i].startswith('>'):
> mpos.append(i)
> 
>>>> mpos
> [0, 3, 6, 9]
> 
>>>> for item in range(len(mpos)):
> start = mpos[item]
> enda = item+1
> end? = mpos[enda]-1
> head = dat[start]
> block? = dat[start+1:end]
> for i in block:
> print head+'\t'+i


You are thinking like a C programmer, not a Python programmer. You should almost never need to iterate over a range of numbers like this.

Instead, try something like this:

f = open('test')
head = '----'
for line in f:
? ? if line.startswith('>'):
? ? ? ? head = line[1:].rstrip()? # remove trailing newline
? ? else:
? ? ? ? print head + '\t' + line

f.close()



In general, you should iterate over collections of data directly. For example:

# WRONG
for i in range(len(data)):
? ? x = data[i]
? ? print x

# RIGHT
for x in data:
? ? print x



# WRONG
for i in range(len(data)):
? ? x = data[i]
? ? if x == 'spam':
? ? ? ? data[i] = 'ham'

# RIGHT
for i, x in enumerate(data):
? ? if x == 'spam':
? ? ? ? data[i] = 'ham'



Hope this helps.



-- 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/20130205/922290ae/attachment-0001.html>

From davea at davea.name  Tue Feb  5 23:20:39 2013
From: davea at davea.name (Dave Angel)
Date: Tue, 05 Feb 2013 17:20:39 -0500
Subject: [Tutor] Getting range of a list
In-Reply-To: <1360100890.8386.YahooMailNeo@web163502.mail.gq1.yahoo.com>
References: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
	<5111798F.4040100@pearwood.info>
	<1360100890.8386.YahooMailNeo@web163502.mail.gq1.yahoo.com>
Message-ID: <511185B7.2070202@davea.name>

On 02/05/2013 04:48 PM, Hs Hs wrote:
> Thanks Steve.
>
> But one question, when I print, I get extra empty lines. How to get rid of them!  Thanks again.
>>>> f = open('test')
>>>> head = '---'
>>>> for line in f:

line = line.rstrip()     #get rid of the trailing newline (and any other 
whitespace there)

> if line.startswith('>'):
> head = line[1:].strip()
> else:
> print head+'\t'+line

The print generates a newline by default.  So you either have to do the 
strip() I suggested above, or use a trailing comma on the print.  I 
recommend the former.

>
> X1A
>                          <------
> X1G
>                         <-----
> X2A
>
> X2G
>
> X3A
>
> X3G
>
> X4A
>
> X4A
>
> Thanks
> Hs.
>
>
>

You're still posting using html mail.  And your indentation is still 
getting messed up.  Also, you top-posted.


-- 
DaveA

From 3n2solutions at gmail.com  Wed Feb  6 00:44:35 2013
From: 3n2solutions at gmail.com (3n2 Solutions)
Date: Tue, 5 Feb 2013 15:44:35 -0800
Subject: [Tutor] help with running perl script that writes to a text file
Message-ID: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>

Hello,

I want to automate the following manual process from DOS promp:

c:/scripts/perl>perl fix.pl base.gtx >base.txt

Here is my python script:

path="c:/scripts/perl/"
subprocess.call(['perl','fix.pl','base.gtx >base.txt',path])

I also tried this alternative:

subprocess.Popen(['perl','fix.pl','base.gtx >base.txt',path]) #same
result from this method.

The above script generates the base.txt file but has no content in it.

any ideas as to why the resulting text file is empty? Am I using the
correct python commands to run the above manual process?

I'm using python 2.7 on windows 7

Thanks,
Tim

From ilhs_hs at yahoo.com  Wed Feb  6 00:59:39 2013
From: ilhs_hs at yahoo.com (Hs Hs)
Date: Tue, 5 Feb 2013 15:59:39 -0800 (PST)
Subject: [Tutor] Getting range of a list
In-Reply-To: <511185B7.2070202@davea.name>
References: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
	<5111798F.4040100@pearwood.info>
	<1360100890.8386.YahooMailNeo@web163502.mail.gq1.yahoo.com>
	<511185B7.2070202@davea.name>
Message-ID: <1360108779.79426.YahooMailNeo@web163503.mail.gq1.yahoo.com>

Thanks Dave.?

Sorry for html formatting. Honestly I don't know how to shut html formatting off in Yahoo. I don't have options for send in ('Tools|Options|''send''missing').
Will investigate.?
thanks
Hs



________________________________
 From: Dave Angel <davea at davea.name>
To: tutor at python.org 
Sent: Tuesday, February 5, 2013 5:20 PM
Subject: Re: [Tutor] Getting range of a list
 
On 02/05/2013 04:48 PM, Hs Hs wrote:
> Thanks Steve.
>
> But one question, when I print, I get extra empty lines. How to get rid of them!? Thanks again.
>>>> f = open('test')
>>>> head = '---'
>>>> for line in f:

line = line.rstrip()? ?  #get rid of the trailing newline (and any other 
whitespace there)

> if line.startswith('>'):
> head = line[1:].strip()
> else:
> print head+'\t'+line

The print generates a newline by default.? So you either have to do the 
strip() I suggested above, or use a trailing comma on the print.? I 
recommend the former.

>
> X1A
>? ? ? ? ? ? ? ? ? ? ? ? ? <------
> X1G
>? ? ? ? ? ? ? ? ? ? ? ?  <-----
> X2A
>
> X2G
>
> X3A
>
> X3G
>
> X4A
>
> X4A
>
> Thanks
> Hs.
>
>
>

You're still posting using html mail.? And your indentation is still 
getting messed up.? Also, you top-posted.


-- 
DaveA
_______________________________________________
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/20130205/fc4ed1be/attachment.html>

From alan.gauld at btinternet.com  Wed Feb  6 01:47:52 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Wed, 06 Feb 2013 00:47:52 +0000
Subject: [Tutor] Getting range of a list
In-Reply-To: <1360108779.79426.YahooMailNeo@web163503.mail.gq1.yahoo.com>
References: <1360098488.70316.YahooMailNeo@web163505.mail.gq1.yahoo.com>
	<5111798F.4040100@pearwood.info>
	<1360100890.8386.YahooMailNeo@web163502.mail.gq1.yahoo.com>
	<511185B7.2070202@davea.name>
	<1360108779.79426.YahooMailNeo@web163503.mail.gq1.yahoo.com>
Message-ID: <kes97l$tui$1@ger.gmane.org>

On 05/02/13 23:59, Hs Hs wrote:
> Thanks Dave.
>
> Sorry for html formatting. Honestly I don't know how to shut html
> formatting off in Yahoo.

Create a new message.

Look at the bar just below the subject box, it has some tabs in it. At 
the extreme right end there is a button marked Switch to Plain Text...

HTH


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Wed Feb  6 01:52:46 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Wed, 06 Feb 2013 00:52:46 +0000
Subject: [Tutor] help with running perl script that writes to a text file
In-Reply-To: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
References: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
Message-ID: <kes9gs$46p$1@ger.gmane.org>

On 05/02/13 23:44, 3n2 Solutions wrote:

> I want to automate the following manual process from DOS promp:
>
> c:/scripts/perl>perl fix.pl base.gtx >base.txt

Use a DOS batch file, that's what they are there for.

If you are not doing any other processing Python is inefficient and 
overkill for this task. Unless you just want to learn how to use Popen I 
suppose...


> path="c:/scripts/perl/"
> subprocess.call(['perl','fix.pl','base.gtx >base.txt',path])

Do you get any error messages on the console?
How are you running the python script?

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From kangyangjae at gmail.com  Wed Feb  6 10:48:10 2013
From: kangyangjae at gmail.com (Kang, Yang Jae)
Date: Wed, 6 Feb 2013 18:48:10 +0900
Subject: [Tutor] regarding the list problem
Message-ID: <15ba01ce044f$1551e860$3ff5b920$@gmail.com>

Hello

 

I'm a beginner to python. I ran following code and expected [[1, 0], [0, 0],
[0, 0]]

However unexpected result came up. Anybody who can teach me why and how to
solve?

 

Python 3.2.3 (default, May 19 2012, 23:34:41) 

[GCC 4.4.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> [1] *3

[1, 1, 1]

>>> [[0,0]]*3

[[0, 0], [0, 0], [0, 0]]

>>> a = [[0,0]]*3

>>> a

[[0, 0], [0, 0], [0, 0]]

>>> a[0][0] += 1

>>> a

[[1, 0], [1, 0], [1, 0]]

 

Kang, Yang Jae 

Ph.D.

Cropgenomics Lab.

College of Agriculture and Life Science

Seoul National University 

Korea

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130206/770c3b07/attachment-0001.html>

From __peter__ at web.de  Wed Feb  6 11:12:54 2013
From: __peter__ at web.de (Peter Otten)
Date: Wed, 06 Feb 2013 11:12:54 +0100
Subject: [Tutor] help with running perl script that writes to a text file
References: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
Message-ID: <ketaav$cm5$1@ger.gmane.org>

3n2 Solutions wrote:

> Hello,
> 
> I want to automate the following manual process from DOS promp:
> 
> c:/scripts/perl>perl fix.pl base.gtx >base.txt
> 
> Here is my python script:
> 
> path="c:/scripts/perl/"
> subprocess.call(['perl','fix.pl','base.gtx >base.txt',path])
> 
> I also tried this alternative:
> 
> subprocess.Popen(['perl','fix.pl','base.gtx >base.txt',path]) #same
> result from this method.
> 
> The above script generates the base.txt file but has no content in it.
> 
> any ideas as to why the resulting text file is empty? Am I using the
> correct python commands to run the above manual process?

I'm surprised that base.txt is generated at all, I'd expect fix.pl to look 
for a file named "base.gtx >base.txt" and complain when it doesn't find 
that.

I think the following should work:

with open("c:/scripts/perl/base.txt", "w") as f:
    subprocess.check_call(
        ["perl", 
         "c:/scripts/perl/fix.pl", 
         "c:/scripts/perl/base.gtx"], 
        stdout=f)




From eryksun at gmail.com  Wed Feb  6 11:58:54 2013
From: eryksun at gmail.com (eryksun)
Date: Wed, 6 Feb 2013 05:58:54 -0500
Subject: [Tutor] help with running perl script that writes to a text file
In-Reply-To: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
References: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
Message-ID: <CACL+1as54hJB2AJ-UR1m33qDeEd+y+Xc-pOi9rkRk60m_S4FhA@mail.gmail.com>

On Tue, Feb 5, 2013 at 6:44 PM, 3n2 Solutions <3n2solutions at gmail.com> wrote:
>
> I want to automate the following manual process from DOS promp:

I agree with Peter's answer. I'd just like to add a generally useless
and pedantic comment about the habit of saying "DOS prompt". The cmd
shell is a Win32 console application, unlike DOS command.com. On
64-bit Windows there isn't even a virtual DOS machine (NTVDM) to run
command.com. There, I feel better now. :)

From hugo.yoshi at gmail.com  Wed Feb  6 12:07:14 2013
From: hugo.yoshi at gmail.com (Hugo Arts)
Date: Wed, 6 Feb 2013 11:07:14 +0000
Subject: [Tutor] regarding the list problem
In-Reply-To: <15ba01ce044f$1551e860$3ff5b920$@gmail.com>
References: <15ba01ce044f$1551e860$3ff5b920$@gmail.com>
Message-ID: <CAJmBOfk+CH9pi8z7Ap3XMQkCQF9mSihFZ+-9a_Gbmqb2b0xnOQ@mail.gmail.com>

On Wed, Feb 6, 2013 at 9:48 AM, Kang, Yang Jae <kangyangjae at gmail.com>wrote:

This line:


> >>> a = [[0,0]]*3
>

creates a list, a, which contains the list object [0, 0] three times.
What's crucial to note is that it contains *the same object* three times,
not three different objects with the same value. You can verify this
yourself, with the id() function:

>>> a = [[0,0]] * 3
>>> a
[[0, 0], [0, 0], [0, 0]]
>>> id(a[0]), id(a[1]), id(a[2])
(41087144, 41087144, 41087144)
>>>

All three have the same id, therefore all three point to one and the same
object.

> >>> a****
>
> [[0, 0], [0, 0], [0, 0]]****
>
> >>> a[0][0] += 1****
>
> >>> a****
>
> [[1, 0], [1, 0], [1, 0]]
>
It should not be so strange, now, that if you modify a[0], this
modification will be reflected in a[1] and a[2] as well, since those are
all the same object.

Now, this can happen with lists, because they are mutable. If we do the
same with integers:

>>> a = [1] * 3
>>> a
[1, 1, 1]
>>> id(a[0]), id(a[1]), id(a[2])
(3779904, 3779904, 3779904)
>>> a[0] += 1
>>> a
[2, 1, 1]
>>>

You get the expected behaviour now, even though the list again contained
the same object three times. This is because integers are *immutable*,
meaning you cannot change them. So this line:

>>> a[0] += 1

did not modify the object, but created another integer object, with value
2, and assigned that to a[0]. The conclusion is that you should always be
mindful of whether your objects are mutable or not, and you should
understand what actually happens when you multiply a list by a constant, to
avoid these kinds of problems. In this case, what you wanted to do was
create three list objects with value [0, 0], not just the one. You may
either generate them with a loop or list comprehension, or simply write the
list out in its entirety:

>>> a = [[0,0] for i in range(3)]
>>> id(a[0]), id(a[1]), id(a[2])
(4070896, 41087984, 41061792)
>>> a = [[0, 0], [0, 0], [0, 0]]
>>> id(a[0]), id(a[1]), id(a[2])
(41087944, 41087824, 41069624)
>>>

This way, the lists are actually three different lists and not just the
same object three times (as you can see, they have different id's)

HTH,
Hugo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130206/d1843244/attachment.html>

From schooluse1992 at yahoo.com  Wed Feb  6 14:44:33 2013
From: schooluse1992 at yahoo.com (Mara Kelly)
Date: Wed, 6 Feb 2013 13:44:33 +0000 (GMT)
Subject: [Tutor] recursive function password check
Message-ID: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>

Hi everyone, trying to write a program that has the user enter a password, checks if it contains any vowels, and if it does prints ' It is false that password(whatever the user enters) has no vowels,' and if it has no vowels prints it is True that password has no vowels...
Here is what I have so far...def password(y):? ? vowels=["a","e","i","o"]? ? if y[0] in vowels:? ? ? ? return False? ? if len(y) ==0:? ? ? ? return True? ? elif(y[len(y)-1] != vowels):? ? ? ? return False? ? else:? ? ? ? return password(y[1:len(y)-1])x=input("Enter a password:")print("It is", password(x),"that",x,"has no vowles")
As of now it just asks for the password, and then prints 'It is False that password(whatever was entered) has no vowles' for any word I enter. I think maybe some of my if statement conditions may be being returned to the function, but then not printing the appropriate one? Can anyone help? Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130206/96849e2e/attachment.html>

From hugo.yoshi at gmail.com  Wed Feb  6 15:05:58 2013
From: hugo.yoshi at gmail.com (Hugo Arts)
Date: Wed, 6 Feb 2013 14:05:58 +0000
Subject: [Tutor] recursive function password check
In-Reply-To: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
References: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
Message-ID: <CAJmBOfkQj6X4v13R+dTMjr2Lyo7jB0U7=jXVDJyrhT7HzcDmQg@mail.gmail.com>

On Wed, Feb 6, 2013 at 1:44 PM, Mara Kelly <schooluse1992 at yahoo.com> wrote:

> Hi everyone, trying to write a program that has the user enter a password,
> checks if it contains any vowels, and if it does prints ' It is false that
> password(whatever the user enters) has no vowels,' and if it has no vowels
> prints it is True that password has no vowels...
>
> Here is what I have so far...
>
def password(y):
>     vowels=["a","e","i","o"]
>     if y[0] in vowels:
>         return False
>     if len(y) ==0:
>         return True
>     elif(y[len(y)-1] != vowels):
>         return False
>     else:
>         return password(y[1:len(y)-1])
> x=input("Enter a password:")
> print("It is", password(x),"that",x,"has no vowles")
>
>
Okay, it looks to me like you are inspecting the first and last characters
in the string, returning False if some condition is met for each, and
otherwise you chop them off and call recursively on the resulting string.
 So here's a question for you: For the first character, you check if y[0]
in vowels. But for the last character, you check if y[len(y) - 1] !=
vowels. Why did you use "in" for the first test, and "!=" for the second?

By the way, here's a related tip: in Python, negative indexes will work
from the back of the sequence. So y[-1] is the last element, y[-2] the
second to last, et cetera.

HTH,
Hugo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130206/dd6cf3d3/attachment.html>

From simonyan at fedoraproject.org  Wed Feb  6 15:10:40 2013
From: simonyan at fedoraproject.org (Simon Yan)
Date: Wed, 6 Feb 2013 22:10:40 +0800
Subject: [Tutor] recursive function password check
In-Reply-To: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
References: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
Message-ID: <CALEWkc8_8FU1Tp6oMLej7pMDhuJAD54+-kQAv+9=sZvcc3Da8g@mail.gmail.com>

On Wed, Feb 6, 2013 at 9:44 PM, Mara Kelly <schooluse1992 at yahoo.com> wrote:

> Hi everyone, trying to write a program that has the user enter a password,
> checks if it contains any vowels, and if it does prints ' It is false that
> password(whatever the user enters) has no vowels,' and if it has no vowels
> prints it is True that password has no vowels...
>
> Here is what I have so far...
> def password(y):
>     vowels=["a","e","i","o"]
>     if y[0] in vowels:
>         return False
>     if len(y) ==0:
>         return True
>     elif(y[len(y)-1] != vowels):
>         return False
>     else:
>         return password(y[1:len(y)-1])
> x=input("Enter a password:")
> print("It is", password(x),"that",x,"has no vowles")
>
> As of now it just asks for the password, and then prints 'It is False that
> password(whatever was entered) has no vowles' for any word I enter. I think
> maybe some of my if statement conditions may be being returned to the
> function, but then not printing the appropriate one? Can anyone help?
> Thanks!
>
It appears that the issue is from this:

elif(y[len(y)-1] != vowels):

This condition will be true because you are comparing a string with a list.
Thus causing passwrod() returning False.


>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>


-- 
Regards,
YeeYaa (Simon Yan)

http://simonyan.fedorapeople.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130206/b66d1e01/attachment-0001.html>

From Noriko.Tani at tomtom.com  Wed Feb  6 15:26:04 2013
From: Noriko.Tani at tomtom.com (Noriko Tani)
Date: Wed, 6 Feb 2013 14:26:04 +0000
Subject: [Tutor] recursive function password check
In-Reply-To: <CALEWkc8_8FU1Tp6oMLej7pMDhuJAD54+-kQAv+9=sZvcc3Da8g@mail.gmail.com>
References: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
	<CALEWkc8_8FU1Tp6oMLej7pMDhuJAD54+-kQAv+9=sZvcc3Da8g@mail.gmail.com>
Message-ID: <212470589DA172418D299284EFF478AB409ECADE@BESRVWP-EXM02.ttg.global>

Hi Mara,

Several suggestions:

Put the password in a list, then loop each letter to check if it is a vowel like this

password=[]
vowels=['a','e','i','o','u']            #in your message, u is missing, BTW
password=input("Enter a password:")

for p in password:
    if p in vowels:
        return True          #I would use print("the message that you want to display") though.
    else:
        return False

And how about error handling?  You put
    if len(y) ==0:
        return True          #I would use print("woops! You did not enter anything.") and add break

Does this password case sensitive?  If so, add AEIOU in vowels list.

Good luck!

Noriko

________________________________
From: Tutor [mailto:tutor-bounces+noriko.tani=tomtom.com at python.org] On Behalf Of Simon Yan
Sent: Wednesday, February 06, 2013 9:11 AM
To: Mara Kelly
Cc: tutor at python.org
Subject: Re: [Tutor] recursive function password check



On Wed, Feb 6, 2013 at 9:44 PM, Mara Kelly <schooluse1992 at yahoo.com<mailto:schooluse1992 at yahoo.com>> wrote:
Hi everyone, trying to write a program that has the user enter a password, checks if it contains any vowels, and if it does prints ' It is false that password(whatever the user enters) has no vowels,' and if it has no vowels prints it is True that password has no vowels...

Here is what I have so far...
def password(y):
    vowels=["a","e","i","o"]
    if y[0] in vowels:
        return False
    if len(y) ==0:
        return True
    elif(y[len(y)-1] != vowels):
        return False
    else:
        return password(y[1:len(y)-1])
x=input("Enter a password:")
print("It is", password(x),"that",x,"has no vowles")

As of now it just asks for the password, and then prints 'It is False that password(whatever was entered) has no vowles' for any word I enter. I think maybe some of my if statement conditions may be being returned to the function, but then not printing the appropriate one? Can anyone help? Thanks!

It appears that the issue is from this:

elif(y[len(y)-1] != vowels):

This condition will be true because you are comparing a string with a list. Thus causing passwrod() returning False.


_______________________________________________
Tutor maillist  -  Tutor at python.org<mailto:Tutor at python.org>
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor



--
Regards,
YeeYaa (Simon Yan)

http://simonyan.fedorapeople.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130206/96166170/attachment.html>

From davea at davea.name  Wed Feb  6 15:46:39 2013
From: davea at davea.name (Dave Angel)
Date: Wed, 06 Feb 2013 09:46:39 -0500
Subject: [Tutor] recursive function password check
In-Reply-To: <212470589DA172418D299284EFF478AB409ECADE@BESRVWP-EXM02.ttg.global>
References: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
	<CALEWkc8_8FU1Tp6oMLej7pMDhuJAD54+-kQAv+9=sZvcc3Da8g@mail.gmail.com>
	<212470589DA172418D299284EFF478AB409ECADE@BESRVWP-EXM02.ttg.global>
Message-ID: <51126CCF.8010105@davea.name>

On 02/06/2013 09:26 AM, Noriko Tani wrote:
> Hi Mara,
>
> Several suggestions:
>
> Put the password in a list, then loop each letter to check if it is a vowel like this

No need to make it a list, strings are already iterable.  And you don't 
make it a list in the code, just in the remark above.

>
> password=[]
> vowels=['a','e','i','o','u']            #in your message, u is missing, BTW
> password=input("Enter a password:")
>
> for p in password:

This loop goes around exactly once, since you return no matter what.

>      if p in vowels:
>          return True          #I would use print("the message that you want to display") though.

Shouldn't mix "calculation" and "output" unless it's just for play.

>      else:
>          return False

This return should be dedented to line up with the for statement, so it 
only executes if none of the earlier characters was a vowel.
>
> And how about error handling?  You put
>      if len(y) ==0:
>          return True          #I would use print("woops! You did not enter anything.") and add break

But in the OP's code, this return is triggered on any string with no 
vowels.  Note, the function is recursive, and this is the only final 
exit condition.

>
> Does this password case sensitive?  If so, add AEIOU in vowels list.
>
> Good luck!
>
> Noriko
>
> ________________________________
> From: Tutor [mailto:tutor-bounces+noriko.tani=tomtom.com at python.org] On Behalf Of Simon Yan
> Sent: Wednesday, February 06, 2013 9:11 AM
> To: Mara Kelly
> Cc: tutor at python.org
> Subject: Re: [Tutor] recursive function password check
>
>
>
> On Wed, Feb 6, 2013 at 9:44 PM, Mara Kelly <schooluse1992 at yahoo.com<mailto:schooluse1992 at yahoo.com>> wrote:
> Hi everyone, trying to write a program that has the user enter a password, checks if it contains any vowels, and if it does prints ' It is false that password(whatever the user enters) has no vowels,' and if it has no vowels prints it is True that password has no vowels...
>
> Here is what I have so far...
> def password(y):
>      vowels=["a","e","i","o"]
>      if y[0] in vowels:
>          return False
>      if len(y) ==0:
>          return True
>      elif(y[len(y)-1] != vowels):
>          return False
>      else:
>          return password(y[1:len(y)-1])
> x=input("Enter a password:")
> print("It is", password(x),"that",x,"has no vowles")
>
> As of now it just asks for the password, and then prints 'It is False that password(whatever was entered) has no vowles' for any word I enter. I think maybe some of my if statement conditions may be being returned to the function, but then not printing the appropriate one? Can anyone help? Thanks!
>
> It appears that the issue is from this:
>
> elif(y[len(y)-1] != vowels):
>
> This condition will be true because you are comparing a string with a list. Thus causing passwrod() returning False.
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org<mailto:Tutor at python.org>
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>
>
> --
> Regards,
> YeeYaa (Simon Yan)
>
> http://simonyan.fedorapeople.org/
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
DaveA

From davea at davea.name  Wed Feb  6 15:53:52 2013
From: davea at davea.name (Dave Angel)
Date: Wed, 06 Feb 2013 09:53:52 -0500
Subject: [Tutor] recursive function password check
In-Reply-To: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
References: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
Message-ID: <51126E80.6090901@davea.name>

On 02/06/2013 08:44 AM, Mara Kelly wrote:
> Hi everyone, trying to write a program that has the user enter a password, checks if it contains any vowels, and if it does prints ' It is false that password(whatever the user enters) has no vowels,' and if it has no vowels prints it is True that password has no vowels...
> Here is what I have so far...def password(y):    vowels=["a","e","i","o"]    if y[0] in vowels:        return False    if len(y) ==0:        return True    elif(y[len(y)-1] != vowels):        return False    else:        return password(y[1:len(y)-1])x=input("Enter a password:")print("It is", password(x),"that",x,"has no vowles")
> As of now it just asks for the password, and then prints 'It is False that password(whatever was entered) has no vowles' for any word I enter. I think maybe some of my if statement conditions may be being returned to the function, but then not printing the appropriate one? Can anyone help? Thanks!
>
>
>

Please don't post in html email. It can seriously mess up your columns. 
  In your case, your email program didn't even try to provide a text 
version, so those of us who read text emails can't make much sense of it.

Fortunately, I can decipher it by using someone else's reply.  I quote 
that below:

 >
def password(y):
 >     vowels=["a","e","i","o"]

You might want to include "u" in that list.  And maybe the uppercase 
versions as well.

 >     if y[0] in vowels:
 >         return False
 >     if len(y) ==0:
 >         return True
 >     elif(y[len(y)-1] != vowels):

No, you want  if y[-1] in vowels:   instead.  A string is never going to 
be equal to a list.

 >         return False
 >     else:
 >         return password(y[1:len(y)-1])
 > x=input("Enter a password:")
 > print("It is", password(x),"that",x,"has no vowles")


I presume that making the function recursive was an explicit part of the 
assignment.

-- 
DaveA

From ramit.prasad at jpmorgan.com  Wed Feb  6 17:31:12 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Wed, 6 Feb 2013 16:31:12 +0000
Subject: [Tutor] recursive function password check
In-Reply-To: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
References: <1360158273.46601.YahooMailClassic@web171602.mail.ir2.yahoo.com>
Message-ID: <5B80DD153D7D744689F57F4FB69AF4741815C8C8@SCACMX008.exchad.jpmchase.net>

Mara Kelly wrote:
> Hi everyone, trying to write a program that has the user enter a password, checks if it contains any vowels, and
> if it does prints ' It is false that password(whatever the user enters) has no vowels,' and if it has no vowels
> prints it is True that password has no vowels...
> 
> Here is what I have so far...
> def password(y):
> ? ? vowels=["a","e","i","o"]
> ? ? if y[0] in vowels:
> ? ? ? ? return False
> ? ? if len(y) ==0:
> ? ? ? ? return True
> ? ? elif(y[len(y)-1] != vowels):
> ? ? ? ? return False
> ? ? else:
> ? ? ? ? return password(y[1:len(y)-1])
> x=input("Enter a password:")
> print("It is", password(x),"that",x,"has no vowles")
> 
> As of now it just asks for the password, and then prints 'It is False that password(whatever was entered) has no
> vowles' for any word I enter. I think maybe some of my if statement conditions may be being returned to the
> function, but then not printing the appropriate one? Can anyone help? Thanks!


Why look at each character in the password? Unless you have a very short
password it will be more inefficient than looking for the vowels. Also,
if you lowercase the incoming password then you can avoid looking
for uppercase vowels. Note: if you have to deal with international
character sets (code pages) then you might not want to lower. If you
did not understand the previous statement, then chances are it does
not apply to you. :) I will leave the following code snippet with you
to adapt into your program. 

y = y.lower()
if vowel in y:
    return False


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From alan.gauld at btinternet.com  Wed Feb  6 18:47:19 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Wed, 06 Feb 2013 17:47:19 +0000
Subject: [Tutor] help with running perl script that writes to a text file
In-Reply-To: <CACL+1as54hJB2AJ-UR1m33qDeEd+y+Xc-pOi9rkRk60m_S4FhA@mail.gmail.com>
References: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
	<CACL+1as54hJB2AJ-UR1m33qDeEd+y+Xc-pOi9rkRk60m_S4FhA@mail.gmail.com>
Message-ID: <keu4v5$rfp$1@ger.gmane.org>

On 06/02/13 10:58, eryksun wrote:

> and pedantic comment about the habit of saying "DOS prompt". The cmd
> shell is a Win32 console application, unlike DOS command.com.

Yes, but the problem is that Windows now has so many command prompts 
(cscript, cmd, power shell etc) that "the Windows prompt"
would be meaningless and "the cmd prompt" too awkward to say,
so "the DOS prompt" is both traditional and sufficiently specific making 
it the most easily understandable of the likely terms.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From bgailer at gmail.com  Wed Feb  6 19:12:16 2013
From: bgailer at gmail.com (bob gailer)
Date: Wed, 06 Feb 2013 13:12:16 -0500
Subject: [Tutor] regarding the list problem
In-Reply-To: <15ba01ce044f$1551e860$3ff5b920$@gmail.com>
References: <15ba01ce044f$1551e860$3ff5b920$@gmail.com>
Message-ID: <51129D00.4020708@gmail.com>


http://www.pythontutor.com/visualize.html

is very helpful. Enter your code, click Visualize Execution, then click 
forward.

-- 
Bob Gailer
919-636-4239
Chapel Hill NC


From 3n2solutions at gmail.com  Wed Feb  6 23:02:27 2013
From: 3n2solutions at gmail.com (3n2 Solutions)
Date: Wed, 6 Feb 2013 14:02:27 -0800
Subject: [Tutor] Tutor Digest, Vol 108, Issue 22
In-Reply-To: <mailman.21.1360148402.7400.tutor@python.org>
References: <mailman.21.1360148402.7400.tutor@python.org>
Message-ID: <CAHYzZON9XQmMHw4A_Or3yToQe_-aN3AKHeTn3dgoq8f-vEw=7A@mail.gmail.com>

On Wed, Feb 6, 2013 at 3:00 AM,  <tutor-request at python.org> wrote:
> Send Tutor mailing list submissions to
>         tutor at python.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         http://mail.python.org/mailman/listinfo/tutor
> or, via email, send a message with subject or body 'help' to
>         tutor-request at python.org
>
> You can reach the person managing the list at
>         tutor-owner at python.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Tutor digest..."
>
>
> Today's Topics:
>
>    1. Re: help with running perl script that writes to a text file
>       (Peter Otten)
>    2. Re: help with running perl script that writes to a text file
>       (eryksun)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 06 Feb 2013 11:12:54 +0100
> From: Peter Otten <__peter__ at web.de>
> To: tutor at python.org
> Subject: Re: [Tutor] help with running perl script that writes to a
>         text file
> Message-ID: <ketaav$cm5$1 at ger.gmane.org>
> Content-Type: text/plain; charset="ISO-8859-1"
>
> 3n2 Solutions wrote:
>
>> Hello,
>>
>> I want to automate the following manual process from DOS promp:
>>
>> c:/scripts/perl>perl fix.pl base.gtx >base.txt
>>
>> Here is my python script:
>>
>> path="c:/scripts/perl/"
>> subprocess.call(['perl','fix.pl','base.gtx >base.txt',path])
>>
>> I also tried this alternative:
>>
>> subprocess.Popen(['perl','fix.pl','base.gtx >base.txt',path]) #same
>> result from this method.
>>
>> The above script generates the base.txt file but has no content in it.
>>
>> any ideas as to why the resulting text file is empty? Am I using the
>> correct python commands to run the above manual process?
>
> I'm surprised that base.txt is generated at all, I'd expect fix.pl to look
> for a file named "base.gtx >base.txt" and complain when it doesn't find
> that.
>
> I think the following should work:
>
> with open("c:/scripts/perl/base.txt", "w") as f:
>     subprocess.check_call(
>         ["perl",
>          "c:/scripts/perl/fix.pl",
>          "c:/scripts/perl/base.gtx"],
>         stdout=f)
>
>

Peter, that did it! Thank you.

From sunil.techspk at gmail.com  Thu Feb  7 07:09:52 2013
From: sunil.techspk at gmail.com (Sunil Tech)
Date: Thu, 7 Feb 2013 11:39:52 +0530
Subject: [Tutor] If a method has no return type?
Message-ID: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>

If a method has no return type?
what will it return?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130207/6c2349e3/attachment.html>

From wescpy at gmail.com  Thu Feb  7 07:32:22 2013
From: wescpy at gmail.com (wesley chun)
Date: Thu, 7 Feb 2013 00:32:22 -0600
Subject: [Tutor] If a method has no return type?
In-Reply-To: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
References: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
Message-ID: <CAB6eaA5neB956vR0vjDurNZrWt9vxCzypg2MjXZFM3=ALSTWFA@mail.gmail.com>

On Thu, Feb 7, 2013 at 12:09 AM, Sunil Tech <sunil.techspk at gmail.com> wrote:

> If a method has no return type?
> what will it return?
>

note the original question is partially invalid... Python functions and
methods aren't typed. however, i imagine the OP really meant *return value*
instead, so the answer is really the following:
functions *and* methods with no explicit return *value* return None... this
happens when you either have no return statement or just return by itself
with no object given.

one exception is __init__()... you're never supposed to return anything
from it... ever. i can't think of any others... can you?

best regards,
-- wesley
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"A computer never does what you want... only what you tell it."
    +wesley chun : wescpy at gmail : @wescpy
    Python training & consulting : http://CyberwebConsulting.com
    "Core Python" books : http://CorePython.com
    Python blog: http://wescpy.blogspot.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130207/8a66a6b3/attachment-0001.html>

From swordangel at gmail.com  Thu Feb  7 07:37:55 2013
From: swordangel at gmail.com (Kal Sze)
Date: Thu, 7 Feb 2013 14:37:55 +0800
Subject: [Tutor] If a method has no return type?
In-Reply-To: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
References: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
Message-ID: <CAGZiy71-NJ=Lv5qW=f_W_oxyeRf3vVezVqZMXptQ061doCC7rA@mail.gmail.com>

Dear Sunil,

No method or function in Python has a *static* return type. That's
because Python is by nature a dynamic language, with duck typing and
dynamic dispatch. In fact, any method or function may well return any
of a number of different types:

    def crazy_function(return_int)
        if return_int:
            return 1
        else:
            return 'foo'

It's probably bad design, but there is nothing in the Python grammar
and semantics that stops you from doing that.

So your question is better phrased as: if I don't explicitly return
anything, what is returned?

The answer to that would be: the None object

Cheers,
Kal

On 7 February 2013 14:09, Sunil Tech <sunil.techspk at gmail.com> wrote:
> If a method has no return type?
> what will it return?
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

From eryksun at gmail.com  Thu Feb  7 07:48:56 2013
From: eryksun at gmail.com (eryksun)
Date: Thu, 7 Feb 2013 01:48:56 -0500
Subject: [Tutor] help with running perl script that writes to a text file
In-Reply-To: <keu4v5$rfp$1@ger.gmane.org>
References: <CAHYzZOMxF_aPGtpkesWVRYZsgEL-752-4TF4JzT9oEH1jVC3BQ@mail.gmail.com>
	<CACL+1as54hJB2AJ-UR1m33qDeEd+y+Xc-pOi9rkRk60m_S4FhA@mail.gmail.com>
	<keu4v5$rfp$1@ger.gmane.org>
Message-ID: <CACL+1at7v7ybnX4jWcrKQ6RKMuQWcBQ77XykP-L9t9JraXRuDw@mail.gmail.com>

On Wed, Feb 6, 2013 at 12:47 PM, Alan Gauld <alan.gauld at btinternet.com> wrote:
> so "the DOS prompt" is both traditional and sufficiently specific making it
> the most easily understandable of the likely terms.

"DOS prompt" is a common idiom, but it bears mentioning now and then
that the OS is NT [1], not DOS. That's all; I know I'm being pedantic.

Officially the Windows command-line shell is called the "command
prompt". I call it the shell [2] or command line. Unless someone says
PowerShell or 4NT, I assume it's cmd.

[1] Windows 8 is NT 6.2.9200
[2] Not the GUI shell, Explorer, which is set here:
    HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Shell

From sunil.techspk at gmail.com  Thu Feb  7 10:09:07 2013
From: sunil.techspk at gmail.com (Sunil Tech)
Date: Thu, 7 Feb 2013 14:39:07 +0530
Subject: [Tutor] If a method has no return type?
In-Reply-To: <CAGZiy71-NJ=Lv5qW=f_W_oxyeRf3vVezVqZMXptQ061doCC7rA@mail.gmail.com>
References: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
	<CAGZiy71-NJ=Lv5qW=f_W_oxyeRf3vVezVqZMXptQ061doCC7rA@mail.gmail.com>
Message-ID: <CAExJxTPOoXmDgxGCDgG-JigdwVNhoyM47UEALABzCUA+61htkw@mail.gmail.com>

Thank you Wesley, Kal & tutor


On Thu, Feb 7, 2013 at 12:07 PM, Kal Sze <swordangel at gmail.com> wrote:

> Dear Sunil,
>
> No method or function in Python has a *static* return type. That's
> because Python is by nature a dynamic language, with duck typing and
> dynamic dispatch. In fact, any method or function may well return any
> of a number of different types:
>
>     def crazy_function(return_int)
>         if return_int:
>             return 1
>         else:
>             return 'foo'
>
> It's probably bad design, but there is nothing in the Python grammar
> and semantics that stops you from doing that.
>
> So your question is better phrased as: if I don't explicitly return
> anything, what is returned?
>
> The answer to that would be: the None object
>
> Cheers,
> Kal
>
> On 7 February 2013 14:09, Sunil Tech <sunil.techspk at gmail.com> wrote:
> > If a method has no return type?
> > what will it return?
> >
> > _______________________________________________
> > 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/20130207/efdfc123/attachment.html>

From steve at pearwood.info  Thu Feb  7 10:58:34 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Thu, 07 Feb 2013 20:58:34 +1100
Subject: [Tutor] If a method has no return type?
In-Reply-To: <CAB6eaA5neB956vR0vjDurNZrWt9vxCzypg2MjXZFM3=ALSTWFA@mail.gmail.com>
References: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
	<CAB6eaA5neB956vR0vjDurNZrWt9vxCzypg2MjXZFM3=ALSTWFA@mail.gmail.com>
Message-ID: <51137ACA.3080509@pearwood.info>

On 07/02/13 17:32, wesley chun wrote:
> On Thu, Feb 7, 2013 at 12:09 AM, Sunil Tech<sunil.techspk at gmail.com>  wrote:
>
>> If a method has no return type?
>> what will it return?
>>
>
> note the original question is partially invalid... Python functions and
> methods aren't typed. however, i imagine the OP really meant *return value*
> instead, so the answer is really the following:
> functions *and* methods with no explicit return *value* return None... this
> happens when you either have no return statement or just return by itself
> with no object given.
>
> one exception is __init__()... you're never supposed to return anything
> from it... ever. i can't think of any others... can you?

In-place modification methods typically return None. Functions and methods
intended to operate as procedures, or via side-effect, also typically
return None:

list.sort
list.reverse
list.append
list.extend
dict.clear
dict.update
set.clear
set.update
__delitem__
__setitem__
_delattr__
__setattr__
random.shuffle
file.close
print  # Python 3 only

But as far as I know, __init__ is the only one which actually enforces the
rule that it returns None, at least in Python 3.3.



-- 
Steven

From timomlists at gmail.com  Thu Feb  7 11:25:13 2013
From: timomlists at gmail.com (Timo)
Date: Thu, 07 Feb 2013 11:25:13 +0100
Subject: [Tutor] If a method has no return type?
In-Reply-To: <CAExJxTPOoXmDgxGCDgG-JigdwVNhoyM47UEALABzCUA+61htkw@mail.gmail.com>
References: <CAExJxTNDz1DkmdzJz8F_s4PJOdk-u3nrtB6f_vCQNN0WJz3XKw@mail.gmail.com>
	<CAGZiy71-NJ=Lv5qW=f_W_oxyeRf3vVezVqZMXptQ061doCC7rA@mail.gmail.com>
	<CAExJxTPOoXmDgxGCDgG-JigdwVNhoyM47UEALABzCUA+61htkw@mail.gmail.com>
Message-ID: <51138109.60006@gmail.com>

Op 07-02-13 10:09, Sunil Tech schreef:
> Thank you Wesley, Kal & tutor
In the future, the Python interpreter comes in handy for quick checks.

 >>> def spam():
...   pass
...
 >>> s = spam()
 >>> s, repr(s), type(s)
(None, 'None', <type 'NoneType'>)

Timo

>
>
> On Thu, Feb 7, 2013 at 12:07 PM, Kal Sze <swordangel at gmail.com 
> <mailto:swordangel at gmail.com>> wrote:
>
>     Dear Sunil,
>
>     No method or function in Python has a *static* return type. That's
>     because Python is by nature a dynamic language, with duck typing and
>     dynamic dispatch. In fact, any method or function may well return any
>     of a number of different types:
>
>         def crazy_function(return_int)
>             if return_int:
>                 return 1
>             else:
>                 return 'foo'
>
>     It's probably bad design, but there is nothing in the Python grammar
>     and semantics that stops you from doing that.
>
>     So your question is better phrased as: if I don't explicitly return
>     anything, what is returned?
>
>     The answer to that would be: the None object
>
>     Cheers,
>     Kal
>
>     On 7 February 2013 14:09, Sunil Tech <sunil.techspk at gmail.com
>     <mailto:sunil.techspk at gmail.com>> wrote:
>     > If a method has no return type?
>     > what will it return?
>     >
>     > _______________________________________________
>     > Tutor maillist  - Tutor at python.org <mailto:Tutor at python.org>
>     > To unsubscribe or change subscription options:
>     > http://mail.python.org/mailman/listinfo/tutor
>     >
>
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor


From Yogesh.M.Pai at tektronix.com  Fri Feb  8 10:06:11 2013
From: Yogesh.M.Pai at tektronix.com (Pai, Yogesh M)
Date: Fri, 8 Feb 2013 09:06:11 +0000
Subject: [Tutor] How to log process handles and GDI objects in python
Message-ID: <F16FCEF86785004BBACC4CAB01973C38011830A9@US-BV-EXM01-P.global.tektronix.net>

Hi,

I would like to know how can I log system process handles and GDI objects for debugging memory leak issues in python.
I would like to log these inside a loop (stress test) to check if my application leaks handles and plot them later for my usage.
Can you suggest any built in libraries that can help in this task?

Thanks,
ypai
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130208/ddbea793/attachment.html>

From alan.gauld at btinternet.com  Fri Feb  8 12:31:59 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Fri, 08 Feb 2013 11:31:59 +0000
Subject: [Tutor] How to log process handles and GDI objects in python
In-Reply-To: <F16FCEF86785004BBACC4CAB01973C38011830A9@US-BV-EXM01-P.global.tektronix.net>
References: <F16FCEF86785004BBACC4CAB01973C38011830A9@US-BV-EXM01-P.global.tektronix.net>
Message-ID: <kf2nnd$5j2$1@ger.gmane.org>

On 08/02/13 09:06, Pai, Yogesh M wrote:

> I would like to know how can I log system process handles and GDI
> objects for debugging memory leak issues in python.

This isn't really a question about learning Python so probably would be 
better on the main Python mailing list.

However it will help if you specify things like the OS, the Python 
version. Also be clear about what exactly you mean by process handles 
and GDI objects. I'm guessing you are talking about Windows but I can't 
be sure.

> I would like to log these inside a loop (stress test) to check if my
> application leaks handles and plot them later for my usage.

I imagine that means you are creating a test lop that creates and 
releases these handles? How do you get a handle? can you store it as a 
variable? can you print it? can you create a string and print that?

Sorry I can't be of more help but that's a fairly open question
about a very specific problem.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From jf_byrnes at comcast.net  Sat Feb  9 03:02:59 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Fri, 08 Feb 2013 20:02:59 -0600
Subject: [Tutor] Which pip for Ubuntu 12.04
Message-ID: <kf4aog$dv9$1@ger.gmane.org>

How important is it to have the latest pip installed?

Initially I want to use it to install the latest pymongo driver for 
mongoDB.  The pip version in the Ubuntu 12.04 repositories is 1.0.1. I 
see on http://www.pip-installer.org/en/latest/ the version is 1.2.1.

It certainly would be easier to install from the repositories but will 
that version work to install the latest python packages?

Thanks,  Jim


From neubyr at gmail.com  Sat Feb  9 08:01:37 2013
From: neubyr at gmail.com (neubyr)
Date: Sat, 9 Feb 2013 01:01:37 -0600
Subject: [Tutor] classes : post-declaration attributes
Message-ID: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>

I am learning Python 2.7 classes and objects. It seems like attributes
(data attributes and methods) can be added to a class/object  even after
it's first declaration. For example,

<code>
class A(object):
  def __init__(self,arg):
    self.val1 = arg

a = A(1)
print a.val1
</code>

Now another data attribute val2 can be added as:
<code>
a.val2 =  2
A.val2 = 22
</code>

I understand that all attributes are stored in a dictionary, but I am not
following when adding an attribute after initial declaration approach
should be used. The official documentation also suggests that valid
attributes are all the names present when the class object was created [1].
So does it mean post-declaration attributes are invalid? Why are they
allowed to be created then (any special use cases/examples)?

1. http://docs.python.org/2/tutorial/classes.html

--
thanks,
N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130209/ff906eab/attachment.html>

From msirenef at lightbird.net  Sat Feb  9 08:22:33 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Sat, 09 Feb 2013 02:22:33 -0500
Subject: [Tutor] classes : post-declaration attributes
In-Reply-To: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
References: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
Message-ID: <5115F939.2030008@lightbird.net>

On 02/09/2013 02:01 AM, neubyr wrote:
>
 > I am learning Python 2.7 classes and objects. It seems like 
attributes (data attributes and methods) can be added to a class/object 
even after it's first declaration. For example,
 >
 > <code>
 > class A(object):
 > def __init__(self,arg):
 > self.val1 = arg
 >
 > a = A(1)
 > print a.val1
 > </code>
 >
 > Now another data attribute val2 can be added as:
 > <code>
 > a.val2 = 2
 > A.val2 = 22
 > </code>
 >
 > I understand that all attributes are stored in a dictionary, but I am 
not following when adding an attribute after initial declaration 
approach should be used. The official documentation also suggests that 
valid attributes are all the names present when the class object was 
created [1]. So does it mean post-declaration attributes are invalid? 
Why are they allowed to be created then (any special use cases/examples)?
 >
 > 1. http://docs.python.org/2/tutorial/classes.html
 >
 > --
 > thanks,
 > N
 >

What is meant there is that without any additional assignments, those
attributes will be valid, I think.

You can assign attributes at a later time if they don't exist at the
time class is defined, or even if it's just more convenient for your
needs. E.g. you can simply store some values in instance attributes at
various points in your program.

  -m


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

Fanaticism consists of redoubling your effort when you have forgotten your
aim.  George Santayana


From steve at pearwood.info  Sat Feb  9 08:41:53 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 09 Feb 2013 18:41:53 +1100
Subject: [Tutor] classes : post-declaration attributes
In-Reply-To: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
References: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
Message-ID: <5115FDC1.5090200@pearwood.info>

On 09/02/13 18:01, neubyr wrote:

> I understand that all attributes are stored in a dictionary, but I am not
> following when adding an attribute after initial declaration approach
> should be used. The official documentation also suggests that valid
> attributes are all the names present when the class object was created [1].
> So does it mean post-declaration attributes are invalid? Why are they
> allowed to be created then (any special use cases/examples)?
>
> 1. http://docs.python.org/2/tutorial/classes.html

No, they are not invalid, merely unusual.

Normally you will create all the instance attributes you expect when you
initialise the instance:

class MyClass:
     def __init__(self, spam, ham):
         self.spam = spam
         self.ham = ham


That simply makes it easier to program the class -- you don't have to worry
about coding for the case that instance.spam doesn't exist yet, because it
will be set when the instance is created.

But sometimes you might want to add an extra, optional, attribute to an
instance after it is already initialised:

instance.eggs = 12

or delete an attribute:

del instance.ham  # No ham for you!


It's your class, you can do whatever you like to it, but it's your
responsibility if you break it.


However, note that built-in types like int, str, list etc. do *not*
allow this dynamic adding and deleting of attributes. Most builtins
don't have a __dict__, in order to be as small as possible. One of
the exceptions are functions, and I sometimes add attributes to
functions:

def spam(n):
     return "spam"*n

spam.surprise = 'NOBODY expects the Spanish Inquisition!'


Obviously that's a toy example, but I have done it in real code a
few times.


-- 
Steven

From alan.gauld at btinternet.com  Sat Feb  9 10:24:47 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 09 Feb 2013 09:24:47 +0000
Subject: [Tutor] classes : post-declaration attributes
In-Reply-To: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
References: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
Message-ID: <kf54kt$vh$1@ger.gmane.org>

On 09/02/13 07:01, neubyr wrote:
>
> I am learning Python 2.7 classes and objects. It seems like attributes
> (data attributes and methods) can be added to a class/object  even after
> it's first declaration. For example,

You can do that, but mostly you shouldn't.

Usually when classes/objects are used like that its where the object is 
just being used as a data container rather than a true object (with 
behaviour and supporting data). Often a straight dictionary is a better 
option.

Python allows us lots of freedom in how we use it with many unusual 
features. Not all of those things are advisable to use in day to day 
programming. But very occasionally you find a case where they help.
In general, beginners should avoid them.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From fomcl at yahoo.com  Sat Feb  9 12:46:14 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Sat, 9 Feb 2013 03:46:14 -0800 (PST)
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <kf4aog$dv9$1@ger.gmane.org>
References: <kf4aog$dv9$1@ger.gmane.org>
Message-ID: <1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>

----- Original Message -----

> From: Jim Byrnes <jf_byrnes at comcast.net>
> To: tutor at python.org
> Cc: 
> Sent: Saturday, February 9, 2013 3:02 AM
> Subject: [Tutor] Which pip for Ubuntu 12.04
> 
> How important is it to have the latest pip installed?
> 
> Initially I want to use it to install the latest pymongo driver for mongoDB.? 
> The pip version in the Ubuntu 12.04 repositories is 1.0.1. I see on 
> http://www.pip-installer.org/en/latest/ the version is 1.2.1.
> 
> It certainly would be easier to install from the repositories but will that 
> version work to install the latest python packages?
> 
> Thanks,? Jim

You could just try it? And downloading it and then doing sudo tar -xvr pip.tar.gz, cd ..., sudo python setup.py isn't that hard, is it?

But you're right, I also nnoticed that the Canonical repositories are a little outdated sometimes. Would be nice if it's possible to add pypi.org, so updating would be easier.

Albert-Jan


From fomcl at yahoo.com  Sat Feb  9 12:47:00 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Sat, 9 Feb 2013 03:47:00 -0800 (PST)
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <kf4aog$dv9$1@ger.gmane.org>
References: <kf4aog$dv9$1@ger.gmane.org>
Message-ID: <1360410420.21795.YahooMailNeo@web163805.mail.gq1.yahoo.com>

> How important is it to have the latest pip installed?

> 
> Initially I want to use it to install the latest pymongo driver for mongoDB.? 
> The pip version in the Ubuntu 12.04 repositories is 1.0.1. I see on 
> http://www.pip-installer.org/en/latest/ the version is 1.2.1.
> 
> It certainly would be easier to install from the repositories but will that 
> version work to install the latest python packages?
> 
> Thanks,? Jim

(sorry, tar -xvf .... me and my big fingers ;-))


From ghasemmg01 at leedslearning.net  Sat Feb  9 20:04:58 2013
From: ghasemmg01 at leedslearning.net (Ghadir Ghasemi)
Date: Sat, 9 Feb 2013 19:04:58 +0000
Subject: [Tutor] python help!
Message-ID: <010FB2F3C55002408EE1404538D1B6AE030D8379478E@LLN-SPP-ES-04.user01.lln.local>

Hi guys can you tell me what is wrong with the second part of this code(elif choice == '2'). When I type something other than 0-255, it correctly asks again for an input but when I enter a number from 0-255 it does nothing :

def show_menu():
 print("=======================")
 print("1-binary to denary")
 print("2-denary to binary")
 print("3-exit")
 print("=======================")


while True:
    show_menu()

    choice = input("please enter an option: ")

    if choice == '1':
        binary = input("Please enter a binary number: ")
        denary = 0
        place_value = 1

        for i in binary [::-1]:
                    denary += place_value * int(i)
                    place_value *= 2

        print("The result is",denary)
   

    elif choice == '2':
         denary2 = int(input("Please enter a denary number: "))
         remainder = ''
         while denary2 not in range(0,256):
             denary2 = int(input("Please enter a denary number: "))
             continue
         while denary2 in range(0,256):
             
            remainder = str(denary2 % 2) + remainder
            denary2 >>= 1
         print("The result is",remainder)
        
   
 

    elif choice == '3':
     break


    elif choice not in '1' or '2' or '3':
        print("Invalid input-try again!")

From __peter__ at web.de  Sat Feb  9 20:20:31 2013
From: __peter__ at web.de (Peter Otten)
Date: Sat, 09 Feb 2013 20:20:31 +0100
Subject: [Tutor] python help!
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478E@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <kf67h6$rti$1@ger.gmane.org>

Ghadir Ghasemi wrote:

> Hi guys can you tell me what is wrong with the second part of this
> code(elif choice == '2'). When I type something other than 0-255, it
> correctly asks again for an input but when I enter a number from 0-255 it
> does nothing :

It doesn't do nothing, it keeps running the while loop. Add a print() call

>     elif choice == '2':
>          denary2 = int(input("Please enter a denary number: "))
>          remainder = ''
>          while denary2 not in range(0,256):
>              denary2 = int(input("Please enter a denary number: "))
>              continue
>          while denary2 in range(0,256):

              print("XXX denary2 =",  denary2)
              
>             remainder = str(denary2 % 2) + remainder
>             denary2 >>= 1
>          print("The result is",remainder)

to see what's happening.



From neubyr at gmail.com  Sat Feb  9 21:04:25 2013
From: neubyr at gmail.com (neubyr)
Date: Sat, 9 Feb 2013 14:04:25 -0600
Subject: [Tutor] classes : post-declaration attributes
In-Reply-To: <kf54kt$vh$1@ger.gmane.org>
References: <CALFxCvyaX17E81siT-ixqVBE1JgYjBtrpr12=4ZVO9poXaLDDg@mail.gmail.com>
	<kf54kt$vh$1@ger.gmane.org>
Message-ID: <CALFxCvy2L0P4gf_0nubJ-=CstQug8UMwLr8tUqW7Hqwwd=6AKQ@mail.gmail.com>

On Sat, Feb 9, 2013 at 3:24 AM, Alan Gauld <alan.gauld at btinternet.com>wrote:

> On 09/02/13 07:01, neubyr wrote:
>
>>
>> I am learning Python 2.7 classes and objects. It seems like attributes
>> (data attributes and methods) can be added to a class/object  even after
>> it's first declaration. For example,
>>
>
> You can do that, but mostly you shouldn't.
>
> Usually when classes/objects are used like that its where the object is
> just being used as a data container rather than a true object (with
> behaviour and supporting data). Often a straight dictionary is a better
> option.
>
> Python allows us lots of freedom in how we use it with many unusual
> features. Not all of those things are advisable to use in day to day
> programming. But very occasionally you find a case where they help.
> In general, beginners should avoid them.
>
>
>

Thanks for the reply Alan, Steven and Mitya. That's helpful.

--
N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130209/8df41fdd/attachment.html>

From mannkann5 at gmail.com  Sun Feb 10 02:00:32 2013
From: mannkann5 at gmail.com (mann kann)
Date: Sat, 9 Feb 2013 20:00:32 -0500
Subject: [Tutor] Code to open a website
Message-ID: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>

Dear Jedi,

I wrote my first program but it doesn't open a website as I intended it to.
Please correct my mistake.

Sincerely,
Mann



def a():
    import urllib.request
    url = "http://www.google.com"
    response = urllib.request.urlopen(url)

g = input("Please enter y or n to go to youtube : ")
if g == "y":
    print("Opening the website")
    a()
else:
    print("kein website")
    exit()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130209/73fedcd3/attachment-0001.html>

From wayne at waynewerner.com  Sun Feb 10 02:17:23 2013
From: wayne at waynewerner.com (Wayne Werner)
Date: Sat, 9 Feb 2013 19:17:23 -0600 (CST)
Subject: [Tutor] Code to open a website
In-Reply-To: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
Message-ID: <alpine.DEB.2.02.1302091914090.13745@gilgamesh>

On Sat, 9 Feb 2013, mann kann wrote:

> Dear Jedi,?
> I wrote my first program but it doesn't open a website as I intended it to.
> Please correct my mistake.?
> 
> Sincerely,?
> Mann

You'll actually want the webbrowser module, which will open the links in 
your web browser - at least if you want to load sites like YouTube.

HTH,
Wayne

From mannkann5 at gmail.com  Sun Feb 10 02:25:35 2013
From: mannkann5 at gmail.com (mann kann)
Date: Sat, 9 Feb 2013 20:25:35 -0500
Subject: [Tutor] Code to open a website
In-Reply-To: <alpine.DEB.2.02.1302091914090.13745@gilgamesh>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<alpine.DEB.2.02.1302091914090.13745@gilgamesh>
Message-ID: <CABQJB+C2+bncb917Z24xy4bSwqZuc+fCpvO_3vVLLw0p-PGPqQ@mail.gmail.com>

I used webbrowser and it worked via terminal, but the same code returns
AttrituteError: 'module' object has no attribute 'open' in komodo edit.
suggestions? here's the code:

import webbrowser
webbrowser.open("http://youtube.com")



On Sat, Feb 9, 2013 at 8:17 PM, Wayne Werner <wayne at waynewerner.com> wrote:

> On Sat, 9 Feb 2013, mann kann wrote:
>
>  Dear Jedi,
>> I wrote my first program but it doesn't open a website as I intended it
>> to.
>> Please correct my mistake.
>>
>> Sincerely,
>> Mann
>>
>
> You'll actually want the webbrowser module, which will open the links in
> your web browser - at least if you want to load sites like YouTube.
>
> HTH,
> Wayne
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130209/bc9e3991/attachment.html>

From alan.gauld at btinternet.com  Sun Feb 10 02:33:35 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sun, 10 Feb 2013 01:33:35 +0000
Subject: [Tutor] Code to open a website
In-Reply-To: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
Message-ID: <kf6tdc$bgm$1@ger.gmane.org>

On 10/02/13 01:00, mann kann wrote:
> Dear Jedi,
>
> I wrote my first program but it doesn't open a website as I intended it
> to. Please correct my mistake.

Well, how did you intend it to?
It looks like it probably does open the web site, but it will be hard to 
tell since you do nothing with the result.


> def a():

Please use meaningful names.
openURL() or similar would be a useful choice here.


>      import urllib.request
>      url = "http://www.google.com"
>      response = urllib.request.urlopen(url)

Here you open the url and store the response. But then the function ends 
and it gets thrown away and the site is closed again.


> g = input("Please enter y or n to go to youtube : ")

You aren't going to YouTube yet, only Google but I assume YouTube is the 
intended eventual target?

Again g is not a very meaningful name. 'choice' or similar
would be more helpful.

> if g == "y":
>      print("Opening the website")
>      a()

Here you call you function but again all the action inside is just lost.


> else:
>      print("kein website")
>      exit()

Where does exit() come from? Usually its from sys but you
don't import from sys anywhere...

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From dvnsarma at gmail.com  Sun Feb 10 02:36:14 2013
From: dvnsarma at gmail.com (=?UTF-8?B?RC5WLk4uU2FybWEg4LCh4LC/LuCwteCwvy7gsI7gsKjgsY0u4LC24LCw4LGN4LCu?=)
Date: Sun, 10 Feb 2013 07:06:14 +0530
Subject: [Tutor] python help!
In-Reply-To: <kf67h6$rti$1@ger.gmane.org>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478E@LLN-SPP-ES-04.user01.lln.local>
	<kf67h6$rti$1@ger.gmane.org>
Message-ID: <CAOZcEcdS6p+Q85GOOrweCmoZWi+L0D4vnnmCu5QJfMRvsWncNw@mail.gmail.com>

I have altered the program to run on Python 2.7.3
Perhaps it will run on Python 3 with small/or no alterations.

def show_menu():
 print("=======================")
 print("1-binary to denary")
 print("2-denary to binary")
 print("3-exit")
 print("=======================")


while True:
    show_menu()

    choice = raw_input("please enter an option: ")

    if choice == '1':
        binary = raw_input("Please enter a binary number: ")
        denary = 0
        place_value = 1

        for i in binary [::-1]:
                    denary += place_value * int(i)
                    place_value *= 2

        print("The result is",denary)


    elif choice == '2':
         denary2 = int(raw_input("Please enter a denary number: "))
         remainder = ''
         if denary2 not in range(0,256):
             denary2 = int(input("Please enter a denary number: "))
             continue
         while denary2 > 0:
            remainder = str(denary2 % 2) + remainder
            denary2 /= 2
         print("The result is",remainder)




    elif choice == '3': break


    elif choice == '1' or choice == '2' or choice == '3':
        print("Invalid input-try again!")



On Sun, Feb 10, 2013 at 12:50 AM, Peter Otten <__peter__ at web.de> wrote:

> Ghadir Ghasemi wrote:
>
> > Hi guys can you tell me what is wrong with the second part of this
> > code(elif choice == '2'). When I type something other than 0-255, it
> > correctly asks again for an input but when I enter a number from 0-255 it
> > does nothing :
>
> It doesn't do nothing, it keeps running the while loop. Add a print() call
>
> >     elif choice == '2':
> >          denary2 = int(input("Please enter a denary number: "))
> >          remainder = ''
> >          while denary2 not in range(0,256):
> >              denary2 = int(input("Please enter a denary number: "))
> >              continue
> >          while denary2 in range(0,256):
>
>               print("XXX denary2 =",  denary2)
>
> >             remainder = str(denary2 % 2) + remainder
> >             denary2 >>= 1
> >          print("The result is",remainder)
>
> to see what's happening.
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>



-- 
regards,
Sarma.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/a2df11fc/attachment.html>

From dvnsarma at gmail.com  Sun Feb 10 02:47:24 2013
From: dvnsarma at gmail.com (=?UTF-8?B?RC5WLk4uU2FybWEg4LCh4LC/LuCwteCwvy7gsI7gsKjgsY0u4LC24LCw4LGN4LCu?=)
Date: Sun, 10 Feb 2013 07:17:24 +0530
Subject: [Tutor] python help!
In-Reply-To: <CAOZcEcdS6p+Q85GOOrweCmoZWi+L0D4vnnmCu5QJfMRvsWncNw@mail.gmail.com>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478E@LLN-SPP-ES-04.user01.lln.local>
	<kf67h6$rti$1@ger.gmane.org>
	<CAOZcEcdS6p+Q85GOOrweCmoZWi+L0D4vnnmCu5QJfMRvsWncNw@mail.gmail.com>
Message-ID: <CAOZcEce24EH53w7AWYX81HALeDFAtSBOHSnvhy6gN1bXiOqY6w@mail.gmail.com>

Remove also 'continue' statement under the 'if denary2 not in
range(0,256)' clause.


On Sun, Feb 10, 2013 at 7:06 AM, D.V.N.Sarma ??.??.???.???? <
dvnsarma at gmail.com> wrote:

> I have altered the program to run on Python 2.7.3
> Perhaps it will run on Python 3 with small/or no alterations.
>
> def show_menu():
>  print("=======================")
>  print("1-binary to denary")
>  print("2-denary to binary")
>  print("3-exit")
>  print("=======================")
>
>
> while True:
>     show_menu()
>
>     choice = raw_input("please enter an option: ")
>
>     if choice == '1':
>         binary = raw_input("Please enter a binary number: ")
>         denary = 0
>         place_value = 1
>
>         for i in binary [::-1]:
>                     denary += place_value * int(i)
>                     place_value *= 2
>
>         print("The result is",denary)
>
>
>     elif choice == '2':
>          denary2 = int(raw_input("Please enter a denary number: "))
>          remainder = ''
>          if denary2 not in range(0,256):
>              denary2 = int(input("Please enter a denary number: "))
>              continue
>          while denary2 > 0:
>             remainder = str(denary2 % 2) + remainder
>             denary2 /= 2
>          print("The result is",remainder)
>
>
>
>
>     elif choice == '3': break
>
>
>     elif choice == '1' or choice == '2' or choice == '3':
>         print("Invalid input-try again!")
>
>
>
> On Sun, Feb 10, 2013 at 12:50 AM, Peter Otten <__peter__ at web.de> wrote:
>
>> Ghadir Ghasemi wrote:
>>
>> > Hi guys can you tell me what is wrong with the second part of this
>> > code(elif choice == '2'). When I type something other than 0-255, it
>> > correctly asks again for an input but when I enter a number from 0-255
>> it
>> > does nothing :
>>
>> It doesn't do nothing, it keeps running the while loop. Add a print() call
>>
>> >     elif choice == '2':
>> >          denary2 = int(input("Please enter a denary number: "))
>> >          remainder = ''
>> >          while denary2 not in range(0,256):
>> >              denary2 = int(input("Please enter a denary number: "))
>> >              continue
>> >          while denary2 in range(0,256):
>>
>>               print("XXX denary2 =",  denary2)
>>
>> >             remainder = str(denary2 % 2) + remainder
>> >             denary2 >>= 1
>> >          print("The result is",remainder)
>>
>> to see what's happening.
>>
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>>
>
>
>
> --
> regards,
> Sarma.
>



-- 
regards,
Sarma.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/00fff649/attachment-0001.html>

From eryksun at gmail.com  Sun Feb 10 04:40:06 2013
From: eryksun at gmail.com (eryksun)
Date: Sat, 9 Feb 2013 22:40:06 -0500
Subject: [Tutor] Code to open a website
In-Reply-To: <kf6tdc$bgm$1@ger.gmane.org>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
Message-ID: <CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>

On Sat, Feb 9, 2013 at 8:33 PM, Alan Gauld <alan.gauld at btinternet.com> wrote:
>
> Where does exit() come from? Usually its from sys but you
> don't import from sys anywhere...

site.py adds the exit/quit Quitter instances to builtins (2.x
__builtin__). When called they raise SystemExit, like sys.exit does.
Since you can bypass importing site.py with the -S flag, it's better
to use sys.exit.

From dyoo at hashcollision.org  Sun Feb 10 05:55:41 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Sat, 9 Feb 2013 21:55:41 -0700
Subject: [Tutor] Code to open a website
In-Reply-To: <CABQJB+C2+bncb917Z24xy4bSwqZuc+fCpvO_3vVLLw0p-PGPqQ@mail.gmail.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<alpine.DEB.2.02.1302091914090.13745@gilgamesh>
	<CABQJB+C2+bncb917Z24xy4bSwqZuc+fCpvO_3vVLLw0p-PGPqQ@mail.gmail.com>
Message-ID: <CAGZAPF7FveN=cofs8WQkQH2QyLXwZz1HiYoN=SvAakYuNwHCGA@mail.gmail.com>

On Sat, Feb 9, 2013 at 6:25 PM, mann kann <mannkann5 at gmail.com> wrote:
> I used webbrowser and it worked via terminal, but the same code returns
> AttrituteError: 'module' object has no attribute 'open' in komodo edit.
> suggestions? here's the code:
>
> import webbrowser
> webbrowser.open("http://youtube.com")


What's the file name of your program, just out of curiosity?

From mannkann5 at gmail.com  Sun Feb 10 06:32:35 2013
From: mannkann5 at gmail.com (mann kann)
Date: Sun, 10 Feb 2013 00:32:35 -0500
Subject: [Tutor] Code to open a website
In-Reply-To: <CAGZAPF7FveN=cofs8WQkQH2QyLXwZz1HiYoN=SvAakYuNwHCGA@mail.gmail.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<alpine.DEB.2.02.1302091914090.13745@gilgamesh>
	<CABQJB+C2+bncb917Z24xy4bSwqZuc+fCpvO_3vVLLw0p-PGPqQ@mail.gmail.com>
	<CAGZAPF7FveN=cofs8WQkQH2QyLXwZz1HiYoN=SvAakYuNwHCGA@mail.gmail.com>
Message-ID: <CABQJB+CRUKt7D-5C0b9HE-bpUastKtcdadjzuQNgvBn2U5daEA@mail.gmail.com>

oh wow, I foolishly named it webbrowser.py earlier.
Thanks for the witty hint, Danny :)


On Sat, Feb 9, 2013 at 11:55 PM, Danny Yoo <dyoo at hashcollision.org> wrote:

> On Sat, Feb 9, 2013 at 6:25 PM, mann kann <mannkann5 at gmail.com> wrote:
> > I used webbrowser and it worked via terminal, but the same code returns
> > AttrituteError: 'module' object has no attribute 'open' in komodo edit.
> > suggestions? here's the code:
> >
> > import webbrowser
> > webbrowser.open("http://youtube.com")
>
>
> What's the file name of your program, just out of curiosity?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/e7bca9d8/attachment.html>

From alan.gauld at btinternet.com  Sun Feb 10 09:39:25 2013
From: alan.gauld at btinternet.com (ALAN GAULD)
Date: Sun, 10 Feb 2013 08:39:25 +0000 (GMT)
Subject: [Tutor] Code to open a website
In-Reply-To: <CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
Message-ID: <1360485565.67804.YahooMailNeo@web186006.mail.ir2.yahoo.com>


>site.py adds the exit/quit Quitter instances to builtins (2.x
>__builtin__). When called they raise SystemExit, like sys.exit does.


So it does. You learn something new every day...
When did that first happen? It was one of my biggest frustrations?
with Python when I first started learning, that you couldn't call exit
without first importing sys (v1.3). But I never noticed that changing?
till now.


Alan G

From fomcl at yahoo.com  Sun Feb 10 10:17:10 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Sun, 10 Feb 2013 01:17:10 -0800 (PST)
Subject: [Tutor] Code to open a website
In-Reply-To: <CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
Message-ID: <1360487830.28294.YahooMailNeo@web163803.mail.gq1.yahoo.com>



> On Sat, Feb 9, 2013 at 8:33 PM, Alan Gauld <alan.gauld at btinternet.com> 

> wrote:
>> 
>>  Where does exit() come from? Usually its from sys but you
>>  don't import from sys anywhere...
> 
> site.py adds the exit/quit Quitter instances to builtins (2.x
> __builtin__). When called they raise SystemExit, like sys.exit does.
> Since you can bypass importing site.py with the -S flag, it's better
> to use sys.exit.

Maybe the OP meant to say 'quit()' ? That does not require an import.


From alan.gauld at btinternet.com  Sun Feb 10 10:25:35 2013
From: alan.gauld at btinternet.com (ALAN GAULD)
Date: Sun, 10 Feb 2013 09:25:35 +0000 (GMT)
Subject: [Tutor] Code to open a website
In-Reply-To: <1360487830.28294.YahooMailNeo@web163803.mail.gq1.yahoo.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
	<1360487830.28294.YahooMailNeo@web163803.mail.gq1.yahoo.com>
Message-ID: <1360488335.4141.YahooMailNeo@web186005.mail.ir2.yahoo.com>



> Maybe the OP meant to say 'quit()' ? That does not require an import.


Ooh! another option I didn't know about!
So many ways to get rid of Python and here's me been importing sys?
or raising SystemExit all these years... :-)

Alan G.

From __peter__ at web.de  Sun Feb 10 10:35:01 2013
From: __peter__ at web.de (Peter Otten)
Date: Sun, 10 Feb 2013 10:35:01 +0100
Subject: [Tutor] Code to open a website
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
	<1360487830.28294.YahooMailNeo@web163803.mail.gq1.yahoo.com>
	<1360488335.4141.YahooMailNeo@web186005.mail.ir2.yahoo.com>
Message-ID: <kf7pja$9oe$1@ger.gmane.org>

ALAN GAULD wrote:

>> Maybe the OP meant to say 'quit()' ? That does not require an import.
> 
> 
> Ooh! another option I didn't know about!
> So many ways to get rid of Python and here's me been importing sys
> or raising SystemExit all these years... :-)

I tend to use none of these and my scripts still terminate ;)


From eryksun at gmail.com  Sun Feb 10 10:30:30 2013
From: eryksun at gmail.com (eryksun)
Date: Sun, 10 Feb 2013 04:30:30 -0500
Subject: [Tutor] Code to open a website
In-Reply-To: <1360485565.67804.YahooMailNeo@web186006.mail.ir2.yahoo.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
	<1360485565.67804.YahooMailNeo@web186006.mail.ir2.yahoo.com>
Message-ID: <CACL+1atn7Zp6Gpd-Ax5m__+7Zp-7NrTOEwq9bK2KWW8viMxMqA@mail.gmail.com>

On Sun, Feb 10, 2013 at 3:39 AM, ALAN GAULD <alan.gauld at btinternet.com> wrote:
> So it does. You learn something new every day...
> When did that first happen? It was one of my biggest frustrations
> with Python when I first started learning, that you couldn't call exit
> without first importing sys (v1.3). But I never noticed that changing
> till now.

Quitter was added to site.py in 2.5:

http://hg.python.org/cpython/file/c10a71cf16e4/Lib/site.py#l227

In 2.4, exit/quit were simply strings:

http://hg.python.org/cpython/file/f3f1f1462c82/Lib/site.py#l224

From wprins at gmail.com  Sun Feb 10 15:32:28 2013
From: wprins at gmail.com (Walter Prins)
Date: Sun, 10 Feb 2013 14:32:28 +0000
Subject: [Tutor] How to override getting items from a list for iteration
Message-ID: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>

Hello,

I have a program where I'm overriding the retrieval of items from a list.
 As background: The data held by the lists are calculated but then read
potentially many times thereafter, so in order to prevent needless
re-calculating the same value over and over, and to remove checking/caching
code from the calculation logic code, I therefore created a subclass of
list that will automatically calculate the value in a given slot
automatically if not yet calculated. (So differently put, I'm implemented a
kind of list specific caching/memoization with the intent that it should be
transparent to the client code.)

The way I've implemented this so far was to simply override
list.__getitem__(self, key) to check if the value needs to be calculated or
not and call a calculation method if required, after which the value is
returned as normal.  On subsequent calls __getitem__ then directly returns
the value without calculating it again.

This worked mostly fine, however yesterday I ran into a slightly unexpected
problem when I found that when the list contents is iterated over and
values retrieved that way rather than via [], then __getitem__ is in fact
*not* called on the list to read the item values from the list, and
consequently I get back the "not yet calculated" entries in the list,
without the calculation routine being automatically called as is intended.

Here's a test application that demonstrates the issue:

class NotYetCalculated:
    pass

class CalcList(list):
    def __init__(self, calcitem):
        super(CalcList, self).__init__()
        self.calcitem = calcitem

    def __getitem__(self, key):
        """Override __getitem__ to call self.calcitem() if needed"""
        print "CalcList.__getitem__(): Enter"
        value = super(CalcList, self).__getitem__(key)
        if value is NotYetCalculated:
            print "CalcList.__getitem__(): calculating"
            value = self.calcitem(key)
            self[key] = value
        print "CalcList.__getitem__(): return"
        return value

def calcitem(key):
    # Demo: return square of index
    return key*key


def main():
    # Create a list that calculates its contents via a given
    # method/fn onece only
    l = CalcList(calcitem)
    # Extend with  few entries to demonstrate issue:
    l.extend([NotYetCalculated, NotYetCalculated, NotYetCalculated,
              NotYetCalculated])

    print "1) Directly getting values from list works as expected:
__getitem__ is called:"
    print "Retrieving value [2]:\n", l[2]
    print
    print "Retrieving value [3]:\n", l[3]
    print
    print "Retrieving value [2] again (no calculation this time):\n", l[2]
    print

    print "Retrieving values via an iterator doesn't work as expected:"
    print "(__getitem__ is not called and the code returns "
    print " NotYetCalcualted entries without calling __getitem__. How do I
fix this?)"
    print "List contents:"
    for x in l: print x


if __name__ == "__main__":
    main()

To reiterate:

What should happen:  In test 2) above all entries should be automatically
calculated and output should be numbers only.

What actually happens: In test 2) above the first 2 list entries
corresponding to list indexes 0 and 1 are output as "NotYetCalculated" and
calcitem is not called when required.

What's the best way to fix this problem?  Do I need to maybe override
another method, perhaps provide my own iterator implementation?  For that
matter, why doesn't iterating over the list contents fall back to calling
__getitem__?

Thanks in advance,

Walter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/aa5b8cbd/attachment.html>

From davea at davea.name  Sun Feb 10 16:10:24 2013
From: davea at davea.name (Dave Angel)
Date: Sun, 10 Feb 2013 10:10:24 -0500
Subject: [Tutor] How to override getting items from a list for iteration
In-Reply-To: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
References: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
Message-ID: <5117B860.4090905@davea.name>

On 02/10/2013 09:32 AM, Walter Prins wrote:
> Hello,
>
> I have a program where I'm overriding the retrieval of items from a list.
>   As background: The data held by the lists are calculated but then read
> potentially many times thereafter, so in order to prevent needless
> re-calculating the same value over and over, and to remove checking/caching
> code from the calculation logic code, I therefore created a subclass of
> list that will automatically calculate the value in a given slot
> automatically if not yet calculated. (So differently put, I'm implemented a
> kind of list specific caching/memoization with the intent that it should be
> transparent to the client code.)
>
> The way I've implemented this so far was to simply override
> list.__getitem__(self, key) to check if the value needs to be calculated or
> not and call a calculation method if required, after which the value is
> returned as normal.  On subsequent calls __getitem__ then directly returns
> the value without calculating it again.
>
> This worked mostly fine, however yesterday I ran into a slightly unexpected
> problem when I found that when the list contents is iterated over and
> values retrieved that way rather than via [], then __getitem__ is in fact
> *not* called on the list to read the item values from the list, and
> consequently I get back the "not yet calculated" entries in the list,
> without the calculation routine being automatically called as is intended.
>
> Here's a test application that demonstrates the issue:
>
> class NotYetCalculated:
>      pass
>
> class CalcList(list):
>      def __init__(self, calcitem):
>          super(CalcList, self).__init__()
>          self.calcitem = calcitem
>
>      def __getitem__(self, key):
>          """Override __getitem__ to call self.calcitem() if needed"""
>          print "CalcList.__getitem__(): Enter"
>          value = super(CalcList, self).__getitem__(key)
>          if value is NotYetCalculated:
>              print "CalcList.__getitem__(): calculating"
>              value = self.calcitem(key)
>              self[key] = value
>          print "CalcList.__getitem__(): return"
>          return value
>
> def calcitem(key):
>      # Demo: return square of index
>      return key*key
>
>
> def main():
>      # Create a list that calculates its contents via a given
>      # method/fn onece only
>      l = CalcList(calcitem)
>      # Extend with  few entries to demonstrate issue:
>      l.extend([NotYetCalculated, NotYetCalculated, NotYetCalculated,
>                NotYetCalculated])
>
>      print "1) Directly getting values from list works as expected:
> __getitem__ is called:"
>      print "Retrieving value [2]:\n", l[2]
>      print
>      print "Retrieving value [3]:\n", l[3]
>      print
>      print "Retrieving value [2] again (no calculation this time):\n", l[2]
>      print
>
>      print "Retrieving values via an iterator doesn't work as expected:"
>      print "(__getitem__ is not called and the code returns "
>      print " NotYetCalcualted entries without calling __getitem__. How do I
> fix this?)"
>      print "List contents:"
>      for x in l: print x
>
>
> if __name__ == "__main__":
>      main()
>
> To reiterate:
>
> What should happen:  In test 2) above all entries should be automatically
> calculated and output should be numbers only.
>
> What actually happens: In test 2) above the first 2 list entries
> corresponding to list indexes 0 and 1 are output as "NotYetCalculated" and
> calcitem is not called when required.
>
> What's the best way to fix this problem?  Do I need to maybe override
> another method, perhaps provide my own iterator implementation?  For that
> matter, why doesn't iterating over the list contents fall back to calling
> __getitem__?
>

Implement your own __iter__() special method.

And consider whether you might need __setitem__(), __len__(), 
__setslice__(), __getslice__() and others.

Maybe you'd be better off not inheriting from list at all, and just 
having an attribute that's a list.  It doesn't sound like you're 
defining a very big subset of list, and overriding the methods you 
*don't* want seems to be more work than just implementing the ones you do.

A separate question:  is this likely to be a sparse list?  If it's very 
sparse, perhaps you'd consider using a dict, rather than a list attribute.



-- 
DaveA

From steve at pearwood.info  Sun Feb 10 16:13:48 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Mon, 11 Feb 2013 02:13:48 +1100
Subject: [Tutor] How to override getting items from a list for iteration
In-Reply-To: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
References: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
Message-ID: <5117B92C.6010905@pearwood.info>

On 11/02/13 01:32, Walter Prins wrote:
> Hello,
>
> I have a program where I'm overriding the retrieval of items from a list.
>   As background:
[...snip interesting but irrelevant background...]

> Here's a test application that demonstrates the issue:
[...snip overly complicated application...]


Here is a much simpler demonstration:


py> class MyList(list):
...     def __getitem__(self, i):
...             print "Checking item %d" % i
...             return super(MyList, self).__getitem__(i)
...
py> x = MyList([2, 4, 8, 16])
py> x[3]
Checking item 3
16
py> for i in x:
...     print "got %s" % i
...
got 2
got 4
got 8
got 16



> What's the best way to fix this problem?  Do I need to maybe override
> another method, perhaps provide my own iterator implementation?


Pretty much. For lists, the __iter__ method returns a listiterator object
which efficiently iterates over the list items without calling __getitem__.

Try overriding your class' __iter__ method:

     def __iter__(self):
         for i in range(len(self)):  # use xrange in Python 2
             yield self[i]


(untested).


> For that
> matter, why doesn't iterating over the list contents fall back to calling
> __getitem__?


Probably as an optimization.



-- 
Steven

From __peter__ at web.de  Sun Feb 10 16:15:57 2013
From: __peter__ at web.de (Peter Otten)
Date: Sun, 10 Feb 2013 16:15:57 +0100
Subject: [Tutor] How to override getting items from a list for iteration
References: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
Message-ID: <kf8dih$8k3$1@ger.gmane.org>

Walter Prins wrote:

> Hello,
> 
> I have a program where I'm overriding the retrieval of items from a list.
>  As background: The data held by the lists are calculated but then read
> potentially many times thereafter, so in order to prevent needless
> re-calculating the same value over and over, and to remove
> checking/caching code from the calculation logic code, I therefore created
> a subclass of list that will automatically calculate the value in a given
> slot automatically if not yet calculated. (So differently put, I'm
> implemented a kind of list specific caching/memoization with the intent
> that it should be transparent to the client code.)
> 
> The way I've implemented this so far was to simply override
> list.__getitem__(self, key) to check if the value needs to be calculated
> or not and call a calculation method if required, after which the value is
> returned as normal.  On subsequent calls __getitem__ then directly returns
> the value without calculating it again.
> 
> This worked mostly fine, however yesterday I ran into a slightly
> unexpected problem when I found that when the list contents is iterated
> over and values retrieved that way rather than via [], then __getitem__ is
> in fact *not* called on the list to read the item values from the list,
> and consequently I get back the "not yet calculated" entries in the list,
> without the calculation routine being automatically called as is intended.
> 
> Here's a test application that demonstrates the issue:
> 
> class NotYetCalculated:
>     pass
> 
> class CalcList(list):
>     def __init__(self, calcitem):
>         super(CalcList, self).__init__()
>         self.calcitem = calcitem
> 
>     def __getitem__(self, key):
>         """Override __getitem__ to call self.calcitem() if needed"""
>         print "CalcList.__getitem__(): Enter"
>         value = super(CalcList, self).__getitem__(key)
>         if value is NotYetCalculated:
>             print "CalcList.__getitem__(): calculating"
>             value = self.calcitem(key)
>             self[key] = value
>         print "CalcList.__getitem__(): return"
>         return value
> 
> def calcitem(key):
>     # Demo: return square of index
>     return key*key
> 
> 
> def main():
>     # Create a list that calculates its contents via a given
>     # method/fn onece only
>     l = CalcList(calcitem)
>     # Extend with  few entries to demonstrate issue:
>     l.extend([NotYetCalculated, NotYetCalculated, NotYetCalculated,
>               NotYetCalculated])
> 
>     print "1) Directly getting values from list works as expected:
> __getitem__ is called:"
>     print "Retrieving value [2]:\n", l[2]
>     print
>     print "Retrieving value [3]:\n", l[3]
>     print
>     print "Retrieving value [2] again (no calculation this time):\n", l[2]
>     print
> 
>     print "Retrieving values via an iterator doesn't work as expected:"
>     print "(__getitem__ is not called and the code returns "
>     print " NotYetCalcualted entries without calling __getitem__. How do I
> fix this?)"
>     print "List contents:"
>     for x in l: print x
> 
> 
> if __name__ == "__main__":
>     main()
> 
> To reiterate:
> 
> What should happen:  In test 2) above all entries should be automatically
> calculated and output should be numbers only.
> 
> What actually happens: In test 2) above the first 2 list entries
> corresponding to list indexes 0 and 1 are output as "NotYetCalculated" and
> calcitem is not called when required.
> 
> What's the best way to fix this problem?  Do I need to maybe override
> another method, perhaps provide my own iterator implementation?  For that
> matter, why doesn't iterating over the list contents fall back to calling
> __getitem__?

Probably an optimisation for the common case where retrieval of list items 
does not involve any calculation.

You can override the __iter__() along the lines of

def __iter__(self):
    for i in range(len(self)):
        return self[i]

If the items are calculated from the index as in your example there's also 
the option to inherit from collections.Sequence instead of list:


from collections import Sequence

class List(Sequence):
    def __init__(self, getitem, size):
        self.getitem = getitem
        self._cache = [None] * size
    def __getitem__(self, index):
        assert not isinstance(index, (slice, tuple))
        value = self._cache[index]
        if value is None:
            value = self._cache[index] = self.getitem(index)
        return value
    def __len__(self):
        return len(self._cache)

if __name__ == "__main__":
    items = List(lambda x: x*x, 10)
    print("items[4] =", items[4])
    print("items =", list(items))

But first and foremost I'd seriously reinvestigate your caching scheme. Does 
it really save enough time to make it worthwhile?



From davea at davea.name  Sun Feb 10 16:18:22 2013
From: davea at davea.name (Dave Angel)
Date: Sun, 10 Feb 2013 10:18:22 -0500
Subject: [Tutor] How to override getting items from a list for iteration
In-Reply-To: <5117B860.4090905@davea.name>
References: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
	<5117B860.4090905@davea.name>
Message-ID: <5117BA3E.9020406@davea.name>

On 02/10/2013 10:10 AM, Dave Angel wrote:
> On 02/10/2013 09:32 AM, Walter Prins wrote:
>> Hello,
>>
>> I have a program where I'm overriding the retrieval of items from a list.
>>   As background: The data held by the lists are calculated but then read
>> potentially many times thereafter, so in order to prevent needless
>> re-calculating the same value over and over, and to remove
>> checking/caching
>> code from the calculation logic code, I therefore created a subclass of
>> list that will automatically calculate the value in a given slot
>> automatically if not yet calculated. (So differently put, I'm
>> implemented a
>> kind of list specific caching/memoization with the intent that it
>> should be
>> transparent to the client code.)
>>
>> The way I've implemented this so far was to simply override
>> list.__getitem__(self, key) to check if the value needs to be
>> calculated or
>> not and call a calculation method if required, after which the value is
>> returned as normal.  On subsequent calls __getitem__ then directly
>> returns
>> the value without calculating it again.
>>
>> This worked mostly fine, however yesterday I ran into a slightly
>> unexpected
>> problem when I found that when the list contents is iterated over and
>> values retrieved that way rather than via [], then __getitem__ is in fact
>> *not* called on the list to read the item values from the list, and
>> consequently I get back the "not yet calculated" entries in the list,
>> without the calculation routine being automatically called as is
>> intended.
>>
>> Here's a test application that demonstrates the issue:
>>
>> class NotYetCalculated:
>>      pass
>>
>> class CalcList(list):
>>      def __init__(self, calcitem):
>>          super(CalcList, self).__init__()
>>          self.calcitem = calcitem
>>
>>      def __getitem__(self, key):
>>          """Override __getitem__ to call self.calcitem() if needed"""
>>          print "CalcList.__getitem__(): Enter"
>>          value = super(CalcList, self).__getitem__(key)
>>          if value is NotYetCalculated:
>>              print "CalcList.__getitem__(): calculating"
>>              value = self.calcitem(key)
>>              self[key] = value
>>          print "CalcList.__getitem__(): return"
>>          return value
>>
>> def calcitem(key):
>>      # Demo: return square of index
>>      return key*key
>>
>>
>> def main():
>>      # Create a list that calculates its contents via a given
>>      # method/fn onece only
>>      l = CalcList(calcitem)
>>      # Extend with  few entries to demonstrate issue:
>>      l.extend([NotYetCalculated, NotYetCalculated, NotYetCalculated,
>>                NotYetCalculated])
>>
>>      print "1) Directly getting values from list works as expected:
>> __getitem__ is called:"
>>      print "Retrieving value [2]:\n", l[2]
>>      print
>>      print "Retrieving value [3]:\n", l[3]
>>      print
>>      print "Retrieving value [2] again (no calculation this time):\n",
>> l[2]
>>      print
>>
>>      print "Retrieving values via an iterator doesn't work as expected:"
>>      print "(__getitem__ is not called and the code returns "
>>      print " NotYetCalcualted entries without calling __getitem__. How
>> do I
>> fix this?)"
>>      print "List contents:"
>>      for x in l: print x
>>
>>
>> if __name__ == "__main__":
>>      main()
>>
>> To reiterate:
>>
>> What should happen:  In test 2) above all entries should be automatically
>> calculated and output should be numbers only.
>>
>> What actually happens: In test 2) above the first 2 list entries
>> corresponding to list indexes 0 and 1 are output as "NotYetCalculated"
>> and
>> calcitem is not called when required.
>>
>> What's the best way to fix this problem?  Do I need to maybe override
>> another method, perhaps provide my own iterator implementation?  For that
>> matter, why doesn't iterating over the list contents fall back to calling
>> __getitem__?
>>
>
> Implement your own __iter__() special method.
>
> And consider whether you might need __setitem__(), __len__(),
> __setslice__(), __getslice__() and others.
>
> Maybe you'd be better off not inheriting from list at all, and just
> having an attribute that's a list.  It doesn't sound like you're
> defining a very big subset of list, and overriding the methods you
> *don't* want seems to be more work than just implementing the ones you do.
>
> A separate question:  is this likely to be a sparse list?  If it's very
> sparse, perhaps you'd consider using a dict, rather than a list attribute.
>
>
>

BTW, the answer to why iterating over the list contents doesn't call 
__getitem__, the answer is because list does define __iter__, presumably 
to do it more efficiently.

And there is your clue that perhaps you don't want to inherit from list. 
  You don't want its more-efficient version, so all you have to do is 
not to implement an __iter__ and it should just work.


-- 
DaveA

From __peter__ at web.de  Sun Feb 10 16:25:27 2013
From: __peter__ at web.de (Peter Otten)
Date: Sun, 10 Feb 2013 16:25:27 +0100
Subject: [Tutor] How to override getting items from a list for iteration
References: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
	<kf8dih$8k3$1@ger.gmane.org>
Message-ID: <kf8e4a$c1u$1@ger.gmane.org>

Peter Otten wrote:

> def __iter__(self):
>     for i in range(len(self)):
>         return self[i]

That should of course be 'yield', not 'return' 



From jf_byrnes at comcast.net  Sun Feb 10 17:01:14 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Sun, 10 Feb 2013 10:01:14 -0600
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
Message-ID: <kf8g87$unb$1@ger.gmane.org>

On 02/09/2013 05:46 AM, Albert-Jan Roskam wrote:
> ----- Original Message -----
>
>> From: Jim Byrnes <jf_byrnes at comcast.net> To: tutor at python.org Cc:
>> Sent: Saturday, February 9, 2013 3:02 AM Subject: [Tutor] Which pip
>> for Ubuntu 12.04
>>
>> How important is it to have the latest pip installed?
>>
>> Initially I want to use it to install the latest pymongo driver for
>> mongoDB. The pip version in the Ubuntu 12.04 repositories is 1.0.1.
>> I see on http://www.pip-installer.org/en/latest/ the version is
>> 1.2.1.
>>
>> It certainly would be easier to install from the repositories but
>> will that version work to install the latest python packages?
>>
>> Thanks,  Jim
>
> You could just try it? And downloading it and then doing sudo tar
> -xvr pip.tar.gz, cd ..., sudo python setup.py isn't that hard, is
> it?

I usually install from the repositories or maybe a ppa so I don't 
believe I have ever done an install from a tar.  If necessary I will 
familiarize myself with the command you gave (yes I saw your followup 
changing -xvr to -xvf) and install that way.

However, I still wonder if using the outdated pip from the repository 
will allow me to install the latest python packages?  Will trying to use 
an outdated pip cause me problems?

> But you're right, I also nnoticed that the Canonical repositories are
> a little outdated sometimes. Would be nice if it's possible to add
> pypi.org, so updating would be easier.
>
> Albert-Jan


Thanks,  Jim


From David_J_Pearson at uk.ibm.com  Sun Feb 10 17:02:28 2013
From: David_J_Pearson at uk.ibm.com (David J Pearson)
Date: Sun, 10 Feb 2013 16:02:28 +0000
Subject: [Tutor] AUTO: David J Pearson Is Attending An IBM Redbook residency
	(returning 19/02/2013)
Message-ID: <OFACDAEF64.E357F32E-ON80257B0E.00581DD7-80257B0E.00581DD7@uk.ibm.com>


I am out of the office until 19/02/2013.

I am attending an IBM Redbook residency in Raleigh, NC, USA ... and have
limited access to my mail.

My response to your email will be delayed during this time.

Thanks

David J Pearson MBCS CITP CEng MIET
Technical Staff Member
Solution Architect [Mobile, SmartCloud & OfficeProductivity]
IBM Software Services for Collaboration CoE
IBM Collaboration Software,  IBM United Kingdom Ltd

Mailto:David_J_Pearson at uk.ibm.com
Twitter: @DJPearson1




Note: This is an automated response to your message  "Tutor Digest, Vol
108, Issue 32" sent on 10/02/2013 11:00:02.

This is the only notification you will receive while this person is away.


From timomlists at gmail.com  Sun Feb 10 19:53:18 2013
From: timomlists at gmail.com (Timo)
Date: Sun, 10 Feb 2013 19:53:18 +0100
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <kf8g87$unb$1@ger.gmane.org>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<kf8g87$unb$1@ger.gmane.org>
Message-ID: <5117EC9E.8030207@gmail.com>

Op 10-02-13 17:01, Jim Byrnes schreef:
> On 02/09/2013 05:46 AM, Albert-Jan Roskam wrote:
>> ----- Original Message -----
>>
>>> From: Jim Byrnes <jf_byrnes at comcast.net> To: tutor at python.org Cc:
>>> Sent: Saturday, February 9, 2013 3:02 AM Subject: [Tutor] Which pip
>>> for Ubuntu 12.04
>>>
>>> How important is it to have the latest pip installed?
>>>
>>> Initially I want to use it to install the latest pymongo driver for
>>> mongoDB. The pip version in the Ubuntu 12.04 repositories is 1.0.1.
>>> I see on http://www.pip-installer.org/en/latest/ the version is
>>> 1.2.1.
>>>
>>> It certainly would be easier to install from the repositories but
>>> will that version work to install the latest python packages?
>>>
>>> Thanks,  Jim
>>
>> You could just try it? And downloading it and then doing sudo tar
>> -xvr pip.tar.gz, cd ..., sudo python setup.py isn't that hard, is
>> it?
>
> I usually install from the repositories or maybe a ppa so I don't 
> believe I have ever done an install from a tar.  If necessary I will 
> familiarize myself with the command you gave (yes I saw your followup 
> changing -xvr to -xvf) and install that way.
>
> However, I still wonder if using the outdated pip from the repository 
> will allow me to install the latest python packages? Will trying to 
> use an outdated pip cause me problems?
I doubt it will. Have a look at the pip changelog to see what has been 
changed.

Timo


>
>> But you're right, I also nnoticed that the Canonical repositories are
>> a little outdated sometimes. Would be nice if it's possible to add
>> pypi.org, so updating would be easier.
>>
>> Albert-Jan
>
>
> Thanks,  Jim
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor


From joel.goldstick at gmail.com  Sun Feb 10 20:10:02 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Sun, 10 Feb 2013 14:10:02 -0500
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <5117EC9E.8030207@gmail.com>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<kf8g87$unb$1@ger.gmane.org> <5117EC9E.8030207@gmail.com>
Message-ID: <CAPM-O+w2=6yGRsJWtJxbdGZ4Qj8J6F7=DCBW0XbTkPLfSLfe7Q@mail.gmail.com>

On Sun, Feb 10, 2013 at 1:53 PM, Timo <timomlists at gmail.com> wrote:

> Op 10-02-13 17:01, Jim Byrnes schreef:
>
>  On 02/09/2013 05:46 AM, Albert-Jan Roskam wrote:
>>
>>> ----- Original Message -----
>>>
>>>  From: Jim Byrnes <jf_byrnes at comcast.net> To: tutor at python.org Cc:
>>>> Sent: Saturday, February 9, 2013 3:02 AM Subject: [Tutor] Which pip
>>>> for Ubuntu 12.04
>>>>
>>>> How important is it to have the latest pip installed?
>>>>
>>>> Initially I want to use it to install the latest pymongo driver for
>>>> mongoDB. The pip version in the Ubuntu 12.04 repositories is 1.0.1.
>>>> I see on http://www.pip-installer.org/**en/latest/<http://www.pip-installer.org/en/latest/>the version is
>>>> 1.2.1.
>>>>
>>>> It certainly would be easier to install from the repositories but
>>>> will that version work to install the latest python packages?
>>>>
>>>> Thanks,  Jim
>>>>
>>>
>>> You could just try it? And downloading it and then doing sudo tar
>>> -xvr pip.tar.gz, cd ..., sudo python setup.py isn't that hard, is
>>> it?
>>>
>>
>> I usually install from the repositories or maybe a ppa so I don't believe
>> I have ever done an install from a tar.  If necessary I will familiarize
>> myself with the command you gave (yes I saw your followup changing -xvr to
>> -xvf) and install that way.
>>
>> However, I still wonder if using the outdated pip from the repository
>> will allow me to install the latest python packages? Will trying to use an
>> outdated pip cause me problems?
>>
> I doubt it will. Have a look at the pip changelog to see what has been
> changed.
>
> Timo
>
>
>
>
>>  But you're right, I also nnoticed that the Canonical repositories are
>>> a little outdated sometimes. Would be nice if it's possible to add
>>> pypi.org, so updating would be easier.
>>>
>>> Albert-Jan
>>>
>>
>>
>> Thanks,  Jim
>>
>> ______________________________**_________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>>
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>



You can upgrade pip with pip i believe:

jcg at jcg-desktop:~/code/python$ pip install pip
Requirement already satisfied (use --upgrade to upgrade): pip in
/usr/lib/pymodules/python2.7
Cleaning up...
jcg at jcg-desktop:~/code/python$


jcg at jcg-desktop:~/code/python$ pip install --upgrade pip


Be sure to sudo before if you don't have permissions.

-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/d337dfae/attachment-0001.html>

From ghasemmg01 at leedslearning.net  Sun Feb 10 21:29:23 2013
From: ghasemmg01 at leedslearning.net (Ghadir Ghasemi)
Date: Sun, 10 Feb 2013 20:29:23 +0000
Subject: [Tutor] Additional help
Message-ID: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>

Hi guys, I wondered if you knew what I could add to this code so that when the user enters 1 from the menu and then doesn't enter a valid binary number the program should ask them over and over again until valid binary number is entered.
here is the code:

def show_menu():
 print("=======================")
 print("1-binary to denary")
 print("2-denary to binary")
 print("3-exit")
 print("=======================")


while True:
    show_menu()

    choice = input("please enter an option: ")

    if choice == '1':
        binary = input("Please enter a binary number: ")
        denary = 0
        place_value = 1

        for i in binary [::-1]:
                    denary += place_value * int(i)
                    place_value *= 2

        print("The result is",denary)

        
   

    
    elif choice == '2':
        denary2 = int(input("Please enter a denary number: "))
        remainder = ''
        while denary2 > 0:
            remainder = str(denary2 % 2) + remainder
            denary2 >>= 1
        print("The result is",remainder)
        
   
 

    elif choice == '3':
     break


    elif choice not in '1' or '2' or '3':
        print("Invalid input-try again!")


Thanks

From brian.van.den.broek at gmail.com  Sun Feb 10 22:15:04 2013
From: brian.van.den.broek at gmail.com (Brian van den Broek)
Date: Sun, 10 Feb 2013 16:15:04 -0500
Subject: [Tutor] Additional help
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <CAF6DajLkU4vF2Y_SWRX1niie3ENDnn0XcKrBheXWpgJVox3hCA@mail.gmail.com>

On 10 February 2013 15:29, Ghadir Ghasemi <ghasemmg01 at leedslearning.net> wrote:
> Hi guys, I wondered if you knew what I could add to this code so that when the user enters 1 from the menu and then doesn't enter a valid binary number the program should ask them over and over again until valid binary number is entered.
> here is the code:

<snip>

> while True:
>     show_menu()
>
>     choice = input("please enter an option: ")
>
>     if choice == '1':
>         binary = input("Please enter a binary number: ")
>         denary = 0
>         place_value = 1
>
>         for i in binary [::-1]:
>                     denary += place_value * int(i)
>                     place_value *= 2
>
>         print("The result is",denary)

<snip>

>     elif choice == '3':
>      break


Hi Ghadir,

"over and over again until" suggests a while loop.

So, you need something like the pseudo-code:

while True:
    binary = input("Please enter a binary number: ")
    if isgood(binary):
        pass  # do stuff then break
    else:
        pass #remind user of constraints before they are prompted again

(This assumes you've an isgood function that will return a boolean as
the user input is acceptable. That's not necessarily the best way, but
it makes for easy pseduo-code and doesn't do the work for you ;-)

Last, a better subject line is a good idea. Pretty much every post
asking for help from someone who's posted before could have your
subject line.

Best,

Brian vdB

From oscar.j.benjamin at gmail.com  Sun Feb 10 22:20:54 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Sun, 10 Feb 2013 21:20:54 +0000
Subject: [Tutor] How to override getting items from a list for iteration
In-Reply-To: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
References: <CANLXbfCYoMDoOOANoUBbVfJv-FBELFst2Lmdk9U5bEopm8sNEA@mail.gmail.com>
Message-ID: <CAHVvXxRhSUSaTrESeiufSSpEQTomrR9muhj=s3v++oEZ10DXKQ@mail.gmail.com>

On 10 February 2013 14:32, Walter Prins <wprins at gmail.com> wrote:
[snip
>
> This worked mostly fine, however yesterday I ran into a slightly unexpected
> problem when I found that when the list contents is iterated over and values
> retrieved that way rather than via [], then __getitem__ is in fact *not*
> called on the list to read the item values from the list, and consequently I
> get back the "not yet calculated" entries in the list, without the
> calculation routine being automatically called as is intended.
>
> Here's a test application that demonstrates the issue:
>
> class NotYetCalculated:
>     pass
>
> class CalcList(list):
>     def __init__(self, calcitem):
>         super(CalcList, self).__init__()
>         self.calcitem = calcitem
>
>     def __getitem__(self, key):
>         """Override __getitem__ to call self.calcitem() if needed"""
>         print "CalcList.__getitem__(): Enter"
>         value = super(CalcList, self).__getitem__(key)
>         if value is NotYetCalculated:
>             print "CalcList.__getitem__(): calculating"
>             value = self.calcitem(key)
>             self[key] = value
>         print "CalcList.__getitem__(): return"
>         return value
>
> def calcitem(key):
>     # Demo: return square of index
>     return key*key
>
> What's the best way to fix this problem?  Do I need to maybe override
> another method, perhaps provide my own iterator implementation? For that
> matter, why doesn't iterating over the list contents fall back to calling
> __getitem__?

It would use __getitem__ if __iter__ wasn't defined. e.g.:

>>> class A(object):
...   def __getitem__(self, index):
...     if index > 4:
...       raise IndexError
...     return index ** 2
...
>>> a = A()
>>> for x in a:
...   print(x)
...
0
1
4
9
16

The problem is that by subclassing list you inherit its __iter__
method. A for loop begins by calling iter()  on the iterable. The iter
function is roughly like:

def iterseq(seq):
  count = 0
  while True:
    try:
       yield seq[count]
    except IndexError:
      return
    count += 1

def iter(iterable):
  if hasattr(iterable, '__iter__'):
     return iterable.__iter__()
  elif hasattr(iterable, '__getitem__'):
    return iterseq(iterable)
  else:
    raise TypeError


Oscar

From eire1130 at gmail.com  Sun Feb 10 23:23:05 2013
From: eire1130 at gmail.com (James Reynolds)
Date: Sun, 10 Feb 2013 17:23:05 -0500
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <CAPM-O+w2=6yGRsJWtJxbdGZ4Qj8J6F7=DCBW0XbTkPLfSLfe7Q@mail.gmail.com>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<kf8g87$unb$1@ger.gmane.org> <5117EC9E.8030207@gmail.com>
	<CAPM-O+w2=6yGRsJWtJxbdGZ4Qj8J6F7=DCBW0XbTkPLfSLfe7Q@mail.gmail.com>
Message-ID: <CAE0jAboVZ18rNVXRVnszP84TvFJeTJbENWGYRB_4iq6e8G-03Q@mail.gmail.com>

The bigger issue with mongo is the apt versions are old. Be sure to follow
the instructions on mongos site.

If you pip install pymongo with a ubunuto or mint build your gtg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/37270de7/attachment.html>

From bgailer at gmail.com  Mon Feb 11 00:14:44 2013
From: bgailer at gmail.com (bob gailer)
Date: Sun, 10 Feb 2013 18:14:44 -0500
Subject: [Tutor] binary - denary converter (was  Additional help)
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <511829E4.3060604@gmail.com>

I am changing the subject line to one that is more explicit.

On 2/10/2013 3:29 PM, Ghadir Ghasemi wrote:
>      elif choice not in '1' or '2' or '3':
>          print("Invalid input-try again!")
This works, but not for the reasons you had in mind.

For experiment, try:

 >>> '1' or '2' or '3'
'1'

 >>> '3' or'2' or '1'
'3'

 >>> '1' not in '1' or '2' or '3'
'2'

It is easy to stare at this and say "huh"? or "that makes no sense". 
Instead read up on "in", "or" and "operator precedence" until you do 
understand it.

 From the Language Reference:

5:9 The operators in and not in test for collection membership. x in s 
evaluates to true if x is a member of the collection s

5:10 The expression x or y first evaluates x; if x is true, its value is 
returned; otherwise, y is evaluated and the resulting value is returned.

5:15 for operator precedence

Also realize that all you need at the end is:

     else:
         print("Invalid input-try again!")

For checking an item against several possibilities:

     elif choice not in ('1', '2', '3'):

-- 
Bob Gailer
919-636-4239
Chapel Hill NC


From steve at pearwood.info  Mon Feb 11 02:14:42 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Mon, 11 Feb 2013 12:14:42 +1100
Subject: [Tutor] Code to open a website
In-Reply-To: <1360488335.4141.YahooMailNeo@web186005.mail.ir2.yahoo.com>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
	<1360487830.28294.YahooMailNeo@web163803.mail.gq1.yahoo.com>
	<1360488335.4141.YahooMailNeo@web186005.mail.ir2.yahoo.com>
Message-ID: <51184602.7050302@pearwood.info>

On 10/02/13 20:25, ALAN GAULD wrote:
>
>
>> Maybe the OP meant to say 'quit()' ? That does not require an import.
>
>
> Ooh! another option I didn't know about!
> So many ways to get rid of Python and here's me been importing sys
> or raising SystemExit all these years... :-)


exit() and quit() (as added by the site.py module) are for interactive use.
They're mostly there for the benefit of newbies. Experienced developers (at
least in the Unix/Linux world) usually know to exit interactive terminal
apps with Ctrl-D. I believe you use Ctrl-Z <enter> under Windows.

For programmatic use in scripts, use sys.exit(), since the site module is
not guaranteed to run.



-- 
Steven

From eryksun at gmail.com  Mon Feb 11 02:31:34 2013
From: eryksun at gmail.com (eryksun)
Date: Sun, 10 Feb 2013 20:31:34 -0500
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <5117EC9E.8030207@gmail.com>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<kf8g87$unb$1@ger.gmane.org> <5117EC9E.8030207@gmail.com>
Message-ID: <CACL+1auBznpfN-jcYdtkx93a0MBUp3+5gfotmfNu6UrOrttXsA@mail.gmail.com>

On Sun, Feb 10, 2013 at 1:53 PM, Timo <timomlists at gmail.com> wrote:
>> However, I still wonder if using the outdated pip from the repository will
>> allow me to install the latest python packages? Will trying to use an
>> outdated pip cause me problems?
>
> I doubt it will. Have a look at the pip changelog to see what has been
> changed.

Additionally, deb packages may have platform-specific patches. For
example, here's the changelog and patches for python-pip:

http://packages.debian.org/changelogs/pool/main/p/python-pip/current/changelog

http://anonscm.debian.org/viewvc/python-modules/packages/python-pip/trunk/debian/patches

From Yogesh.M.Pai at tektronix.com  Mon Feb 11 05:25:02 2013
From: Yogesh.M.Pai at tektronix.com (Pai, Yogesh M)
Date: Mon, 11 Feb 2013 04:25:02 +0000
Subject: [Tutor] How to log process handles and GDI objects in python
In-Reply-To: <kf2nnd$5j2$1@ger.gmane.org>
References: <F16FCEF86785004BBACC4CAB01973C38011830A9@US-BV-EXM01-P.global.tektronix.net>
	<kf2nnd$5j2$1@ger.gmane.org>
Message-ID: <F16FCEF86785004BBACC4CAB01973C38011845F3@US-BV-EXM01-P.global.tektronix.net>

Hi Alan,

Here are the additional details:
Python version: 2.7.3
OS version: Windows 7 -64 bit

I have an application that has a automation layer built in python. During every subsequent runs, I want to log the process threads and GDI objects ( the one you see in the Windows task manager) in my python code- The idea is to use this data to generate a plot to check if the application leaks memory in a long run. Although I can use a third-party app to log this, is it possible to import certain library in python and log these windows attributes during the execution?

Thanks,
Yogesh


-----Original Message-----
From: Tutor [mailto:tutor-bounces+yogesh.m.pai=tektronix.com at python.org] On Behalf Of Alan Gauld
Sent: Friday, February 08, 2013 5:02 PM
To: tutor at python.org
Subject: Re: [Tutor] How to log process handles and GDI objects in python

On 08/02/13 09:06, Pai, Yogesh M wrote:

> I would like to know how can I log system process handles and GDI 
> objects for debugging memory leak issues in python.

This isn't really a question about learning Python so probably would be better on the main Python mailing list.

However it will help if you specify things like the OS, the Python version. Also be clear about what exactly you mean by process handles and GDI objects. I'm guessing you are talking about Windows but I can't be sure.

> I would like to log these inside a loop (stress test) to check if my 
> application leaks handles and plot them later for my usage.

I imagine that means you are creating a test lop that creates and releases these handles? How do you get a handle? can you store it as a variable? can you print it? can you create a string and print that?

Sorry I can't be of more help but that's a fairly open question about a very specific problem.

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/

_______________________________________________
Tutor maillist  -  Tutor at python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor



From neubyr at gmail.com  Mon Feb 11 06:14:14 2013
From: neubyr at gmail.com (neubyr)
Date: Sun, 10 Feb 2013 23:14:14 -0600
Subject: [Tutor] associating two objects without ORM and processing a text
	file
Message-ID: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>

I have a text file with each line in following format:

Book Name, Author Name, Genre, Publication Date

I would like to perform following queries on this file:
 * Get all books written by an author
 * Remove all books of an author
 * Get information about a book (pretty print matching line!)
 * Get books of particular genre

Also, I would like to add and delete entries in this file. I am not
planning to use any database for this purpose and would like to get better
grasp on file parsing and classes/OOP. I need some help in creating classes
and following are my initial thoughts:

# Create a class for Book object
class Book:
  atributes: name, author_name, genre, publication-date

# Create
Author:
 attribute(s): name

# Create class for reading and writing to the file
class Booksfile:
  methods: ??


* How do I associate/relate Book and Author classes so that it will help me
in getting information like 'get list of books written by an author'? Data
attribute?
* Should I create a new Booksfile object for reading, writing and deleting
entries in the file OR add corresponding methods to the book object itself?

I am not planning to use SQLite or any database and would like to use text
file only. Appreciate any help on designing such application.



thanks,
N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130210/0a41875c/attachment.html>

From msirenef at lightbird.net  Mon Feb 11 06:28:40 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Mon, 11 Feb 2013 00:28:40 -0500
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
Message-ID: <51188188.2090002@lightbird.net>

On 02/11/2013 12:14 AM, neubyr wrote:
>
 > I have a text file with each line in following format:
 >
 > Book Name, Author Name, Genre, Publication Date
 >
 > I would like to perform following queries on this file:
 > * Get all books written by an author
 > * Remove all books of an author
 > * Get information about a book (pretty print matching line!)
 > * Get books of particular genre
 >
 > Also, I would like to add and delete entries in this file. I am not 
planning to use any database for this purpose and would like to get 
better grasp on file parsing and classes/OOP. I need some help in 
creating classes and following are my initial thoughts:
 >
 > # Create a class for Book object
 > class Book:
 > atributes: name, author_name, genre, publication-date
 >
 > # Create
 > Author:
 > attribute(s): name
 >
 > # Create class for reading and writing to the file
 > class Booksfile:
 > methods: ??
 >
 >
 > * How do I associate/relate Book and Author classes so that it will 
help me in getting information like 'get list of books written by an 
author'? Data attribute?
 > * Should I create a new Booksfile object for reading, writing and 
deleting entries in the file OR add corresponding methods to the book 
object itself?
 >
 > I am not planning to use SQLite or any database and would like to use 
text file only. Appreciate any help on designing such application.
 >
 >


Book.author should be author instance,

Author
     def books(self):
         return [b for b in books if b.author==self]

Get lists by genre etc in a similar way.

To do file processing, look at the standard csv module:

http://docs.python.org/2/library/csv.html


     -m

-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

The doer alone learneth.  Friedrich Nietzsche


From davea at davea.name  Mon Feb 11 06:56:55 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 11 Feb 2013 00:56:55 -0500
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
Message-ID: <51188827.8000301@davea.name>

On 02/11/2013 12:14 AM, neubyr wrote:
> I have a text file with each line in following format:
>
> Book Name, Author Name, Genre, Publication Date
>
> I would like to perform following queries on this file:
>   * Get all books written by an author
>   * Remove all books of an author
>   * Get information about a book (pretty print matching line!)
>   * Get books of particular genre
>
> Also, I would like to add and delete entries in this file. I am not
> planning to use any database for this purpose and would like to get better
> grasp on file parsing and classes/OOP.

I take it from this that this is a class assignment, and that neither 
speed nor enormous data capacity nor concurrent operation is a 
requirement.  But your professor may have other requirements that you 
haven't told us about.

I need some help in creating classes
> and following are my initial thoughts:
>
> # Create a class for Book object
> class Book:
>    atributes: name, author_name, genre, publication-date
>
> # Create
> Author:
>   attribute(s): name

Is this in order to save space, since each Book instance can then have a 
reference to an Author object, rather than a reference to a string 
containing the Author's name.

If you deem this class useful, then don't you also want one for Genre ?


>
> # Create class for reading and writing to the file
> class Booksfile:
>    methods: ??

Why ?  Are you transliterating this from Java ?

>
>
> * How do I associate/relate Book and Author classes so that it will help me
> in getting information like 'get list of books written by an author'? Data
> attribute?

If performance doesn't matter, then create one list of Book instances, 
and search it for whichever characteristics you like.


> * Should I create a new Booksfile object for reading, writing and deleting
> entries in the file OR add corresponding methods to the book object itself?

Neither, a pair of regular functions will do fine.  One that loads when 
you start the program, and another that saves the file when you exit. 
If you really expect to update the file incrementally, deleting entries 
in it, then think hard about your decision to roll your own database.  A 
text file isn't random access.

>
> I am not planning to use SQLite or any database and would like to use text
> file only. Appreciate any help on designing such application.
>
>

The real question is where you might proceed after meeting these first 
requirements.  For example, if you expect the list to grow to a few 
hundred million entries, then you'll need to be very careful about 
layout.  And starting and exiting the program would be very slow, since 
you can do nothing till all the data has been loaded in and converted to 
objects.

Or perhaps you'll want to have another file with additional author data, 
associated with the first by carefully spelling the author's name the 
same in all cases.  In that case, having a separate Author class makes 
great sense.  So if you expect to grow in that direction, then you 
should create the class now, even though it has only one attribute.


-- 
DaveA

From sulinet at postafiok.hu  Mon Feb 11 11:58:48 2013
From: sulinet at postafiok.hu (=?ISO-8859-1?Q?V=E1las_P=E9ter?=)
Date: Mon, 11 Feb 2013 11:58:48 +0100
Subject: [Tutor] Truncated urlopen
Message-ID: <CAC2EUKKGQMRJPWiniAND2p_N45ohRxMGo1CWvxmOJsiCMStxig@mail.gmail.com>

Hi tutors,

aboard again after a long time.
http://..._export.php?mehet=1 is a link which exports me some data in CSV
correctly when I click on it in my browser. (It contains personal data,
that's why I dotted.) I want to process it directly from Python, excluding
the browser phase.

The following piece of code in Python 3.3 prints the first n-1 lines
nicely, then the beginning of the last line truncated. I mean there are 12
fields in CSV and in the last line only 1.5 fields of them are displayed. I
suspect some closing/caching error.
In the first times it worked well but after a certain time it spoiled
without PHP code being modified. I guess it may somehow be connected to
quantity of lines.
How could I read the last line?
Thx, P?ter

from urllib.request import urlopen
x=urlopen('http://..._export.php?mehet=1')
y=x.read().decode('windows-1250')
print(y)

Output looks like this:
159;Name of customer159;xxxx at gmail.com;phone;22;0;0;0;1;0;0;2013-02-09
20:20:26
160;Name of customer160;yyyy at gmail.com;phone;14;0;0;1;0;0;0;2013-02-09
20:38:16
161;Name of c
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/3719a008/attachment-0001.html>

From eryksun at gmail.com  Mon Feb 11 12:23:49 2013
From: eryksun at gmail.com (eryksun)
Date: Mon, 11 Feb 2013 06:23:49 -0500
Subject: [Tutor] How to log process handles and GDI objects in python
In-Reply-To: <F16FCEF86785004BBACC4CAB01973C38011845F3@US-BV-EXM01-P.global.tektronix.net>
References: <F16FCEF86785004BBACC4CAB01973C38011830A9@US-BV-EXM01-P.global.tektronix.net>
	<kf2nnd$5j2$1@ger.gmane.org>
	<F16FCEF86785004BBACC4CAB01973C38011845F3@US-BV-EXM01-P.global.tektronix.net>
Message-ID: <CACL+1at6fkoxUXkTYKGkT3A8qZB26s0xD=CKJiWKT+JVt-HuOg@mail.gmail.com>

On Sun, Feb 10, 2013 at 11:25 PM, Pai, Yogesh M
<Yogesh.M.Pai at tektronix.com> wrote:
> I want to log the process threads and GDI objects (the one you see in
> the Windows task manager) in my python code- The idea is to use this
> data to generate a plot to check if the application leaks memory in a
> long run. Although I can use a third-party app to log this, is it
> possible to import certain library in python and log these windows
> attributes during the execution?

psutil can query the number of handles and threads for a Windows
process, but not GDI objects.

http://code.google.com/p/psutil

Getting the number of handles and gdi/user objects via the Win32 API
isn't too hard. Required functions:

?OpenProcess
http://msdn.microsoft.com/en-us/library/ms684320

CloseHandle
http://msdn.microsoft.com/en-us/library/ms724211

GetProcessHandleCount
http://msdn.microsoft.com/en-us/library/ms683214

GetGuiResources
http://msdn.microsoft.com/en-us/library/ms683192

Here's a basic example with ctypes. In practice, set argtypes for each
function call (a TypeError is better than a segfault) and error check
the return value per the above docs. You can map the last error (i.e.
GetLastError) to an exception using ctypes.WinError.

(I haven't checked, but all of this is probably simple using pywin32.
Just search around the net for examples.)

    >>> import os
    >>> from ctypes import *
    >>> from ctypes.wintypes import *

    >>> PQI = 0x400 # PROCESS_QUERY_INFORMATION
    >>> pid = os.getpid()
    >>> h = windll.kernel32.OpenProcess(PQI, 0, pid)
    >>> hndcnt = DWORD()
    >>> windll.kernel32.GetProcessHandleCount(h, byref(hndcnt))
    1
    >>> hndcnt.value
    72L
    >>> GR_GDIOBJECTS, GR_USEROBJECTS = 0, 1
    >>> windll.user32.GetGuiResources(h, GR_GDIOBJECTS)
    4
    >>> windll.user32.GetGuiResources(h, GR_USEROBJECTS)
    1
    >>> windll.kernel32.CloseHandle(h)
    1

The number of threads can be found by iterating over a system snapshot
up to the desired PID. Here are the required functions and data
struct:

CreateToolhelp32Snapshot
http://msdn.microsoft.com/en-us/library/ms682489

Process32First[W]
http://msdn.microsoft.com/en-us/library/ms684834

Process32Next[W]
http://msdn.microsoft.com/en-us/library/ms684836

PROCESSENTRTY32
http://msdn.microsoft.com/en-us/library/ms684839

    class PROCESSENTRY32(Structure):
        _fields_ = [
          ('dwSize', DWORD),
          ('cntUsage', DWORD),
          ('th32ProcessID', DWORD),
          ('th32DefaultHeapID', c_void_p),
          ('th32ModuleID', DWORD),
          ('cntThreads', DWORD),
          ('th32ParentProcessID', DWORD),
          ('pcPriClassBase', c_long),
          ('dwFlags', DWORD),
          ('szExeFile', WCHAR * MAX_PATH),
        ]

        def __init__(self, *args, **kwds):
            Structure.__init__(self, *args, **kwds)
            self.dwSize = sizeof(self)

    TH32CS_SNAPPROCESS = 2
    th32cs = windll.kernel32.CreateToolhelp32Snapshot

    def get_num_threads(pid):
        num_threads = 0
        hsnap = th32cs(TH32CS_SNAPPROCESS, 0)
        pe = PROCESSENTRY32()
        r = windll.kernel32.Process32FirstW(hsnap, byref(pe))
        while r:
            if pe.th32ProcessID == pid:
                num_threads = int(pe.cntThreads)
                break
            r = windll.kernel32.Process32NextW(hsnap, byref(pe))
        windll.kernel32.CloseHandle(hsnap)
        return num_threads

Example:

    >>> from threading import Timer
    >>> pid = os.getpid()
    >>> get_num_threads(pid)
    1
    >>> for i in range(30): Timer(30, lambda: None).start()
    >>> get_num_threads(pid)
    31

From davea at davea.name  Mon Feb 11 14:36:16 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 11 Feb 2013 08:36:16 -0500
Subject: [Tutor] Truncated urlopen
In-Reply-To: <CAC2EUKKGQMRJPWiniAND2p_N45ohRxMGo1CWvxmOJsiCMStxig@mail.gmail.com>
References: <CAC2EUKKGQMRJPWiniAND2p_N45ohRxMGo1CWvxmOJsiCMStxig@mail.gmail.com>
Message-ID: <5118F3D0.1070201@davea.name>

On 02/11/2013 05:58 AM, V?las P?ter wrote:
> Hi tutors,
>
> aboard again after a long time.

Welcome back.

> http://..._export.php?mehet=1 is a link which exports me some data in CSV
> correctly when I click on it in my browser. (It contains personal data,
> that's why I dotted.) I want to process it directly from Python, excluding
> the browser phase.
>
> The following piece of code in Python 3.3 prints the first n-1 lines
> nicely, then the beginning of the last line truncated. I mean there are 12
> fields in CSV and in the last line only 1.5 fields of them are displayed. I
> suspect some closing/caching error.
> In the first times it worked well but after a certain time it spoiled
> without PHP code being modified. I guess it may somehow be connected to
> quantity of lines.
> How could I read the last line?
> Thx, P?ter
>
> from urllib.request import urlopen
> x=urlopen('http://..._export.php?mehet=1')
> y=x.read().decode('windows-1250')

I'd suggest splitting that expression into two separate statements, one 
that does the read, and the other that decodes.  Then you can print the 
byte-string, and see if it also is truncated, or whether that happened 
during the decoding.

(Though I can't imagine how decoding one of the windows-xxx character 
sets could fail to do the whole thing)

Also, if you use print( repr(mystring) )
you might discover that there are funny escape sequence characters that 
are fooling your console.

> print(y)
>
> Output looks like this:
> 159;Name of customer159;xxxx at gmail.com;phone;22;0;0;0;1;0;0;2013-02-09
> 20:20:26
> 160;Name of customer160;yyyy at gmail.com;phone;14;0;0;1;0;0;0;2013-02-09
> 20:38:16
> 161;Name of c
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
DaveA

From sulinet at postafiok.hu  Mon Feb 11 16:00:18 2013
From: sulinet at postafiok.hu (=?ISO-8859-1?Q?V=E1las_P=E9ter?=)
Date: Mon, 11 Feb 2013 16:00:18 +0100
Subject: [Tutor] Truncated urlopen
In-Reply-To: <5118F3D0.1070201@davea.name>
References: <CAC2EUKKGQMRJPWiniAND2p_N45ohRxMGo1CWvxmOJsiCMStxig@mail.gmail.com>
	<5118F3D0.1070201@davea.name>
Message-ID: <CAC2EUKLyOpGh-TSmPUV4xLkOZV7jz6gG94+FqnGL3LimKE+xzg@mail.gmail.com>

2013/2/11 Dave Angel <davea at davea.name>

> I'd suggest splitting that expression into two separate statements, one
> that does the read, and the other that decodes.  Then you can print the
> byte-string, and see if it also is truncated, or whether that happened
> during the decoding.
>
> Also, if you use print( repr(mystring) )
> you might discover that there are funny escape sequence characters that
> are fooling your console.
>

Thanks, Dave,
none of these helps. They are truncated as well.

But I noticed a strange phenomenon. I am supposed to login to this page,
but I can reach CVS data without login if I use the direct link to export.
This may be a bug, but I like it. :-) Now, If I use the same link in
browser, I get different results depending on I have logged in or not. (But
in the first times of gathering data in this table, my Python script worked
well!)

So I should try to log in, but I have always difficulties with logging in
from Python. I know http://docs.python.org/3/howto/urllib2.html#id6, but I
couldn't use it in practice.
Another way would be to log in in the browser correctly, then export CVS
and process it with Python after saving, but I am too lazy to repeat this
all the time. :-)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/7ec3250e/attachment.html>

From joel.goldstick at gmail.com  Mon Feb 11 16:12:12 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Mon, 11 Feb 2013 10:12:12 -0500
Subject: [Tutor] Truncated urlopen
In-Reply-To: <CAC2EUKLyOpGh-TSmPUV4xLkOZV7jz6gG94+FqnGL3LimKE+xzg@mail.gmail.com>
References: <CAC2EUKKGQMRJPWiniAND2p_N45ohRxMGo1CWvxmOJsiCMStxig@mail.gmail.com>
	<5118F3D0.1070201@davea.name>
	<CAC2EUKLyOpGh-TSmPUV4xLkOZV7jz6gG94+FqnGL3LimKE+xzg@mail.gmail.com>
Message-ID: <CAPM-O+w74RVaP906bLOnY7ZbV-W-JK0sq7BTZXeAb_KA=u0peQ@mail.gmail.com>

On Mon, Feb 11, 2013 at 10:00 AM, V?las P?ter <sulinet at postafiok.hu> wrote:

> 2013/2/11 Dave Angel <davea at davea.name>
>
>> I'd suggest splitting that expression into two separate statements, one
>> that does the read, and the other that decodes.  Then you can print the
>> byte-string, and see if it also is truncated, or whether that happened
>> during the decoding.
>>
>> Also, if you use print( repr(mystring) )
>> you might discover that there are funny escape sequence characters that
>> are fooling your console.
>>
>
> Thanks, Dave,
> none of these helps. They are truncated as well.
>
> But I noticed a strange phenomenon. I am supposed to login to this page,
> but I can reach CVS data without login if I use the direct link to export.
> This may be a bug, but I like it. :-) Now, If I use the same link in
> browser, I get different results depending on I have logged in or not. (But
> in the first times of gathering data in this table, my Python script worked
> well!)
>
> So I should try to log in, but I have always difficulties with logging in
> from Python. I know http://docs.python.org/3/howto/urllib2.html#id6, but
> I couldn't use it in practice.
> Another way would be to log in in the browser correctly, then export CVS
> and process it with Python after saving, but I am too lazy to repeat this
> all the time. :-)
>
>
> There is a library called 'requests'
http://docs.python-requests.org/en/latest/ that I have used to access
websites.  It seems much less confusing than urllib/urllib2 to me.

>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>


-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/cab1cc7e/attachment-0001.html>

From jf_byrnes at comcast.net  Mon Feb 11 16:31:20 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Mon, 11 Feb 2013 09:31:20 -0600
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <CAPM-O+w2=6yGRsJWtJxbdGZ4Qj8J6F7=DCBW0XbTkPLfSLfe7Q@mail.gmail.com>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<kf8g87$unb$1@ger.gmane.org> <5117EC9E.8030207@gmail.com>
	<CAPM-O+w2=6yGRsJWtJxbdGZ4Qj8J6F7=DCBW0XbTkPLfSLfe7Q@mail.gmail.com>
Message-ID: <kfb2s5$lco$1@ger.gmane.org>

On 02/10/2013 01:10 PM, Joel Goldstick wrote:
> On Sun, Feb 10, 2013 at 1:53 PM, Timo <timomlists at gmail.com> wrote:
>
>> Op 10-02-13 17:01, Jim Byrnes schreef:
>>
>>   On 02/09/2013 05:46 AM, Albert-Jan Roskam wrote:
>>>
>>>> ----- Original Message -----
>>>>
>>>>   From: Jim Byrnes <jf_byrnes at comcast.net> To: tutor at python.org Cc:
>>>>> Sent: Saturday, February 9, 2013 3:02 AM Subject: [Tutor] Which pip
>>>>> for Ubuntu 12.04
>>>>>
>>>>> How important is it to have the latest pip installed?
>>>>>
>>>>> Initially I want to use it to install the latest pymongo driver for
>>>>> mongoDB. The pip version in the Ubuntu 12.04 repositories is 1.0.1.
>>>>> I see on http://www.pip-installer.org/**en/latest/<http://www.pip-installer.org/en/latest/>the version is
>>>>> 1.2.1.
>>>>>
>>>>> It certainly would be easier to install from the repositories but
>>>>> will that version work to install the latest python packages?
>>>>>
>>>>> Thanks,  Jim
>>>>>
>>>>
>>>> You could just try it? And downloading it and then doing sudo tar
>>>> -xvr pip.tar.gz, cd ..., sudo python setup.py isn't that hard, is
>>>> it?
>>>>
>>>
>>> I usually install from the repositories or maybe a ppa so I don't believe
>>> I have ever done an install from a tar.  If necessary I will familiarize
>>> myself with the command you gave (yes I saw your followup changing -xvr to
>>> -xvf) and install that way.
>>>
>>> However, I still wonder if using the outdated pip from the repository
>>> will allow me to install the latest python packages? Will trying to use an
>>> outdated pip cause me problems?
>>>
>> I doubt it will. Have a look at the pip changelog to see what has been
>> changed.
>>
>> Timo
>>
>>
>>
>>
>>>   But you're right, I also nnoticed that the Canonical repositories are
>>>> a little outdated sometimes. Would be nice if it's possible to add
>>>> pypi.org, so updating would be easier.
>>>>
>>>> Albert-Jan
>>>>
>>>
>>>
>>> Thanks,  Jim
>>>
>>> ______________________________**_________________
>>> Tutor maillist  -  Tutor at python.org
>>> To unsubscribe or change subscription options:
>>> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>>>
>>
>> ______________________________**_________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>>
>
>
>
> You can upgrade pip with pip i believe:
>
> jcg at jcg-desktop:~/code/python$ pip install pip
> Requirement already satisfied (use --upgrade to upgrade): pip in
> /usr/lib/pymodules/python2.7
> Cleaning up...
> jcg at jcg-desktop:~/code/python$
>
>
> jcg at jcg-desktop:~/code/python$ pip install --upgrade pip
>
>
> Be sure to sudo before if you don't have permissions.
>
>

I tried this on my laptop with the following results:

jfb at jfb-tp:~$ pip --version
pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)
jfb at jfb-tp:~$ pip install pip
Requirement already satisfied (use --upgrade to upgrade): pip in 
/usr/lib/python2.7/dist-packages
Cleaning up...

jfb at jfb-tp:~$ sudo pip install --upgrade pip
[sudo] password for jfb:
Downloading/unpacking pip
   Running setup.py egg_info for package pip

     warning: no files found matching '*.html' under directory 'docs'
     warning: no previously-included files matching '*.txt' found under 
directory 'docs/_build'
     no previously-included directories found matching 
'docs/_build/_sources'
Installing collected packages: pip
   Found existing installation: pip 1.0
     Uninstalling pip:
       Successfully uninstalled pip
   Running setup.py install for pip

     warning: no files found matching '*.html' under directory 'docs'
     warning: no previously-included files matching '*.txt' found under 
directory 'docs/_build'
     no previously-included directories found matching 
'docs/_build/_sources'
     Installing pip script to /usr/local/bin
     Installing pip-2.7 script to /usr/local/bin
Successfully installed pip
Cleaning up...
jfb at jfb-tp:~$ pip --version
bash: /usr/bin/pip: No such file or directory
jfb at jfb-tp:~$

I not sure what the significance of the missing *.txt and *.html files 
is but it looks like I have a path problem. I would appreciate any 
pointers from anyone who has already solved this.

Thanks,  Jim


From pravyareddy at gmail.com  Mon Feb 11 16:56:36 2013
From: pravyareddy at gmail.com (Pravya Reddy)
Date: Mon, 11 Feb 2013 07:56:36 -0800
Subject: [Tutor] (no subject)
Message-ID: <CAAxLd=MfZ_vw12NMUaze7Q5Waxh1ruGEQXEVvOL3o6dqaXdu8Q@mail.gmail.com>

Can You Plaese help me with the code.

#converts temperature to fahrenheit or celsius

def print_options():
    print ("Options:")
    print (" 'p' print options")
    print (" 'c' convert from celsius")
    print (" 'f' convert from fahrenheit")
    print (" 'q' quit the program")

def celsius_to_fahrenheit(c_temp):
    return 9.0/5.0*c_temp+32

def fahrenheit_to_celsius(f_temp):
    return (f_temp - 32.0)*5.0/9.0

choice = "p"
while choice != "q":
    if choice == "c":
        temp = input(input("Celsius temperature:"))
        print ("Fahrenheit:",celsius_to_fahrenheit(temp))
    elif choice == "f":
        temp = input("Fahrenheit temperature:")
        print ("Celsius:",fahrenheit_to_celsius(temp))
    elif choice != "q":
        print_options()
    choice = input(input("option:"))

The Output i got is:
Options:
 'p' print options
 'c' convert from celsius
 'f' convert from fahrenheit
 'q' quit the program
option:c
c
Options:
 'p' print options
 'c' convert from celsius
 'f' convert from fahrenheit
 'q' quit the program
option:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/24b376a7/attachment.html>

From pravyareddy at gmail.com  Mon Feb 11 16:58:55 2013
From: pravyareddy at gmail.com (Pravya Reddy)
Date: Mon, 11 Feb 2013 07:58:55 -0800
Subject: [Tutor] (no subject)
Message-ID: <CAAxLd=O4Q77EnEb+1Jyzbaae6R7EMDD84bn6TAUxaGZi+WL_KA@mail.gmail.com>

Can you please help me with the code.

#!/usr/bin/env python
"""
inchtocm.py

"""

def Inchtocm(inches):
    """Returns 2.54 * inches"""
    return (2.54 * float(inches_number1))

inches = None
while True:
    try:
        inches_number1 = input(input("How many inches you want to convert:
"))
        inches = float(inches_number1)
        print ("You got", Inchtocm(inches), "cm.")
        print ("You converted", inches, "inches to cm.")
        break
    except ValueError:
        print ("This is not a number!")

The code is incomplete and i am not getting a proper output:

How many inches you want to convert: 455
455
This is not a number!
How many inches you want to convert:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/ffbc9f09/attachment.html>

From pravyareddy at gmail.com  Mon Feb 11 17:06:39 2013
From: pravyareddy at gmail.com (Pravya Reddy)
Date: Mon, 11 Feb 2013 08:06:39 -0800
Subject: [Tutor] help with inch to cms conversion .
Message-ID: <CAAxLd=MkRofinGsM0L6vZXHxnaH86vShbJ0sFH6fq_8JQ=W9Pg@mail.gmail.com>

Can you please help me with the code.

#!/usr/bin/env python
"""
inchtocm.py

"""

def Inchtocm(inches):
    """Returns 2.54 * inches"""
    return (2.54 * float(inches_number1))

inches = None
while True:
    try:
        inches_number1 = input(input("How many inches you want to convert:
"))
        inches = float(inches_number1)
        print ("You got", Inchtocm(inches), "cm.")
        print ("You converted", inches, "inches to cm.")
        break
    except ValueError:
        print ("This is not a number!")

The code is incomplete and i am not getting a proper output:

How many inches you want to convert: 455
455
This is not a number!
How many inches you want to convert:

_______________________________________________
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/20130211/6bb49b7b/attachment.html>

From joel.goldstick at gmail.com  Mon Feb 11 17:12:33 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Mon, 11 Feb 2013 11:12:33 -0500
Subject: [Tutor] (no subject)
In-Reply-To: <CAAxLd=O4Q77EnEb+1Jyzbaae6R7EMDD84bn6TAUxaGZi+WL_KA@mail.gmail.com>
References: <CAAxLd=O4Q77EnEb+1Jyzbaae6R7EMDD84bn6TAUxaGZi+WL_KA@mail.gmail.com>
Message-ID: <CAPM-O+w0ac0aPDqBHPC9GL_QTqP7a4PVthRqNDA_+NUbUFfJRw@mail.gmail.com>

First, pick a good subject header.

By having caught excep ValueError in your mainline code you lose the
opportunity to find out where it came from.  If you comment it out you will
see that the function inchtocm(inches) uses inches_number1 in its code.  So
you are ignoring the inches that you passed in.  Is that what you want?


On Mon, Feb 11, 2013 at 10:58 AM, Pravya Reddy <pravyareddy at gmail.com>wrote:

> Can you please help me with the code.
>
> #!/usr/bin/env python
> """
> inchtocm.py
>
> """
>
> def Inchtocm(inches):
>     """Returns 2.54 * inches"""
>     return (2.54 * float(inches_number1))
>

The line above here is suspect since you likely want to return 2.54 *
inches

>
> inches = None
> while True:
>     try:
>         inches_number1 = input(input("How many inches you want to convert:
> "))
>         inches = float(inches_number1)
>         print ("You got", Inchtocm(inches), "cm.")
>         print ("You converted", inches, "inches to cm.")
>         break
>     except ValueError:
>         print ("This is not a number!")
>
> The code is incomplete and i am not getting a proper output:
>
> How many inches you want to convert: 455
> 455
> This is not a number!
> How many inches you want to convert:
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>


-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/c028eb0a/attachment-0001.html>

From jf_byrnes at comcast.net  Mon Feb 11 17:17:18 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Mon, 11 Feb 2013 10:17:18 -0600
Subject: [Tutor] Which pip for Ubuntu 12.04
In-Reply-To: <kfb2s5$lco$1@ger.gmane.org>
References: <kf4aog$dv9$1@ger.gmane.org>
	<1360410374.55825.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<kf8g87$unb$1@ger.gmane.org> <5117EC9E.8030207@gmail.com>
	<CAPM-O+w2=6yGRsJWtJxbdGZ4Qj8J6F7=DCBW0XbTkPLfSLfe7Q@mail.gmail.com>
	<kfb2s5$lco$1@ger.gmane.org>
Message-ID: <kfb5ic$i07$1@ger.gmane.org>

On 02/11/2013 09:31 AM, Jim Byrnes wrote:
> On 02/10/2013 01:10 PM, Joel Goldstick wrote:
>> On Sun, Feb 10, 2013 at 1:53 PM, Timo <timomlists at gmail.com> wrote:
>>
>>> Op 10-02-13 17:01, Jim Byrnes schreef:
>>>
>>>   On 02/09/2013 05:46 AM, Albert-Jan Roskam wrote:
>>>>
>>>>> ----- Original Message -----
>>>>>
>>>>>   From: Jim Byrnes <jf_byrnes at comcast.net> To: tutor at python.org Cc:
>>>>>> Sent: Saturday, February 9, 2013 3:02 AM Subject: [Tutor] Which pip
>>>>>> for Ubuntu 12.04
>>>>>>
>>>>>> How important is it to have the latest pip installed?
>>>>>>
>>>>>> Initially I want to use it to install the latest pymongo driver for
>>>>>> mongoDB. The pip version in the Ubuntu 12.04 repositories is 1.0.1.
>>>>>> I see on
>>>>>> http://www.pip-installer.org/**en/latest/<http://www.pip-installer.org/en/latest/>the
>>>>>> version is
>>>>>> 1.2.1.
>>>>>>
>>>>>> It certainly would be easier to install from the repositories but
>>>>>> will that version work to install the latest python packages?
>>>>>>
>>>>>> Thanks,  Jim
>>>>>>
>>>>>
>>>>> You could just try it? And downloading it and then doing sudo tar
>>>>> -xvr pip.tar.gz, cd ..., sudo python setup.py isn't that hard, is
>>>>> it?
>>>>>
>>>>
>>>> I usually install from the repositories or maybe a ppa so I don't
>>>> believe
>>>> I have ever done an install from a tar.  If necessary I will
>>>> familiarize
>>>> myself with the command you gave (yes I saw your followup changing
>>>> -xvr to
>>>> -xvf) and install that way.
>>>>
>>>> However, I still wonder if using the outdated pip from the repository
>>>> will allow me to install the latest python packages? Will trying to
>>>> use an
>>>> outdated pip cause me problems?
>>>>
>>> I doubt it will. Have a look at the pip changelog to see what has been
>>> changed.
>>>
>>> Timo
>>>
>>>
>>>
>>>
>>>>   But you're right, I also nnoticed that the Canonical repositories are
>>>>> a little outdated sometimes. Would be nice if it's possible to add
>>>>> pypi.org, so updating would be easier.
>>>>>
>>>>> Albert-Jan
>>>>>
>>>>
>>>>
>>>> Thanks,  Jim
>>>>
>>>> ______________________________**_________________
>>>> Tutor maillist  -  Tutor at python.org
>>>> To unsubscribe or change subscription options:
>>>> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>>>>
>>>>
>>>
>>> ______________________________**_________________
>>> Tutor maillist  -  Tutor at python.org
>>> To unsubscribe or change subscription options:
>>> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>>>
>>>
>>
>>
>>
>> You can upgrade pip with pip i believe:
>>
>> jcg at jcg-desktop:~/code/python$ pip install pip
>> Requirement already satisfied (use --upgrade to upgrade): pip in
>> /usr/lib/pymodules/python2.7
>> Cleaning up...
>> jcg at jcg-desktop:~/code/python$
>>
>>
>> jcg at jcg-desktop:~/code/python$ pip install --upgrade pip
>>
>>
>> Be sure to sudo before if you don't have permissions.
>>
>>
>
> I tried this on my laptop with the following results:
>
> jfb at jfb-tp:~$ pip --version
> pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)
> jfb at jfb-tp:~$ pip install pip
> Requirement already satisfied (use --upgrade to upgrade): pip in
> /usr/lib/python2.7/dist-packages
> Cleaning up...
>
> jfb at jfb-tp:~$ sudo pip install --upgrade pip
> [sudo] password for jfb:
> Downloading/unpacking pip
>    Running setup.py egg_info for package pip
>
>      warning: no files found matching '*.html' under directory 'docs'
>      warning: no previously-included files matching '*.txt' found under
> directory 'docs/_build'
>      no previously-included directories found matching
> 'docs/_build/_sources'
> Installing collected packages: pip
>    Found existing installation: pip 1.0
>      Uninstalling pip:
>        Successfully uninstalled pip
>    Running setup.py install for pip
>
>      warning: no files found matching '*.html' under directory 'docs'
>      warning: no previously-included files matching '*.txt' found under
> directory 'docs/_build'
>      no previously-included directories found matching
> 'docs/_build/_sources'
>      Installing pip script to /usr/local/bin
>      Installing pip-2.7 script to /usr/local/bin
> Successfully installed pip
> Cleaning up...
> jfb at jfb-tp:~$ pip --version
> bash: /usr/bin/pip: No such file or directory
> jfb at jfb-tp:~$
>
> I not sure what the significance of the missing *.txt and *.html files
> is but it looks like I have a path problem. I would appreciate any
> pointers from anyone who has already solved this.
>
> Thanks,  Jim
>

Apparently I was wrong about the path problem.  I closed the terminal I 
used for the update and opened another session and now I get:

$pip --version
pip 1.2.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

I guess the real test will come when I attempt to use it to install a 
package.

Regards,  Jim



From davea at davea.name  Mon Feb 11 17:25:01 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 11 Feb 2013 11:25:01 -0500
Subject: [Tutor] help with inch to cms conversion .
In-Reply-To: <CAAxLd=MkRofinGsM0L6vZXHxnaH86vShbJ0sFH6fq_8JQ=W9Pg@mail.gmail.com>
References: <CAAxLd=MkRofinGsM0L6vZXHxnaH86vShbJ0sFH6fq_8JQ=W9Pg@mail.gmail.com>
Message-ID: <51191B5D.8010900@davea.name>

On 02/11/2013 11:06 AM, Pravya Reddy wrote:
> Can you please help me with the code.
>
> #!/usr/bin/env python
> """
> inchtocm.py
>
> """

First, remove that try/except until the code is free of obvious bugs. 
It's masking where the error actually occurs.  Alternatively, include a 
variable there, and print the stack trace yourself.



>
> def Inchtocm(inches):
>      """Returns 2.54 * inches"""
>      return (2.54 * float(inches_number1))


As Joel pointed out, you're using a global instead of the parameter that 
was passed.  Call float() on  inches, not on some non-local variable.

>
> inches = None
> while True:
>      try:
>          inches_number1 = input(input("How many inches you want to convert:
> "))

Calling input(input())  doesn't do any favors.  It echoes the first 
response, and waits for another one.  The user doesn't probably realize 
that he has to type the number 455 twice.

>          inches = float(inches_number1)

Since you're presumably getting the exception on this line, you should 
print out the value you're trying to convert.  You can remove the print 
after it works.

>          print ("You got", Inchtocm(inches), "cm.")
>          print ("You converted", inches, "inches to cm.")
>          break
>      except ValueError:
>          print ("This is not a number!")
>
> The code is incomplete and i am not getting a proper output:
>
> How many inches you want to convert: 455
> 455
> This is not a number!
> How many inches you want to convert:
>
-- 
DaveA


From dyoo at hashcollision.org  Mon Feb 11 17:48:03 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Mon, 11 Feb 2013 09:48:03 -0700
Subject: [Tutor] help with inch to cms conversion .
In-Reply-To: <CAAxLd=MkRofinGsM0L6vZXHxnaH86vShbJ0sFH6fq_8JQ=W9Pg@mail.gmail.com>
References: <CAAxLd=MkRofinGsM0L6vZXHxnaH86vShbJ0sFH6fq_8JQ=W9Pg@mail.gmail.com>
Message-ID: <CAGZAPF6_akNLtrPWx-FwJ2oLp_defz0+p9SwVnqG73Xij8u-ZA@mail.gmail.com>

On Mon, Feb 11, 2013 at 9:06 AM, Pravya Reddy <pravyareddy at gmail.com> wrote:
> Can you please help me with the code.
>
> #!/usr/bin/env python
> """
> inchtocm.py
>
> """
>
> def Inchtocm(inches):
>     """Returns 2.54 * inches"""
>     return (2.54 * float(inches_number1))


I don't know if your curriculum talks about writing test cases for
functions.  If your instructors do not mention it, ask them, because
it's a crucial concept.  And if they have no clue about it (which is
unfortunately possible), you probably will need to stretch a little to
learn about them yourself.



Python's default testing framework, unittest, unfortunately requires
knowledge on how to use "classes", which you haven't probably seen
yet.  And it's a bit heavyweight, to boot.

In lieu of that, you can use something simpler: just run your
Inchtocm() with a few sample inputs first, and "assert" that they have
the right value, like this:


    def Inchtocm(inches):
        """Returns 2.54 * inches"""
        return (2.54 * float(inches_number1))

    assert Inchtocm(0) == 0


Note that we don't just call Inchtocm(), but check to see that it has
the right value.  This is important: otherwise, you are not really
"testing" the function, but just making it run.  The code above just
has one test: usually, you want to add a few more.  And you want to
write them _before_ you code up the function.

From alan.gauld at btinternet.com  Mon Feb 11 18:46:43 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 11 Feb 2013 17:46:43 +0000
Subject: [Tutor] How to log process handles and GDI objects in python
In-Reply-To: <F16FCEF86785004BBACC4CAB01973C38011845F3@US-BV-EXM01-P.global.tektronix.net>
References: <F16FCEF86785004BBACC4CAB01973C38011830A9@US-BV-EXM01-P.global.tektronix.net>
	<kf2nnd$5j2$1@ger.gmane.org>
	<F16FCEF86785004BBACC4CAB01973C38011845F3@US-BV-EXM01-P.global.tektronix.net>
Message-ID: <kfbapv$695$1@ger.gmane.org>

On 11/02/13 04:25, Pai, Yogesh M wrote:
> Hi Alan,
>
> Here are the additional details:
> Python version: 2.7.3
> OS version: Windows 7 -64 bit
>
> I have an application that has a automation layer built in python.
> During every subsequent runs, I want to log the process threads and GDI objects
 > ( the one you see in the Windows task manager) in my python code

You can definitely do it from Python using the Win32 API (which is in 
turn available in Python via ctypes or the pythonwin package).

But its a bit beyond the scope of this list, I'd suggest you will get 
more results on the Win32 mailing list (also on Gmane)...

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Mon Feb 11 18:50:15 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 11 Feb 2013 17:50:15 +0000
Subject: [Tutor] Code to open a website
In-Reply-To: <51184602.7050302@pearwood.info>
References: <CABQJB+A6bYDLJWYnV=MeDozs1At+BmY--eipzVrTDG+WwHypJw@mail.gmail.com>
	<kf6tdc$bgm$1@ger.gmane.org>
	<CACL+1audctW5-CmDoZU_pBwHU9X+Q=9WXRRCeNFwmaRM_L=siA@mail.gmail.com>
	<1360487830.28294.YahooMailNeo@web163803.mail.gq1.yahoo.com>
	<1360488335.4141.YahooMailNeo@web186005.mail.ir2.yahoo.com>
	<51184602.7050302@pearwood.info>
Message-ID: <kfbb0k$695$2@ger.gmane.org>

On 11/02/13 01:14, Steven D'Aprano wrote:

> exit() and quit() (as added by the site.py module) are for interactive use.

aha!

> They're mostly there for the benefit of newbies. Experienced developers (at
> least in the Unix/Linux world) usually know to exit interactive terminal
> apps with Ctrl-D. I believe you use Ctrl-Z <enter> under Windows.

Indeed, and Ctrl-D is how I exit the prompt...

> For programmatic use in scripts, use sys.exit(), since the site module is
> not guaranteed to run.

Thanks for that clarification. No need to change my coding habits after 
all then :-)

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Mon Feb 11 19:04:45 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 11 Feb 2013 18:04:45 +0000
Subject: [Tutor] temp conversion problem was: Re: (no subject)
In-Reply-To: <CAAxLd=MfZ_vw12NMUaze7Q5Waxh1ruGEQXEVvOL3o6dqaXdu8Q@mail.gmail.com>
References: <CAAxLd=MfZ_vw12NMUaze7Q5Waxh1ruGEQXEVvOL3o6dqaXdu8Q@mail.gmail.com>
Message-ID: <kfbbrq$iqd$1@ger.gmane.org>

Please always provide a meaningful subject line, it helps us find 
related posts more easily in future and will stimulate more focused 
responses than a no subject message (which implies we are dealing
with a newbie with no net experience and therefore requiring a lot of 
time/effort to help)...


On 11/02/13 15:56, Pravya Reddy wrote:
> Can You Plaese help me with the code.

Try to give us a bit more clue about what you think is wrong. What did 
you expect? What did you get? Otherwise we have to cut n paste the code 
and run it and then guess what you think is the problem...

The more work we have to do the less likely we will bother.


> def print_options():
>      print ("Options:")
>      print (" 'p' print options")
>      print (" 'c' convert from celsius")
>      print (" 'f' convert from fahrenheit")
>      print (" 'q' quit the program")

You could have had this return the menu as a string instead of printing it.
Or you could have got the user input inside the function and returned 
the choice directly.
Either would be better than this.

> def celsius_to_fahrenheit(c_temp):
>      return 9.0/5.0*c_temp+32
>
> def fahrenheit_to_celsius(f_temp):
>      return (f_temp - 32.0)*5.0/9.0
>
> choice = "p"

You could have printed the menu and got the users real choice here
rather than set a default that you never use...

> while choice != "q":
>      if choice == "c":
>          temp = input(input("Celsius temperature:"))
>          print ("Fahrenheit:",celsius_to_fahrenheit(temp))
>      elif choice == "f":
>          temp = input("Fahrenheit temperature:")
>          print ("Celsius:",fahrenheit_to_celsius(temp))
>      elif choice != "q":
>          print_options()

This prints the menu if the user did not choose f or q.
But wouldn't you want the menu displayed every time
round the loop?

>      choice = input(input("option:"))

Why two inputs?
This prints option and reads the input.
It then prints the option and reads another input.

> The Output i got is:
> Options:
>   'p' print options
>   'c' convert from celsius
>   'f' convert from fahrenheit
>   'q' quit the program
> option:c
> c

It prints the menu
Then it prints options and reads the value
Then it prints that value and reads another value
which it sets choice to.

If your print_menu() function returned the menu as a string
(and was called get_menu) you could do

choice = input(get_menu())

or if it got the choice in the menu function it would look like

choice = get_menu_item()

Which is a lot simpler to read.

HTH

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Mon Feb 11 19:19:19 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 11 Feb 2013 18:19:19 +0000
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
Message-ID: <kfbcn4$scj$1@ger.gmane.org>

On 11/02/13 05:14, neubyr wrote:
>
> I have a text file with each line in following format:
>
> Book Name, Author Name, Genre, Publication Date
>
> I would like to perform following queries on this file:
>   * Get all books written by an author
>   * Remove all books of an author
>   * Get information about a book (pretty print matching line!)
>   * Get books of particular genre
>
> Also, I would like to add and delete entries in this file. I am not
> planning to use any database for this purpose and would like to get
> better grasp on file parsing and classes/OOP. I need some help in
> creating classes and following are my initial thoughts:
>
> # Create a class for Book object
> class Book:
>    atributes: name, author_name, genre, publication-date
>

Yep, that looks like all you need.


> # Create
> Author:
>   attribute(s): name

No idea why you want this. A waste of space ...

> # Create class for reading and writing to the file
> class Booksfile:
>    methods: ??

You do not create classes for functions. The functions are part of the 
class. You can have a list of Books read from the file as an attribute 
of your Books class. Populate it at program startup and write the edited 
list back at termination. (Or any other time you make a
change for improved robustness)

> * How do I associate/relate Book and Author classes so that it will help
> me in getting information like 'get list of books written by an author'?
> Data attribute?

I woudn't have a separate Author class but, if you must, something like:

class Book:
   def __init__(self, theAuthor,theTitle):
       self.Author = theAuthor
       self.title = theTitle

class Author:
   def __init__(self,aName):
      self.name = aName

myBook = Book(Author('Jane Austin'), 'Pride & Prejudice')

> * Should I create a new Booksfile object for reading, writing and
> deleting entries in the file OR add corresponding methods to the book
> object itself?

Instance methods in the Book for reading/writing single lines
Class methods in Book for reading/writing the entire file
(or standalone functions could also be used) into a bookList class 
attribute.

> I am not planning to use SQLite or any database and would like to use
> text file only. Appreciate any help on designing such application.

As a learning exercise that's fine, for any real world problem it would 
be foolish. This is what databases were built for...

HTH

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From davea at davea.name  Mon Feb 11 19:36:42 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 11 Feb 2013 13:36:42 -0500
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <kfbcn4$scj$1@ger.gmane.org>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org>
Message-ID: <51193A3A.2080907@davea.name>

On 02/11/2013 01:19 PM, Alan Gauld wrote:
> On 11/02/13 05:14, neubyr wrote:
>>
>> <snip>
>>
>
>> * How do I associate/relate Book and Author classes so that it will help
>> me in getting information like 'get list of books written by an author'?
>> Data attribute?
>
> I woudn't have a separate Author class but, if you must, something like:
>
> class Book:
>    def __init__(self, theAuthor,theTitle):
>        self.Author = theAuthor
>        self.title = theTitle
>
> class Author:
>    def __init__(self,aName):
>       self.name = aName
>
> myBook = Book(Author('Jane Austin'), 'Pride & Prejudice')

Big problem with that;  then there may be multiple instances of Author, 
representing the same Author.  Instead, there needs to be a factory 
function which reuses the same Author objects if an additional book with 
the same author is encountered.  Without such an approach, one might as 
well stick with strings, which is what we each recommended.


-- 
DaveA

From pravyareddy at gmail.com  Mon Feb 11 21:07:16 2013
From: pravyareddy at gmail.com (Pravya Reddy)
Date: Mon, 11 Feb 2013 12:07:16 -0800
Subject: [Tutor] calling and returning functions.
Message-ID: <CAAxLd=N+jw9bNt1BNCdZ71hLOSQauzkZZ4PNDAimrsv69iHT4A@mail.gmail.com>

Can you please complete the code.

#!/usr/bin/env python
""" One function receives a value in inches and returns the equivalent
value in
cms like cm = 2.54 * in.The other function receives a value in cms and
returns
the equivalent value in inches like in = cm / 2.54."""

def conversion(inch,cm):
    """returns the value in cm and in."""
    return (2.54 * float(inches))
    return (float(cm) / 2.54)
def GetInt(prompt):
    """Returns a number, or None if user doesn't answer."""
    while True:
        said = input(input(prompt))
        if not said:
            return None
        try:
            number = int(said)
        except ValueError:
                print (said, "is not a number.")
                continue
                return number
def Test():
    first = GetInt('Please enter inches:')
    if first:
        second = GetInt('Please enter cms:')
        print(first, "*", 2.54, "=", "cms")
        print(second, "/", 2.54, "=", "in")
Test()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/e0d4468a/attachment.html>

From davea at davea.name  Mon Feb 11 21:20:05 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 11 Feb 2013 15:20:05 -0500
Subject: [Tutor] calling and returning functions.
In-Reply-To: <CAAxLd=N+jw9bNt1BNCdZ71hLOSQauzkZZ4PNDAimrsv69iHT4A@mail.gmail.com>
References: <CAAxLd=N+jw9bNt1BNCdZ71hLOSQauzkZZ4PNDAimrsv69iHT4A@mail.gmail.com>
Message-ID: <51195275.5020607@davea.name>

On 02/11/2013 03:07 PM, Pravya Reddy wrote:
> Can you please complete the code.
>
> #!/usr/bin/env python
> """ One function receives a value in inches and returns the equivalent
> value in
> cms like cm = 2.54 * in.The other function receives a value in cms and
> returns
> the equivalent value in inches like in = cm / 2.54."""
>
> def conversion(inch,cm):
>      """returns the value in cm and in."""
>      return (2.54 * float(inches))
>      return (float(cm) / 2.54)

This second line does nothing, since the first line always returns.
But it doesn't matter much, since you never call it.  Don't you want two 
functions?

> def GetInt(prompt):
>      """Returns a number, or None if user doesn't answer."""
>      while True:
>          said = input(input(prompt))

This has been corrected several times, by various people.  What do you 
think it does, and what do you wish it would do?  Is there ever a reason 
to call input with the results of a call to input?

>          if not said:
>              return None
>          try:
>              number = int(said)
>          except ValueError:
>                  print (said, "is not a number.")
>                  continue
>                  return number

The return never gets executed, since it follows an unconditional 
continue statement.  Do you perhaps want it dedented?

> def Test():
>      first = GetInt('Please enter inches:')
>      if first:
>          second = GetInt('Please enter cms:')

Do you always want to do a pair of conversions?  if not, why are you 
asking for both values before doing anything?

>          print(first, "*", 2.54, "=", "cms")

This prints an equation without actually printing a result.

>          print(second, "/", 2.54, "=", "in")

Ditto.

> Test()
>



-- 
DaveA

From ahmetcan196 at gmail.com  Mon Feb 11 21:21:25 2013
From: ahmetcan196 at gmail.com (Ahmet Can KEPENEK)
Date: Mon, 11 Feb 2013 22:21:25 +0200
Subject: [Tutor] Additional help
In-Reply-To: <CAF6DajLkU4vF2Y_SWRX1niie3ENDnn0XcKrBheXWpgJVox3hCA@mail.gmail.com>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>
	<CAF6DajLkU4vF2Y_SWRX1niie3ENDnn0XcKrBheXWpgJVox3hCA@mail.gmail.com>
Message-ID: <CALWZNGgLqdnL3nMQ7bQp=W8B7p5SVCGhkA2R-cbSC+++zoq8Bw@mail.gmail.com>

Hello,
I used regular expression module of python. I checked binary and denary
numbers. If input is invalid i ask again. I edited your code. Code is below
follow as .


import re
def show_menu():
 print("=======================")
 print("1-binary to denary")
 print("2-denary to binary")
 print("3-exit")
 print("=======================")


while True:
    show_menu()

    choice = raw_input("please enter an option: ")

    if choice == '1':
        binary = raw_input("Please enter a binary number: ")
        if re.match("^[0-1]*$", binary):
            denary = 0
            place_value = 1

            for i in binary [::-1]:
                        denary += place_value * int(i)
                        place_value *= 2

            print("The result is",denary)

        else:
            print("Warning! Please enter a binary number")
            continue

    elif choice == '2':
        denary2 = raw_input("Please enter a denary number: ")
        if re.match("^[0-9]*$", denary2):
            denary2 = int(denary2)
            remainder = ''
            while denary2 > 0:
                remainder = str(denary2 % 2) + remainder
                denary2 >>= 1
            print("The result is",remainder)

        else:
            print("Warning! Please enter a denary number")
            continue

    elif choice == '3':
     break

    elif choice not in '1' or '2' or '3':
        print("Invalid input-try again!")






Output is
----------
=======================
1-binary to denary
2-denary to binary
3-exit
=======================
please enter an option: 1
Please enter a binary number: 110
('The result is', 6)
=======================
1-binary to denary
2-denary to binary
3-exit
=======================
please enter an option: 1
Please enter a binary number: 12
Warning! Please enter a binary number
=======================
1-binary to denary
2-denary to binary
3-exit
=======================
please enter an option: 3
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/23b4ec3d/attachment-0001.html>

From neubyr at gmail.com  Mon Feb 11 23:48:21 2013
From: neubyr at gmail.com (neubyr)
Date: Mon, 11 Feb 2013 16:48:21 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <51188827.8000301@davea.name>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<51188827.8000301@davea.name>
Message-ID: <CALFxCvxQAsA3iLv4Lyjea7LQXuxPeVFdk1Mjn8_9YYB8tHL0AA@mail.gmail.com>

Thank you for your inputs Dave. That's really helpful. Reply in-line below:


On Sun, Feb 10, 2013 at 11:56 PM, Dave Angel <davea at davea.name> wrote:

> On 02/11/2013 12:14 AM, neubyr wrote:
>
>> I have a text file with each line in following format:
>>
>> Book Name, Author Name, Genre, Publication Date
>>
>> I would like to perform following queries on this file:
>>   * Get all books written by an author
>>   * Remove all books of an author
>>   * Get information about a book (pretty print matching line!)
>>   * Get books of particular genre
>>
>> Also, I would like to add and delete entries in this file. I am not
>> planning to use any database for this purpose and would like to get better
>> grasp on file parsing and classes/OOP.
>>
>
> I take it from this that this is a class assignment, and that neither
> speed nor enormous data capacity nor concurrent operation is a requirement.
>  But your professor may have other requirements that you haven't told us
> about.


Not a class assignment, just picked up this problem as a learning exercise.


>
>
> I need some help in creating classes
>
>> and following are my initial thoughts:
>>
>> # Create a class for Book object
>> class Book:
>>    atributes: name, author_name, genre, publication-date
>>
>> # Create
>> Author:
>>   attribute(s): name
>>
>
> Is this in order to save space, since each Book instance can then have a
> reference to an Author object, rather than a reference to a string
> containing the Author's name.
>
> If you deem this class useful, then don't you also want one for Genre ?



Hmm.. I didn't think about saving space by reference an object. I created
separate class thinking from database/ORM perspective. I am not planning to
use it right now anyway, but if I was creating a non-trivial application
with database models then I would have had Books tables, Authors tables
etc..

I think I don't need it here though.



>
>
>
>
>> # Create class for reading and writing to the file
>> class Booksfile:
>>    methods: ??
>>
>
> Why ?  Are you transliterating this from Java ?



Scrapped that class - adding add/list/delete methods in Book class. Thanks
for pointing it out.


>
>
>
>>
>> * How do I associate/relate Book and Author classes so that it will help
>> me
>> in getting information like 'get list of books written by an author'? Data
>> attribute?
>>
>
> If performance doesn't matter, then create one list of Book instances, and
> search it for whichever characteristics you like.
>
>
>
>  * Should I create a new Booksfile object for reading, writing and deleting
>> entries in the file OR add corresponding methods to the book object
>> itself?
>>
>
> Neither, a pair of regular functions will do fine.  One that loads when
> you start the program, and another that saves the file when you exit. If
> you really expect to update the file incrementally, deleting entries in it,
> then think hard about your decision to roll your own database.  A text file
> isn't random access.
>
>
>
>> I am not planning to use SQLite or any database and would like to use text
>> file only. Appreciate any help on designing such application.
>>
>>
>>
> The real question is where you might proceed after meeting these first
> requirements.  For example, if you expect the list to grow to a few hundred
> million entries, then you'll need to be very careful about layout.  And
> starting and exiting the program would be very slow, since you can do
> nothing till all the data has been loaded in and converted to objects.
>
> Or perhaps you'll want to have another file with additional author data,
> associated with the first by carefully spelling the author's name the same
> in all cases.  In that case, having a separate Author class makes great
> sense.  So if you expect to grow in that direction, then you should create
> the class now, even though it has only one attribute.
>
>
> --
> DaveA
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>


- N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/63a854e2/attachment.html>

From neubyr at gmail.com  Mon Feb 11 23:49:39 2013
From: neubyr at gmail.com (neubyr)
Date: Mon, 11 Feb 2013 16:49:39 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <51193A3A.2080907@davea.name>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
Message-ID: <CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>

On Mon, Feb 11, 2013 at 12:36 PM, Dave Angel <davea at davea.name> wrote:

> On 02/11/2013 01:19 PM, Alan Gauld wrote:
>
>> On 11/02/13 05:14, neubyr wrote:
>>
>>>
>>> <snip>
>>>
>>>
>>  * How do I associate/relate Book and Author classes so that it will help
>>> me in getting information like 'get list of books written by an author'?
>>> Data attribute?
>>>
>>
>> I woudn't have a separate Author class but, if you must, something like:
>>
>> class Book:
>>    def __init__(self, theAuthor,theTitle):
>>        self.Author = theAuthor
>>        self.title = theTitle
>>
>> class Author:
>>    def __init__(self,aName):
>>       self.name = aName
>>
>> myBook = Book(Author('Jane Austin'), 'Pride & Prejudice')
>>
>
> Big problem with that;  then there may be multiple instances of Author,
> representing the same Author.  Instead, there needs to be a factory
> function which reuses the same Author objects if an additional book with
> the same author is encountered.  Without such an approach, one might as
> well stick with strings, which is what we each recommended.
>
>
> --
> DaveA
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>



Thank you for suggestions - Mitya, Dave and Alan.

I am doing it as a learning exercise and it's not a class assignment. I
have little experience with Ruby and now trying to learn Python. It's not
going to be any production application and I haven't thought about
concurrency problems yet.

Based on suggestions, following is a code snippet that I have right now. I
agree that there isn't any need of separate Author object right now, so I
may remove it as well. I have created a class method 'list_by_author' to
return list of books. I am not sure if class method is right approach to
implement 'list_by_author' function as a class method is typically used as
an alternative constructor. Here I am returning list of objects and not
just an object.

Any suggestions for improving this code will be really useful.


class Book(object):
  def __init__(self,name,author,genre,pubdate):
    self.name     = name
    self.author   = author
    self.genre    = genre
    self.pubdate  = pubdate

  # TODO: use csv module
  # write/add method
  def add(self,uname,kname):
    """ Write book info to a file """
    pass

  @classmethod
  def list_by_author(self,author):
    """ Return list of books of an author """
    bookfile = config.bookfile
    books = [] # empty list - used as list of Books
    # TODO: improve regex
    regex = re.compile(author)
    with open (bookfile,'r') as f:
      for line in f:
        if regex.findall(line):
          # error prone - if name contains comma
          l = line.split(',')
          # create book object and append it to a list
          book = self(*l)
          books.append(book)
    return books # return list of books



class Author(object):
  def __init__(self,name):
    self.name = name

  def books(self):
    """ Get list of books """
    books = Book.list_by_author(self.name)
    return books



- N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/16f58145/attachment.html>

From alan.gauld at btinternet.com  Tue Feb 12 00:16:40 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 11 Feb 2013 23:16:40 +0000
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
Message-ID: <kfbu4l$46p$1@ger.gmane.org>

On 11/02/13 22:49, neubyr wrote:

> is right approach to implement 'list_by_author' function as a class
> method is typically used as an alternative constructor.

Not at all that is only one use case for class methods.
A class method is *any* method that operates on the whole class of 
objects - i.e. all instances(potentially including those still to be 
created)

Now I agree that in some lanmguages they tend to be limited to factory 
metjods(eg Objective C implicitly goes that way) but in others  like 
Smalltalk search methods and persistence etc are often found as class 
methods. In Python, because of it's hybrid nature, these are often 
"demoted" to global scope functions.


> Here I am
> returning list of objects and not just an object.

Which is to say a subset of the class Book.
Therefore quite reasonably a class method.

>    @classmethod
>    def list_by_author(self,author):
>      """ Return list of books of an author """
>      bookfile = config.bookfile
>      books = [] # empty list - used as list of Books
>      # TODO: improve regex
>      regex = re.compile(author)
>      with open (bookfile,'r') as f:
>        for line in f:
>          if regex.findall(line):
>            # error prone - if name contains comma
>            l = line.split(',')
>            # create book object and append it to a list
>            book = self(*l)
>            books.append(book)
>      return books # return list of books

I'd probably, for a small dataset, load a list of books into the class 
at startup and save it at termination. Which makes the search code 
easier and potentially can be data driven so you pass the filter 
attribute as a parameter. You can then use getattr() to find the value:

def findBooks(cls, param, value):
     return [book for book in books if getattr(book, param) == value]

You could make it more flexible still by defining the filter as a 
function and passing a lambda:

def findBooks(cls, filterExp):
     return [book for book in books if filterExp(book)]


Usage example:

DickensBooks = Book.findBook(lambda b: 'Dickens' in b.author)


Of course if you have a huge dataset then that won't work - which brings 
us back to a database :-)

HTH

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Tue Feb 12 00:21:53 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 11 Feb 2013 23:21:53 +0000
Subject: [Tutor] calling and returning functions.
In-Reply-To: <CAAxLd=N+jw9bNt1BNCdZ71hLOSQauzkZZ4PNDAimrsv69iHT4A@mail.gmail.com>
References: <CAAxLd=N+jw9bNt1BNCdZ71hLOSQauzkZZ4PNDAimrsv69iHT4A@mail.gmail.com>
Message-ID: <kfbuee$6ur$1@ger.gmane.org>

On 11/02/13 20:07, Pravya Reddy wrote:
>
> def conversion(inch,cm):
>      """returns the value in cm and in."""
>      return (2.54 * float(inches))
>      return (float(cm) / 2.54)

return exits the function so the second return statement never gets 
executed.

> def GetInt(prompt):
>      """Returns a number, or None if user doesn't answer."""
>      while True:
>          said = input(input(prompt))

You are still using double input. That is almost never the
right thing to do.

>          if not said:
>              return None
>          try:
>              number = int(said)
>          except ValueError:
>                  print (said, "is not a number.")
>                  continue
>                  return number

The continue will jump right back to the loop start so the return will 
never be executed.

The only way this function will ever exit is if the user hits Enter 
twice and then it will return None.

You need to rethink the logic here.

> def Test():
>      first = GetInt('Please enter inches:')
>      if first:
>          second = GetInt('Please enter cms:')
>          print(first, "*", 2.54, "=", "cms")
>          print(second, "/", 2.54, "=", "in")

Since GetInt() can only ever return None the if will always fail and 
nothing will ever be printed.

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From neubyr at gmail.com  Tue Feb 12 01:55:36 2013
From: neubyr at gmail.com (neubyr)
Date: Mon, 11 Feb 2013 18:55:36 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <kfbu4l$46p$1@ger.gmane.org>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org>
Message-ID: <CALFxCvx8qKMDPWUGn3ETVy8QDOz5m+dfsSdv+uoJS3pKiPrwPQ@mail.gmail.com>

On Mon, Feb 11, 2013 at 5:16 PM, Alan Gauld <alan.gauld at btinternet.com>wrote:

> On 11/02/13 22:49, neubyr wrote:
>
>  is right approach to implement 'list_by_author' function as a class
>> method is typically used as an alternative constructor.
>>
>
> Not at all that is only one use case for class methods.
> A class method is *any* method that operates on the whole class of objects
> - i.e. all instances(potentially including those still to be created)
>
> Now I agree that in some lanmguages they tend to be limited to factory
> metjods(eg Objective C implicitly goes that way) but in others  like
> Smalltalk search methods and persistence etc are often found as class
> methods. In Python, because of it's hybrid nature, these are often
> "demoted" to global scope functions.
>
>
>
>  Here I am
>> returning list of objects and not just an object.
>>
>
> Which is to say a subset of the class Book.
> Therefore quite reasonably a class method.
>
>
>     @classmethod
>>    def list_by_author(self,author):
>>      """ Return list of books of an author """
>>      bookfile = config.bookfile
>>      books = [] # empty list - used as list of Books
>>      # TODO: improve regex
>>      regex = re.compile(author)
>>      with open (bookfile,'r') as f:
>>        for line in f:
>>          if regex.findall(line):
>>            # error prone - if name contains comma
>>            l = line.split(',')
>>            # create book object and append it to a list
>>            book = self(*l)
>>            books.append(book)
>>      return books # return list of books
>>
>
> I'd probably, for a small dataset, load a list of books into the class at
> startup and save it at termination. Which makes the search code easier and
> potentially can be data driven so you pass the filter attribute as a
> parameter. You can then use getattr() to find the value:
>
> def findBooks(cls, param, value):
>     return [book for book in books if getattr(book, param) == value]
>
> You could make it more flexible still by defining the filter as a function
> and passing a lambda:
>
> def findBooks(cls, filterExp):
>     return [book for book in books if filterExp(book)]
>
>
> Usage example:
>
> DickensBooks = Book.findBook(lambda b: 'Dickens' in b.author)
>
>
> Of course if you have a huge dataset then that won't work - which brings
> us back to a database :-)
>
>
> HTH
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
>


That's really helpful Alan. Thank you for your inputs on class methods and
how can I modify my existing find/list method.

I am not using any database/ORM as I am trying to learn basic search/filter
operations on file and enumerator objects. Also, ORMs generally add magic
methods based on associations (at least with Ruby ActiveRecord: e.g.
has_many and belongs_to associations). I would like to do it 'manually'
before using any other library.

--
N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/5d295de6/attachment.html>

From steve at pearwood.info  Tue Feb 12 01:58:31 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Tue, 12 Feb 2013 11:58:31 +1100
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
Message-ID: <511993B7.8040703@pearwood.info>

On 11/02/13 16:14, neubyr wrote:
> I have a text file with each line in following format:
>
> Book Name, Author Name, Genre, Publication Date
>
> I would like to perform following queries on this file:
>   * Get all books written by an author
>   * Remove all books of an author
>   * Get information about a book (pretty print matching line!)
>   * Get books of particular genre
>
> Also, I would like to add and delete entries in this file. I am not
> planning to use any database for this purpose and would like to get better
> grasp on file parsing and classes/OOP. I need some help in creating classes
> and following are my initial thoughts:
>
> # Create a class for Book object
> class Book:
>    atributes: name, author_name, genre, publication-date


You could use a class. But since Books don't have any behaviour, a simple
struct or record would be better than a class:


from collections import namedtuple
Book = namedtuple("Book", "name author genre date")

lotr = Book("The Hobbit", "J.R.R. Tolkien", "Fantasy", "1937")


This has the advantage of simplicity. But if you need to add behaviour to the
Book class, e.g. validation of the fields, you should be able to inherit from
a named tuple. Untested:


class Book(namedtuple("Book", "name author genre date")):
     @property
     def genre(self):
         return super(Book, self).genre
     @genre.setter(self, value):
         super(Book, self).genre = value.title()  # 'fantasy' -> 'Fantasy'


> # Create
> Author:
>   attribute(s): name


As Alan suggested, a waste of time. Since the Author has no behaviour and
only a single field, why not just use a string?



> # Create class for reading and writing to the file
> class Booksfile:
>    methods: ??

Why should this be a class? This is not Java.

http://steve-yegge.blogspot.com.au/2006/03/execution-in-kingdom-of-nouns.html


Just write a function that reads a file and returns a list of Books.

Or perhaps I should say:


Programmer().getwriter().write(MakeCallable(FileReader).setmethod("read",
     return_type=list, return_item_values=Book)



> * How do I associate/relate Book and Author classes so that it will help me
> in getting information like 'get list of books written by an author'? Data
> attribute?

You want to map authors to books. Whenever you want a mapping, use a dict:


data = {
     'J.R.R. Tolkien': [Book("The Hobbit"), Book("The Lord of the Rings")],
     'Tom Clancy': [Book("The Hunt for Red October")],
     'Terry Pratchett': [Book('Small Gods'), Book('Night Watch'),
         Book('Nation')],
     'Stephenie Meyer': [
         Book('Something about abusive boyfriends but that's okay because they sparkle')],
     }



> * Should I create a new Booksfile object for reading, writing and deleting
> entries in the file OR add corresponding methods to the book object itself?

Heavens no. Why should the book know about the library catalog it is listed in?
Your book class should be responsible for the book, and nothing but the book.




-- 
Steven

From neubyr at gmail.com  Tue Feb 12 02:33:04 2013
From: neubyr at gmail.com (neubyr)
Date: Mon, 11 Feb 2013 19:33:04 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <511993B7.8040703@pearwood.info>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<511993B7.8040703@pearwood.info>
Message-ID: <CALFxCvwAoepQN+nPzXKUU+9ENR49yQSni4_ny6XVO583FSGu-A@mail.gmail.com>

On Mon, Feb 11, 2013 at 6:58 PM, Steven D'Aprano <steve at pearwood.info>wrote:

> On 11/02/13 16:14, neubyr wrote:
>
>> I have a text file with each line in following format:
>>
>> Book Name, Author Name, Genre, Publication Date
>>
>> I would like to perform following queries on this file:
>>   * Get all books written by an author
>>   * Remove all books of an author
>>   * Get information about a book (pretty print matching line!)
>>   * Get books of particular genre
>>
>> Also, I would like to add and delete entries in this file. I am not
>> planning to use any database for this purpose and would like to get better
>> grasp on file parsing and classes/OOP. I need some help in creating
>> classes
>> and following are my initial thoughts:
>>
>> # Create a class for Book object
>> class Book:
>>    atributes: name, author_name, genre, publication-date
>>
>
>
> You could use a class. But since Books don't have any behaviour, a simple
> struct or record would be better than a class:
>
>
> from collections import namedtuple
> Book = namedtuple("Book", "name author genre date")
>
> lotr = Book("The Hobbit", "J.R.R. Tolkien", "Fantasy", "1937")
>
>
> This has the advantage of simplicity. But if you need to add behaviour to
> the
> Book class, e.g. validation of the fields, you should be able to inherit
> from
> a named tuple. Untested:
>
>
> class Book(namedtuple("Book", "name author genre date")):
>     @property
>     def genre(self):
>         return super(Book, self).genre
>     @genre.setter(self, value):
>         super(Book, self).genre = value.title()  # 'fantasy' -> 'Fantasy'
>
>
>
>  # Create
>> Author:
>>   attribute(s): name
>>
>
>
> As Alan suggested, a waste of time. Since the Author has no behaviour and
> only a single field, why not just use a string?
>
>
>
>
>  # Create class for reading and writing to the file
>> class Booksfile:
>>    methods: ??
>>
>
> Why should this be a class? This is not Java.
>
> http://steve-yegge.blogspot.**com.au/2006/03/execution-in-**
> kingdom-of-nouns.html<http://steve-yegge.blogspot.com.au/2006/03/execution-in-kingdom-of-nouns.html>
>
>
> Just write a function that reads a file and returns a list of Books.
>
> Or perhaps I should say:
>
>
> Programmer().getwriter().**write(MakeCallable(FileReader)**
> .setmethod("read",
>     return_type=list, return_item_values=Book)
>
>
>
>
>  * How do I associate/relate Book and Author classes so that it will help
>> me
>> in getting information like 'get list of books written by an author'? Data
>> attribute?
>>
>
> You want to map authors to books. Whenever you want a mapping, use a dict:
>
>
> data = {
>     'J.R.R. Tolkien': [Book("The Hobbit"), Book("The Lord of the Rings")],
>     'Tom Clancy': [Book("The Hunt for Red October")],
>     'Terry Pratchett': [Book('Small Gods'), Book('Night Watch'),
>         Book('Nation')],
>     'Stephenie Meyer': [
>         Book('Something about abusive boyfriends but that's okay because
> they sparkle')],
>
>     }
>
>
>
>  * Should I create a new Booksfile object for reading, writing and deleting
>> entries in the file OR add corresponding methods to the book object
>> itself?
>>
>
> Heavens no. Why should the book know about the library catalog it is
> listed in?
> Your book class should be responsible for the book, and nothing but the
> book.
>
>
>
>
> --
> Steven
>
>

Thanks Steven!

I have used namedtuple like approach in few Ruby programs (not the same
problem) using Structs, but it didn't strike me for this exercise [1]. I am
going to try this approach soon.

I haven't added any validation methods for fields yet, but I am planning to
add them soon - e.g. validate alphabets or alphanumeric characters etc. It
may bring up new questions from my side, but I am sure you all will be glad
to help.. :)

1. http://www.ruby-doc.org/core-1.9.3/Struct.html

-N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/5e80df20/attachment-0001.html>

From steve at pearwood.info  Tue Feb 12 02:34:28 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Tue, 12 Feb 2013 12:34:28 +1100
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <kfbu4l$46p$1@ger.gmane.org>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org>
Message-ID: <51199C24.1060708@pearwood.info>

On 12/02/13 10:16, Alan Gauld wrote:
> On 11/02/13 22:49, neubyr wrote:
>
>> is right approach to implement 'list_by_author' function as a class
>> method is typically used as an alternative constructor.
>
> Not at all that is only one use case for class methods.
> A class method is *any* method that operates on the whole class of
>objects - i.e. all instances(potentially including those still to be
>created)


Strictly speaking, a class method is just a method which takes as its
first argument the class itself, not the instance. What it does with
that is completely open.

The usual thing is to use class methods for alternative constructors,
e.g. Decimal.fromfloat.

If the class keeps a list of all instances, then the class method
could walk the list and operate on each instance in turn. (But why
would you do that?)

If the class method modifies the class itself, then it could indirectly
have an effect on each instance.

Although class methods could do anything, it is hard to think of
actually useful things for them to do apart from being used as a
constructor.

[...]
>> Here I am
>> returning list of objects and not just an object.
>
> Which is to say a subset of the class Book.
> Therefore quite reasonably a class method.

Just a minute, I think that is completely wrong. A Book is not a set,
so how can you have subset of it?

What is a subset of "Pride and Prejudice"? Perhaps chapter 5.

There are more problems with this idea that you query the Book to get
a list of books by some author. Suppose you did this:

prpr = Book("Pride and Prejudice", "Jane Austin")
prpr.list_by_author()

Now *each and every* book is responsible for tracking all the other
books by the same author. This is a lousy design. Even worse:

prpr.list_by_author("Jane Austin")


since now books are responsible for tracking ALL books by ALL authors,
since the caller could say:

prpr.list_by_author("Leo Tolstoy")


Of course, books should know their own author, not the authors of other
books, but authors should know all their own books:

author = prpr.author  # --> Author("Jane Austin")

author.get_books()  # --> return a list of books by this author


This is an argument for making Authors a class, with behaviour, rather
than just a string.


>> @classmethod
>> def list_by_author(self,author):
>>     """ Return list of books of an author """
>>     bookfile = config.bookfile
>>     books = [] # empty list - used as list of Books
[snip]


First off, by convention the first argument to a class method should be
called "cls", not "self".

Secondly, here you are relying on a mysterious global "config", which
points to a bookfile. What does this have to do with a book?

- Does a nail keep track of the packet it came from?

- Why should a book keep track of the catalog it was listed in?

This should be a top level function, not a Book method.

The rest of the method's design is also poor. You have already read
the file once, to get the initial set of books. So why read the file
again, every time you want to get some piece of information.

Big databases, capable of holding billions of pieces of data, have
to use disk-based storage because you can't keep that much data in
memory at once. For anything smaller, you should only read and write
to disk for persistence, everything else should use in-memory data
structures. In this case, that means a dict.


>> return books # return list of books

Really? Thank goodness for the comment, I wouldn't have understood
that line of code otherwise!

*wink*



-- 
Steven

From alan.gauld at btinternet.com  Tue Feb 12 02:56:24 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 12 Feb 2013 01:56:24 +0000
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <51199C24.1060708@pearwood.info>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
Message-ID: <kfc7g5$ft4$1@ger.gmane.org>

On 12/02/13 01:34, Steven D'Aprano wrote:

> If the class keeps a list of all instances, then the class method
> could walk the list and operate on each instance in turn. (But why
> would you do that?)

Because its how classes work in some languages (like smalltalk).
The class object represents all instances of the class.

> Although class methods could do anything, it is hard to think of
> actually useful things for them to do apart from being used as a
> constructor.

Again its the norm in Smalltalk apps to implement electors(searches) and 
other class wide operations in the class methods. Most Smalltalk classes 
have at least 5 or 6 class methods.

>> Which is to say a subset of the class Book.
>> Therefore quite reasonably a class method.
>
> Just a minute, I think that is completely wrong. A Book is not a set,
> so how can you have subset of it?

A Book is an instance of the class Book.
Book is a class of object encompassing all books.
So returning a subset of all instances of the class is normal class 
method behaviour.

> What is a subset of "Pride and Prejudice"? Perhaps chapter 5.

That might be a chapter or two? But Pride and Prejudice is not the class 
Book, it's an instance of Book.

> There are more problems with this idea that you query the Book to get
> a list of books by some author. Suppose you did this:
>
> prpr = Book("Pride and Prejudice", "Jane Austin")
> prpr.list_by_author()

No, you don't query the instance, you should query the class.

Book.list_by_author()   # -> a dict of lists keyed by author name?

(One of the unfortunate features of Python's implementation of
class methods is that you can call them from an instance which
doesn't really make sense! IMHO)

> Now *each and every* book is responsible for tracking all the other
> books by the same author. This is a lousy design. Even worse:
>
> prpr.list_by_author("Jane Austin")
>
> since now books are responsible for tracking ALL books by ALL authors,

Which is why it should be a class method not an instance one.
And in the real world we'd do that by building class methods
querying a database.

> Of course, books should know their own author, not the authors of other
> books, but authors should know all their own books:

instances should, I agree.

The Book class should know about all books in the class.

> First off, by convention the first argument to a class method should be
> called "cls", not "self".

Yes, my bad.
Although it is of course only a Python convention.

> Secondly, here you are relying on a mysterious global "config", which
> points to a bookfile. What does this have to do with a book?

The storage mechanism is an implementation detail. In Smalltalk its part 
of the infrastructure of the runtime.

> - Does a nail keep track of the packet it came from?

No, but the nail factory may keep track of the nails it
produces, or at least the batches...

> - Why should a book keep track of the catalog it was listed in?

A book wouldn't. but the Book class might.

> The rest of the method's design is also poor. You have already read
> the file once, to get the initial set of books. So why read the file
> again, every time you want to get some piece of information.

This I agree with. It would be better to persist the data somewhere for 
a small dataset.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From richkappler at gmail.com  Tue Feb 12 05:27:32 2013
From: richkappler at gmail.com (richard kappler)
Date: Mon, 11 Feb 2013 23:27:32 -0500
Subject: [Tutor] sockets and networking
Message-ID: <CAG7edPEwbriEtLspHpnd8Ks7-UKLPQEDo6ejmJy0WO-k-B=meQ@mail.gmail.com>

I want to be able to communicate between a raspberry pi and a laptop
running ubuntu, transferring text from the pi to the laptop. Specifically
the Pi would be running poscketsphinx speech rec and would send the
generated text through the crossover between the two ethernet ports to a
python program on the laptop. Someone suggest using sockets, with which I
am completely unfamiliar. I've read the socket docs and admit I find them
quite confusing. Can someone point me to a/some good beginner tutorials on
sockets/networking for me to look at?

regards, Richard

-- 

quando omni flunkus moritati
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130211/42dfb7b3/attachment.html>

From eryksun at gmail.com  Tue Feb 12 05:37:40 2013
From: eryksun at gmail.com (eryksun)
Date: Mon, 11 Feb 2013 23:37:40 -0500
Subject: [Tutor] sockets and networking
In-Reply-To: <CAG7edPEwbriEtLspHpnd8Ks7-UKLPQEDo6ejmJy0WO-k-B=meQ@mail.gmail.com>
References: <CAG7edPEwbriEtLspHpnd8Ks7-UKLPQEDo6ejmJy0WO-k-B=meQ@mail.gmail.com>
Message-ID: <CACL+1as2b63ttBdDmL=rkUap3fJCjy1LTajg2VSFSDQa1XKgNg@mail.gmail.com>

On Mon, Feb 11, 2013 at 11:27 PM, richard kappler <richkappler at gmail.com> wrote:
> I've read the socket docs and admit I find them quite confusing. Can someone
> point me to a/some good beginner tutorials on sockets/networking for me to
> look at?

Try Doug Hellmann's Python Module of the Week:

http://www.doughellmann.com/PyMOTW/socket

From alan.gauld at btinternet.com  Tue Feb 12 09:47:46 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 12 Feb 2013 08:47:46 +0000
Subject: [Tutor] sockets and networking
In-Reply-To: <CAG7edPEwbriEtLspHpnd8Ks7-UKLPQEDo6ejmJy0WO-k-B=meQ@mail.gmail.com>
References: <CAG7edPEwbriEtLspHpnd8Ks7-UKLPQEDo6ejmJy0WO-k-B=meQ@mail.gmail.com>
Message-ID: <kfcvjf$8q1$1@ger.gmane.org>

On 12/02/13 04:27, richard kappler wrote:

> ports to a python program on the laptop. Someone suggest using sockets,
> with which I am completely unfamiliar. I've read the socket docs and
> admit I find them quite confusing. Can someone point me to a/some good
> beginner tutorials on sockets/networking for me to look at?

You can try the network programming topic in my tutor (v2 only)

Its probably worth reading the Inter-process comms topic too since some 
of the concepts apply to sockets.

After that the HowTo and other official docs should make sense.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From eryksun at gmail.com  Tue Feb 12 10:02:52 2013
From: eryksun at gmail.com (eryksun)
Date: Tue, 12 Feb 2013 04:02:52 -0500
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <kfc7g5$ft4$1@ger.gmane.org>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<kfc7g5$ft4$1@ger.gmane.org>
Message-ID: <CACL+1avfjhvRAAv=4NGvFpTbisUiPH-BvW9zQUOZFkkjbw=14w@mail.gmail.com>

On Mon, Feb 11, 2013 at 8:56 PM, Alan Gauld <alan.gauld at btinternet.com> wrote:
> (One of the unfortunate features of Python's implementation of
> class methods is that you can call them from an instance which
> doesn't really make sense! IMHO)

Smalltalk derives a metaclass for the class methods, in parallel with
the class. That's an option in Python, if you prefer it. It can hinder
multiple inheritance, however. Using a classmethod object is more
flexible.

From neubyr at gmail.com  Tue Feb 12 18:32:18 2013
From: neubyr at gmail.com (neubyr)
Date: Tue, 12 Feb 2013 11:32:18 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <51199C24.1060708@pearwood.info>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
Message-ID: <CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>

On Mon, Feb 11, 2013 at 7:34 PM, Steven D'Aprano <steve at pearwood.info>wrote:

> On 12/02/13 10:16, Alan Gauld wrote:
>
>> On 11/02/13 22:49, neubyr wrote:
>>
>>  is right approach to implement 'list_by_author' function as a class
>>> method is typically used as an alternative constructor.
>>>
>>
>> Not at all that is only one use case for class methods.
>> A class method is *any* method that operates on the whole class of
>> objects - i.e. all instances(potentially including those still to be
>> created)
>>
>
>
> Strictly speaking, a class method is just a method which takes as its
> first argument the class itself, not the instance. What it does with
> that is completely open.
>
> The usual thing is to use class methods for alternative constructors,
> e.g. Decimal.fromfloat.
>
> If the class keeps a list of all instances, then the class method
> could walk the list and operate on each instance in turn. (But why
> would you do that?)
>
> If the class method modifies the class itself, then it could indirectly
> have an effect on each instance.
>
> Although class methods could do anything, it is hard to think of
> actually useful things for them to do apart from being used as a
> constructor.
>
> [...]
>
>  Here I am
>>> returning list of objects and not just an object.
>>>
>>
>> Which is to say a subset of the class Book.
>> Therefore quite reasonably a class method.
>>
>
> Just a minute, I think that is completely wrong. A Book is not a set,
> so how can you have subset of it?
>
> What is a subset of "Pride and Prejudice"? Perhaps chapter 5.
>
> There are more problems with this idea that you query the Book to get
> a list of books by some author. Suppose you did this:
>
> prpr = Book("Pride and Prejudice", "Jane Austin")
> prpr.list_by_author()
>
> Now *each and every* book is responsible for tracking all the other
> books by the same author. This is a lousy design. Even worse:
>
> prpr.list_by_author("Jane Austin")
>
>
> since now books are responsible for tracking ALL books by ALL authors,
> since the caller could say:
>
> prpr.list_by_author("Leo Tolstoy")
>
>
> Of course, books should know their own author, not the authors of other
> books, but authors should know all their own books:
>
> author = prpr.author  # --> Author("Jane Austin")
>
> author.get_books()  # --> return a list of books by this author
>
>
> This is an argument for making Authors a class, with behaviour, rather
> than just a string.
>
>
>
>  @classmethod
>>> def list_by_author(self,author):
>>>     """ Return list of books of an author """
>>>     bookfile = config.bookfile
>>>     books = [] # empty list - used as list of Books
>>>
>> [snip]
>
>
> First off, by convention the first argument to a class method should be
> called "cls", not "self".
>
> Secondly, here you are relying on a mysterious global "config", which
> points to a bookfile. What does this have to do with a book?
>
> - Does a nail keep track of the packet it came from?
>
> - Why should a book keep track of the catalog it was listed in?
>
> This should be a top level function, not a Book method.
>
> The rest of the method's design is also poor. You have already read
> the file once, to get the initial set of books. So why read the file
> again, every time you want to get some piece of information.
>
> Big databases, capable of holding billions of pieces of data, have
> to use disk-based storage because you can't keep that much data in
> memory at once. For anything smaller, you should only read and write
> to disk for persistence, everything else should use in-memory data
> structures. In this case, that means a dict.
>
>
>
>  return books # return list of books
>>>
>>
> Really? Thank goodness for the comment, I wouldn't have understood
> that line of code otherwise!
>
> *wink*
>
>
>
:)

Thank you for your inputs Steven. I will keep your suggestions in mind
while refactoring this code.

I am not following your comment on opening books file twice in
list_by_author method. I have opened it only once and then reading each
line while checking for a regex match. Am I missing something?

- N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130212/4eee8e02/attachment.html>

From Marcin.Mleczko at onet.eu  Tue Feb 12 18:43:25 2013
From: Marcin.Mleczko at onet.eu (Marcin Mleczko)
Date: Tue, 12 Feb 2013 18:43:25 +0100
Subject: [Tutor] Question on regular expressions
In-Reply-To: <mailman.13.1358852402.9721.tutor@python.org>
References: <mailman.13.1358852402.9721.tutor@python.org>
Message-ID: <511A7F3D.8070209@onet.eu>

Hello,

given this kind of string:

"start SomeArbitraryAmountOfText start AnotherArbitraryAmountOfText end"

a search string like: r"start.*?end" would give me the entire string
from the first "start" to "end" : "start SomeArbitraryAmountOfText start
AnotherArbitraryAmountOfText end"

but I am interested only in the second part between the 2nd "start" and
the "end": "start AnotherArbitraryAmountOfText end"

What would be best, most clever way to search for that?

Or even more general: how do I exlude always the text between the last
"start" and the "end" tag assuming the entire text contains several
"start" tags spaced by an arbitrary amount of text befor the "end" tag?

Any ideas?

Thank you in advance. ;-)

Marcin


From alan.gauld at btinternet.com  Tue Feb 12 19:40:06 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 12 Feb 2013 18:40:06 +0000
Subject: [Tutor] Question on regular expressions
In-Reply-To: <511A7F3D.8070209@onet.eu>
References: <mailman.13.1358852402.9721.tutor@python.org>
	<511A7F3D.8070209@onet.eu>
Message-ID: <kfe2a3$482$1@ger.gmane.org>

On 12/02/13 17:43, Marcin Mleczko wrote:

> but I am interested only in the second part between the 2nd "start" and
> the "end": "start AnotherArbitraryAmountOfText end"
>
> What would be best, most clever way to search for that?

best and clever are not always the same.

The simplest way if its a fixed string is just use the string split() 
method...  being more 'clever' you could use the re.split() method to 
handle non-constant strings. Being even more clever you can define regex 
of increasing complexity to match the Nth appearance of a pattern. These 
kinds of regex are very easy to get wrong so you have to be very clever 
to get them right.

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From __peter__ at web.de  Tue Feb 12 20:01:09 2013
From: __peter__ at web.de (Peter Otten)
Date: Tue, 12 Feb 2013 20:01:09 +0100
Subject: [Tutor] Question on regular expressions
References: <mailman.13.1358852402.9721.tutor@python.org>
	<511A7F3D.8070209@onet.eu>
Message-ID: <kfe3ge$guv$1@ger.gmane.org>

Marcin Mleczko wrote:

> given this kind of string:
> 
> "start SomeArbitraryAmountOfText start AnotherArbitraryAmountOfText end"
> 
> a search string like: r"start.*?end" would give me the entire string
> from the first "start" to "end" : "start SomeArbitraryAmountOfText start
> AnotherArbitraryAmountOfText end"
> 
> but I am interested only in the second part between the 2nd "start" and
> the "end": "start AnotherArbitraryAmountOfText end"
> 
> What would be best, most clever way to search for that?
> 
> Or even more general: how do I exlude always the text between the last
> "start" and the "end" tag assuming the entire text contains several
> "start" tags spaced by an arbitrary amount of text befor the "end" tag?

>>> s = "start SomeArbitraryAmountOfText start AnotherArbitraryAmountOfText 
end"

>>> [t[::-1] for t in re.compile("dne(.*?)trats").findall(s[::-1])]
[' AnotherArbitraryAmountOfText ']

Ok, I'm not serious about this one -- but how about

>>> parts = (t.partition("end") for t in s.split("start"))
>>> [left for left, mid, right in parts if mid]
[' AnotherArbitraryAmountOfText ']



From richkappler at gmail.com  Tue Feb 12 21:48:56 2013
From: richkappler at gmail.com (richard kappler)
Date: Tue, 12 Feb 2013 15:48:56 -0500
Subject: [Tutor] sending a wav file to a website?
Message-ID: <CAG7edPF7nCrbkQuv2_nNbO4r=cKa9=P6ONV_U2CCMZQraDQyQw@mail.gmail.com>

Maybe way off scope here, I hope not. I just can't get the accuracy I need
with pocketsphinx at the moment(though I continue to work on it). Google's
webkit-speech actually works pretty durned well, here's an example:
http://slides.html5rocks.com/#speech-input  But that doesn't really solve
any problems either.

So the question is, how do I get a wav file to a website like the one
listed above and retrieve the text result using python (or don't I)? I've
looked at and played around with urllib, I get how it works, I'm pretty
comfy with it, but it seems to be for sending text only? Or is it?  I can
use rec in the terminal (command line) to record speech into a wav file,
I'm pretty sure I can figure out how to make it start and stop recording as
desired, (yes, I've looked at pyaudio, my system crashed when I used it
this morning, come to find out that may be a different problem so will look
again), but sending the wav file to the url and retrieving the text for
further processing has me a bit baffled.

Any ideas?

regards, Richard

-- 

quando omni flunkus moritati
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130212/68d92b62/attachment-0001.html>

From davea at davea.name  Tue Feb 12 21:58:39 2013
From: davea at davea.name (Dave Angel)
Date: Tue, 12 Feb 2013 15:58:39 -0500
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
Message-ID: <511AACFF.3080102@davea.name>

On 02/12/2013 12:32 PM, neubyr wrote:
> On Mon, Feb 11, 2013 at 7:34 PM, Steven D'Aprano <steve at pearwood.info>wrote:
>
>> <snip>
>
> I am not following your comment on opening books file twice in
> list_by_author method. I have opened it only once and then reading each
> line while checking for a regex match. Am I missing something?
>

Not tiwce, 490 times.  Each time you call that method, you're going to 
open and read the whole file?  Why on earth would you do that, rather 
than just storing the Book instances in a list for later perusal?  Read 
the file when starting, and save it when quitting.  You did say you were 
going to be inserting and deleting books, right?  You sure don't want to 
write that code to manage a text file.


-- 
DaveA

From breamoreboy at yahoo.co.uk  Tue Feb 12 22:55:42 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Tue, 12 Feb 2013 21:55:42 +0000
Subject: [Tutor] Question on regular expressions
In-Reply-To: <511A7F3D.8070209@onet.eu>
References: <mailman.13.1358852402.9721.tutor@python.org>
	<511A7F3D.8070209@onet.eu>
Message-ID: <kfedo6$rc8$1@ger.gmane.org>

On 12/02/2013 17:43, Marcin Mleczko wrote:
> Hello,
>
> given this kind of string:
>
> "start SomeArbitraryAmountOfText start AnotherArbitraryAmountOfText end"
>
> a search string like: r"start.*?end" would give me the entire string
> from the first "start" to "end" : "start SomeArbitraryAmountOfText start
> AnotherArbitraryAmountOfText end"
>
> but I am interested only in the second part between the 2nd "start" and
> the "end": "start AnotherArbitraryAmountOfText end"
>
> What would be best, most clever way to search for that?
>
> Or even more general: how do I exlude always the text between the last
> "start" and the "end" tag assuming the entire text contains several
> "start" tags spaced by an arbitrary amount of text befor the "end" tag?
>
> Any ideas?
>
> Thank you in advance. ;-)
>
> Marcin
>

IMHO the best way is to use the rindex method to grab what you're after. 
  I don't do clever, it makes code too difficult to maintain.  So how about.

 >>> a="start SomeArbitraryAmountOfText start 
AnotherArbitraryAmountOfText end"
 >>> b="start "
 >>> x=a.rindex(b)
 >>> y=a.rindex(' end')
 >>> a[x+len(b):y]
'AnotherArbitraryAmountOfText'
 >>> c="garbage in, garbage out"
 >>> x=c.rindex(b)
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
ValueError: substring not found
 >>>

-- 
Cheers.

Mark Lawrence


From steve at pearwood.info  Tue Feb 12 23:56:56 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Wed, 13 Feb 2013 09:56:56 +1100
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
Message-ID: <511AC8B8.80207@pearwood.info>

On 13/02/13 04:32, neubyr wrote:

> I am not following your comment on opening books file twice in
> list_by_author method. I have opened it only once and then reading each
> line while checking for a regex match. Am I missing something?


You open the catalog file once to read the books in the first place.

Then when you want a list of books by author Fred, you open the catalog
file, even though all the books are (somewhere) in memory.

Then when you want a list of books by author Bob, you open the catalog
file again. Then when you want a list of books by Sally, you open the
catalog file yet again. And so on.


-- 
Steven

From alan.gauld at btinternet.com  Wed Feb 13 02:10:38 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Wed, 13 Feb 2013 01:10:38 +0000
Subject: [Tutor] sending a wav file to a website?
In-Reply-To: <CAG7edPF7nCrbkQuv2_nNbO4r=cKa9=P6ONV_U2CCMZQraDQyQw@mail.gmail.com>
References: <CAG7edPF7nCrbkQuv2_nNbO4r=cKa9=P6ONV_U2CCMZQraDQyQw@mail.gmail.com>
Message-ID: <kfep6b$tfj$1@ger.gmane.org>

On 12/02/13 20:48, richard kappler wrote:

> So the question is, how do I get a wav file to a website like the one
> listed above and retrieve the text result using python

Can you be a bit more explicit?
You can send the file to a url using http or ftp.
That will create a copy of the file on the remote server
but I get the feeling that's not what you mean?

> I've looked at and played around with urllib, I get how it works, I'm
> pretty comfy with it, but it seems to be for sending text only?

It speaks http, and http is a text based protocol, like most internet 
protocols. But urllib is normally used for reading from a url not 
writing files to it. (Although it might support that too, but I've never 
used it for that...)

> I can use rec in the terminal (command line) to record speech into
> a wav file, I'm pretty sure I can figure out how to make it start and
> stop recording as desired, ...

Creating a wav file is completely different to sending it to a remote 
server.

> ... but sending the wav file to the
> url and retrieving the text for further processing has me a bit baffled.

But this bit I don't understand? Do you mean sending the file itself?
Or are you trying to play the recorded sound over the network to a url?
If the latter how do you imagine the server will respond?What text do 
you expect back?

I'm confused.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From eryksun at gmail.com  Wed Feb 13 08:33:01 2013
From: eryksun at gmail.com (eryksun)
Date: Wed, 13 Feb 2013 02:33:01 -0500
Subject: [Tutor] sending a wav file to a website?
In-Reply-To: <CAG7edPF7nCrbkQuv2_nNbO4r=cKa9=P6ONV_U2CCMZQraDQyQw@mail.gmail.com>
References: <CAG7edPF7nCrbkQuv2_nNbO4r=cKa9=P6ONV_U2CCMZQraDQyQw@mail.gmail.com>
Message-ID: <CACL+1auDY_d1_AiYPFH=DJncvDupAfhcEPn+qBLUegoB99NC8w@mail.gmail.com>

On Tue, Feb 12, 2013 at 3:48 PM, richard kappler <richkappler at gmail.com> wrote:
> So the question is, how do I get a wav file to a website like the one listed
> above and retrieve the text result using python (or don't I)? I've looked at
> and played around with urllib, I get how it works, I'm pretty comfy with it,
> but it seems to be for sending text only? Or is it?

Are you looking to use Google's speech recognition service? It's meant
for use with the Chrome browser. I suppose you can play around with it
for non-commercial, personal use. Bear in mind Google can pull the
plug on public access to the API at any time. Here's the unofficial
spec:

https://gist.github.com/1730160

And a rough draft:

    import urllib
    import urllib2
    import json

    SPEECH_URL = 'https://www.google.com/speech-api/v1/recognize'
    CLIENT = 'chromium'
    USER_AGENT = (
      'Mozilla/5.0 (X11; Linux x86_64) '
      'AppleWebKit/537.4 (KHTML like Gecko) '
      'Chrome/22.0.1229.56 Safari/537.4')

    def gspeech(data, rate=16000, lang='en-US', maxresults=10):
        params = urllib.urlencode({
          'lang': lang,
          'maxresults': maxresults,
          'client': CLIENT})
        url = '{0}?{1}'.format(SPEECH_URL, params)
        header = {
          'Content-Type': 'audio/x-flac; rate={0}'.format(rate),
          'User-Agent': USER_AGENT}
        request = urllib2.Request(url, data, header)
        data = urllib2.urlopen(request).read()
        return json.loads(data)

Sample data:
http://archive.org/details/MichaelGraySampleSamplewav

    >>> url = ('http://archive.org/download/'
    ...        'MichaelGraySampleSamplewav/Sample.flac')
    >>> data = urllib2.urlopen(url).read()
    >>> result = gspeech(data, 44100, 'en-UK')
    >>> result['hypotheses'][0]['utterance']
    u"I'm speaking normally"
    >>> result['hypotheses'][0]['confidence']
    0.7365484

From Mahadea at LabCorp.com  Wed Feb 13 14:45:09 2013
From: Mahadea at LabCorp.com (Mahadevan, Anand)
Date: Wed, 13 Feb 2013 13:45:09 +0000
Subject: [Tutor] "Strange" behaviour of list comprehension
Message-ID: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>

I'm playing around with list comprehension and in IDLE typed this in.  I actually wanted it to return all tuples satisfying the condition where z is the sum of x and y. I kind of got mixed up with the syntax, hence I put a comma in there instead of an "if".  I'd like some assistance understanding what it's doing...
Thanks!

>>> somelist = [(x,y,z) for x in range(1,10) for y in range(x,10) for z in range(y,10), x+y==z]
>>> somelist
[(1, 1, [1, 2, 3, 4, 5, 6, 7, 8, 9]), (1, 1, False), (1, 2, [2, 3, 4, 5, 6, 7, 8, 9]), (1, 2, False), (1, 3, [3, 4, 5, 6, 7, 8, 9]), (1, 3, False), (1, 4, [4, 5, 6, 7, 8, 9]), (1, 4, False), (1, 5, [5, 6, 7, 8, 9]), (1, 5, False), (1, 6, [6, 7, 8, 9]), (1, 6, False), (1, 7, [7, 8, 9]), (1, 7, False), (1, 8, [8, 9]), (1, 8, False), (1, 9, [9]), (1, 9, False), (2, 2, [2, 3, 4, 5, 6, 7, 8, 9]), (2, 2, False), (2, 3, [3, 4, 5, 6, 7, 8, 9]), (2, 3, False), (2, 4, [4, 5, 6, 7, 8, 9]), (2, 4, False), (2, 5, [5, 6, 7, 8, 9]), (2, 5, False), (2, 6, [6, 7, 8, 9]), (2, 6, False), (2, 7, [7, 8, 9]), (2, 7, False), (2, 8, [8, 9]), (2, 8, False), (2, 9, [9]), (2, 9, False), (3, 3, [3, 4, 5, 6, 7, 8, 9]), (3, 3, False), (3, 4, [4, 5, 6, 7, 8, 9]), (3, 4, False), (3, 5, [5, 6, 7, 8, 9]), (3, 5, False), (3, 6, [6, 7, 8, 9]), (3, 6, False), (3, 7, [7, 8, 9]), (3, 7, False), (3, 8, [8, 9]), (3, 8, False), (3, 9, [9]), (3, 9, False), (4, 4, [4, 5, 6, 7, 8, 9]), (4, 4, False), (4, 5, [5, 6, 7, 8, 9]), (4, 5, False), (4, 6, [6, 7, 8, 9]), (4, 6, False), (4, 7, [7, 8, 9]), (4, 7, False), (4, 8, [8, 9]), (4, 8, False), (4, 9, [9]), (4, 9, False), (5, 5, [5, 6, 7, 8, 9]), (5, 5, False), (5, 6, [6, 7, 8, 9]), (5, 6, False), (5, 7, [7, 8, 9]), (5, 7, False), (5, 8, [8, 9]), (5, 8, False), (5, 9, [9]), (5, 9, False), (6, 6, [6, 7, 8, 9]), (6, 6, False), (6, 7, [7, 8, 9]), (6, 7, False), (6, 8, [8, 9]), (6, 8, False), (6, 9, [9]), (6, 9, False), (7, 7, [7, 8, 9]), (7, 7, False), (7, 8, [8, 9]), (7, 8, False), (7, 9, [9]), (7, 9, False), (8, 8, [8, 9]), (8, 8, False), (8, 9, [9]), (8, 9, False), (9, 9, [9]), (9, 9, False)]
-This e-mail and any attachments may contain CONFIDENTIAL information, including PROTECTED HEALTH INFORMATION. If you are not the intended recipient, any use or disclosure of this information is STRICTLY PROHIBITED; you are requested to delete this e-mail and any attachments, notify the sender immediately, and notify the LabCorp Privacy Officer at privacyofficer at labcorp.com or call (877) 23-HIPAA / (877) 234-4722. 


From oscar.j.benjamin at gmail.com  Wed Feb 13 15:13:50 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Wed, 13 Feb 2013 14:13:50 +0000
Subject: [Tutor] "Strange" behaviour of list comprehension
In-Reply-To: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
References: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
Message-ID: <CAHVvXxTUk5JqhZDK6YzP22afojkhB7jNro0ghNusYnB37VDN3A@mail.gmail.com>

On 13 February 2013 13:45, Mahadevan, Anand <Mahadea at labcorp.com> wrote:
> I'm playing around with list comprehension and in IDLE typed this in.  I actually wanted it to return all tuples satisfying the condition where z is the sum of x and y. I kind of got mixed up with the syntax, hence I put a comma in there instead of an "if".  I'd like some assistance understanding what it's doing...
> Thanks!
>
>>>> somelist = [(x,y,z) for x in range(1,10) for y in range(x,10) for z in range(y,10), x+y==z]

This line doesn't actually work if you paste it into a fresh interpreter:
>>> somelist = [(x,y,z) for x in range(1,10) for y in range(x,10) for z in range(y,10), x+y==z]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined

The clause at the end x+y==z should be preceded by 'if' rather than a
comma. Commas separate function arguments and elements of collections
in displays. Expressions separated by commas without brackets are
interpreted as tuples:

>>> a = 1, 0
>>> a
(1, 0)

So your outermost loop is over a tuple (range(y, 10), x+y==z):
>>> [x for x in 1, 2]
[1, 2]
>>> [x for x in 'a', 'w', 'b']
['a', 'w', 'b']
>>> [x for x in range(3), False]
[[0, 1, 2], False]

Which explains the output you get:

>>>> somelist
> [(1, 1, [1, 2, 3, 4, 5, 6, 7, 8, 9]), (1, 1, False), (1, 2, [2, 3, 4, 5, 6, 7, 8, 9]), (1, 2, False), (1, 3, [3, 4, 5, 6, 7, 8, 9]), (1, 3, False), (1, 4, [4, 5, 6, 7, 8, 9]), (1, 4, False), (1, 5, [5, 6, 7, 8, 9]), (1, 5, False), (1, 6, [6, 7, 8, 9]), (1, 6, False), (1, 7, [7, 8, 9]), (1, 7, False), (1, 8, [8, 9]), (1, 8, False), (1, 9, [9]), (1, 9, False), (2, 2, [2, 3, 4, 5, 6, 7, 8, 9]), (2, 2, False), (2, 3, [3, 4, 5, 6, 7, 8, 9]), (2, 3, False), (2, 4, [4, 5, 6, 7, 8, 9]), (2, 4, False), (2, 5, [5, 6, 7, 8, 9]), (2, 5, False), (2, 6, [6, 7, 8, 9]), (2, 6, False), (2, 7, [7, 8, 9]), (2, 7, False), (2, 8, [8, 9]), (2, 8, False), (2, 9, [9]), (2, 9, False), (3, 3, [3, 4, 5, 6, 7, 8, 9]), (3, 3, False), (3, 4, [4, 5, 6, 7, 8, 9]), (3, 4, False), (3, 5, [5, 6, 7, 8, 9]), (3, 5, False), (3, 6, [6, 7, 8, 9]), (3, 6, False), (3, 7, [7, 8, 9]), (3, 7, False), (3, 8, [8, 9]), (3, 8, False), (3, 9, [9]), (3, 9, False), (4, 4, [4, 5, 6, 7, 8, 9]), (4, 4, False), (4, 5, [5, 6, 7, 8, 9]), (4
>  , 5, False), (4, 6, [6, 7, 8, 9]), (4, 6, False), (4, 7, [7, 8, 9]), (4, 7, False), (4, 8, [8, 9]), (4, 8, False), (4, 9, [9]), (4, 9, False), (5, 5, [5, 6, 7, 8, 9]), (5, 5, False), (5, 6, [6, 7, 8, 9]), (5, 6, False), (5, 7, [7, 8, 9]), (5, 7, False), (5, 8, [8, 9]), (5, 8, False), (5, 9, [9]), (5, 9, False), (6, 6, [6, 7, 8, 9]), (6, 6, False), (6, 7, [7, 8, 9]), (6, 7, False), (6, 8, [8, 9]), (6, 8, False), (6, 9, [9]), (6, 9, False), (7, 7, [7, 8, 9]), (7, 7, False), (7, 8, [8, 9]), (7, 8, False), (7, 9, [9]), (7, 9, False), (8, 8, [8, 9]), (8, 8, False), (8, 9, [9]), (8, 9, False), (9, 9, [9]), (9, 9, False)]

If you put the 'if' keyword in place of the comma it should work:
>>> [x for x in 'a', 'w', 'b' if x != 'b']
['a', 'w']


Oscar

From __peter__ at web.de  Wed Feb 13 15:16:58 2013
From: __peter__ at web.de (Peter Otten)
Date: Wed, 13 Feb 2013 15:16:58 +0100
Subject: [Tutor] "Strange" behaviour of list comprehension
References: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
Message-ID: <kfg77j$cak$1@ger.gmane.org>

Mahadevan, Anand wrote:

> I'm playing around with list comprehension and in IDLE typed this in.  I
> actually wanted it to return all tuples satisfying the condition where z
> is the sum of x and y. I kind of got mixed up with the syntax, hence I put
> a comma in there instead of an "if".  I'd like some assistance
> understanding what it's doing... Thanks!
> 
>>>> somelist = [(x,y,z) for x in range(1,10) for y in range(x,10) for z in
>>>> range(y,10), x+y==z] somelist

If you're puzzled about a list comprehension, try translating it into for 
loops:

somelist = []
for x in range(1, 10):
    for y in range(x, 10):
        for z in range(y, 10), x+y==z:
            somelist.append((x, y, z))

In the first iteration you get x=1, y=1, so let's see what the inner loop 
gives:

>>> x = y = 1
>>> for z in range(y, 10), x+y==z:
...     print z
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined

So if you don't get a NameError you have defined z before entering the inner 
"loop". Let's fix that:

>>> z = 42
>>> for z in range(y, 10), x+y==z:
...     print z
... 
[1, 2, 3, 4, 5, 6, 7, 8, 9]
False

It should be obvious now that Python interprets

range(y, 10), x+y==z

as a tuple and iterates over that. range(1, 10) is a list in Python 2, so 
you are getting that first, then follows a boolean expression x+y == z which 
gives either True or False.


From hugo.yoshi at gmail.com  Wed Feb 13 15:17:54 2013
From: hugo.yoshi at gmail.com (Hugo Arts)
Date: Wed, 13 Feb 2013 15:17:54 +0100
Subject: [Tutor] "Strange" behaviour of list comprehension
In-Reply-To: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
References: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
Message-ID: <CAJmBOfn8Z3RRKUfHCVF_CMfjVxaRZbN5f=R2XgGb=cDCW5Wayw@mail.gmail.com>

On Wed, Feb 13, 2013 at 2:45 PM, Mahadevan, Anand <Mahadea at labcorp.com>wrote:

> I'm playing around with list comprehension and in IDLE typed this in.  I
> actually wanted it to return all tuples satisfying the condition where z is
> the sum of x and y. I kind of got mixed up with the syntax, hence I put a
> comma in there instead of an "if".  I'd like some assistance understanding
> what it's doing...
> Thanks!
>
> >>> somelist = [(x,y,z) for x in range(1,10) for y in range(x,10) for z in
> range(y,10), x+y==z]
> >>> somelist
> [(1, 1, [1, 2, 3, 4, 5, 6, 7, 8, 9]), (1, 1, False), (1, 2, [2, 3, 4, 5,
> 6, 7, 8, 9]), (1, 2, False), (1, 3, [3, 4, 5, 6, 7, 8, 9]), (1, 3, False),
> (1, 4, [4, 5, 6, 7, 8, 9]), (1, 4, False), (1, 5, [5, 6, 7, 8, 9]), (1, 5,
> False), (1, 6, [6, 7, 8, 9]), (1, 6, False), (1, 7, [7, 8, 9]), (1, 7,
> False), (1, 8, [8, 9]), (1, 8, False), (1, 9, [9]), (1, 9, False), (2, 2,
> [2, 3, 4, 5, 6, 7, 8, 9]), (2, 2, False), (2, 3, [3, 4, 5, 6, 7, 8, 9]),
> (2, 3, False), (2, 4, [4, 5, 6, 7, 8, 9]), (2, 4, False), (2, 5, [5, 6, 7,
> 8, 9]), (2, 5, False), (2, 6, [6, 7, 8, 9]), (2, 6, False), (2, 7, [7, 8,
> 9]), (2, 7, False), (2, 8, [8, 9]), (2, 8, False), (2, 9, [9]), (2, 9,
> False), (3, 3, [3, 4, 5, 6, 7, 8, 9]), (3, 3, False), (3, 4, [4, 5, 6, 7,
> 8, 9]), (3, 4, False), (3, 5, [5, 6, 7, 8, 9]), (3, 5, False), (3, 6, [6,
> 7, 8, 9]), (3, 6, False), (3, 7, [7, 8, 9]), (3, 7, False), (3, 8, [8, 9]),
> (3, 8, False), (3, 9, [9]), (3, 9, False), (4, 4, [4, 5, 6, 7, 8, 9]), (4,
> 4, False), (4, 5, [5, 6, 7, 8, 9]), (4
>  , 5, False), (4, 6, [6, 7, 8, 9]), (4, 6, False), (4, 7, [7, 8, 9]), (4,
> 7, False), (4, 8, [8, 9]), (4, 8, False), (4, 9, [9]), (4, 9, False), (5,
> 5, [5, 6, 7, 8, 9]), (5, 5, False), (5, 6, [6, 7, 8, 9]), (5, 6, False),
> (5, 7, [7, 8, 9]), (5, 7, False), (5, 8, [8, 9]), (5, 8, False), (5, 9,
> [9]), (5, 9, False), (6, 6, [6, 7, 8, 9]), (6, 6, False), (6, 7, [7, 8,
> 9]), (6, 7, False), (6, 8, [8, 9]), (6, 8, False), (6, 9, [9]), (6, 9,
> False), (7, 7, [7, 8, 9]), (7, 7, False), (7, 8, [8, 9]), (7, 8, False),
> (7, 9, [9]), (7, 9, False), (8, 8, [8, 9]), (8, 8, False), (8, 9, [9]), (8,
> 9, False), (9, 9, [9]), (9, 9, False)]
>

This list comprehension is basically interpreted like so:

 [(x,y,z) for x in range(1,10) for y in range(x,10) for z in (range(y,10),
x+y==z)]

To be more precise, the comma at the end is part of a tuple (you can omit
parentheses of a tuple in many cases). This makes the final for loop
iterate over the tuple (range(y, 10), x + y == z). You'll notice that this
only works if the variable 'z' is already defined, since the tuple isn't
constructed in the for loop. In other words, if we just run the code in a
clean interpreter we'll get a NameError:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]
on win32
Type "copyright", "credits" or "license()" for more information.
>>> [(x,y,z) for x in range(1,10) for y in range(x,10) for z in
range(y,10), x+y==z]

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    [(x,y,z) for x in range(1,10) for y in range(x,10) for z in
range(y,10), x+y==z]
NameError: name 'z' is not defined

What happened in your case is probably you were running different
variations of the list comprehension in the same interpreter session. Since
the iterating variable in a for loop still exists after the for loop exits,
we won't encounter this error if we run a slightly different list
comprehension first:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]
on win32
Type "copyright", "credits" or "license()" for more information.
>>> [(x,y,z) for x in range(1,10) for y in range(x,10) for z in range(y,10)
if x+y==z]
[(1, 1, 2), (1, 2, 3), (1, 3, 4), (1, 4, 5), (1, 5, 6), (1, 6, 7), (1, 7,
8), (1, 8, 9), (2, 2, 4), (2, 3, 5), (2, 4, 6), (2, 5, 7), (2, 6, 8), (2,
7, 9), (3, 3, 6), (3, 4, 7), (3, 5, 8), (3, 6, 9), (4, 4, 8), (4, 5, 9)]
>>> z
9
>>>

As you can see, z exists after we run a for loop with z in it. Its value is
still at the value it had during the last iteration. The same applies to x
and y. Looking at your output, you had values of x, y and z in your
interpreter session such that x + y == z evaluated to False. So the third
value in your tuples is cycling between range(y, 10) and False.

HTH,
Hugo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/4db44a75/attachment-0001.html>

From breamoreboy at yahoo.co.uk  Wed Feb 13 16:18:12 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Wed, 13 Feb 2013 15:18:12 +0000
Subject: [Tutor] "Strange" behaviour of list comprehension
In-Reply-To: <CAJmBOfn8Z3RRKUfHCVF_CMfjVxaRZbN5f=R2XgGb=cDCW5Wayw@mail.gmail.com>
References: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
	<CAJmBOfn8Z3RRKUfHCVF_CMfjVxaRZbN5f=R2XgGb=cDCW5Wayw@mail.gmail.com>
Message-ID: <kfgaqk$hjv$1@ger.gmane.org>

On 13/02/2013 14:17, Hugo Arts wrote:

>
> To be more precise, the comma at the end is part of a tuple (you can
> omit parentheses of a tuple in many cases).

Parantheses are not part of a tuple except in special cases, see 
http://docs.python.org/2/tutorial/datastructures.html#tuples-and-sequences

-- 
Cheers.

Mark Lawrence


From brajesh_pant at hotmail.com  Wed Feb 13 16:23:28 2013
From: brajesh_pant at hotmail.com (Brajesh)
Date: Wed, 13 Feb 2013 20:53:28 +0530
Subject: [Tutor] Python Lover
Message-ID: <BLU0-SMTP240CF348AF5BA3DBC4BEC4AFE080@phx.gbl>

Hi ,

I have just subscribed mailing list to learn python. I am programming in 
java for nearly 8 months, I have developed a strong love towards python 
and want to learn and start making the best use of it. I want to know 
where to from as i know JAVA already so where to start from.

Regards
Brajesh

From joel.goldstick at gmail.com  Wed Feb 13 16:32:22 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Wed, 13 Feb 2013 10:32:22 -0500
Subject: [Tutor] Python Lover
In-Reply-To: <BLU0-SMTP240CF348AF5BA3DBC4BEC4AFE080@phx.gbl>
References: <BLU0-SMTP240CF348AF5BA3DBC4BEC4AFE080@phx.gbl>
Message-ID: <CAPM-O+zZHqqQZvRgCjrbRXbLJjaYA+jq4edryjTgHoX_6kQ+Mw@mail.gmail.com>

On Wed, Feb 13, 2013 at 10:23 AM, Brajesh <brajesh_pant at hotmail.com> wrote:

> Hi ,
>
> I have just subscribed mailing list to learn python. I am programming in
> java for nearly 8 months, I have developed a strong love towards python and
> want to learn and start making the best use of it. I want to know where to
> from as i know JAVA already so where to start from.
>

You can start here:  http://www.python.org/about/gettingstarted/



>
> Regards
> Brajesh
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/5b04f651/attachment.html>

From neubyr at gmail.com  Wed Feb 13 20:14:17 2013
From: neubyr at gmail.com (neubyr)
Date: Wed, 13 Feb 2013 13:14:17 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <511AC8B8.80207@pearwood.info>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
Message-ID: <CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>

On Tue, Feb 12, 2013 at 4:56 PM, Steven D'Aprano <steve at pearwood.info>wrote:

> On 13/02/13 04:32, neubyr wrote:
>
>  I am not following your comment on opening books file twice in
>> list_by_author method. I have opened it only once and then reading each
>> line while checking for a regex match. Am I missing something?
>>
>
>
> You open the catalog file once to read the books in the first place.
>
> Then when you want a list of books by author Fred, you open the catalog
> file, even though all the books are (somewhere) in memory.
>
> Then when you want a list of books by author Bob, you open the catalog
> file again. Then when you want a list of books by Sally, you open the
> catalog file yet again. And so on.
>
>
>
>
Thank you for your feedback Dave and Steven.

I realize that I am opening the file for every add/delete call. I thought
you were referring to duplicate file open call within the code snippet
itself.

I am not sure how to save an object in memory to a file before exiting the
program. Any examples or related documentation links would be really
helpful. I am guessing it would be using some kind of before teardown
method, but not sure about it. Any help?

thanks,
N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/6cf15db7/attachment.html>

From ghasemmg01 at leedslearning.net  Wed Feb 13 20:13:05 2013
From: ghasemmg01 at leedslearning.net (Ghadir Ghasemi)
Date: Wed, 13 Feb 2013 19:13:05 +0000
Subject: [Tutor] Binary Addition
Message-ID: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>

Hi guys can you tell me what is wrong with this code?. It says unexpected indent and the bottom of the code everytime I run it.  Thank you


on=True
while on == True:
    def eight_digit_binary1(message):
        response1 = input(message)
    while len(response1) > 8:
        response1 = input(message)
    return (response1)


    try:

        binary1 = eight_digit_binary1('please enter the first 8 bit binary number: ');
        denary1 = 0
        place_value1 = 1

        for i in binary1 [::-1]:
                denary1 += place_value1 * int(i)
                place_value1 *= 2

        
        def eight_digit_binary2(message):
            response2 = input(message)
        while len(response2) > 8:
            response2 = input(message)
        return (response2)

     
        try:

            binary2 = eight_digit_binary2('please enter the first 8 bit binary number: ');
            denary2 = 0
            place_value2 = 1

            for i in binary2 [::-1]:
                    denary2 += place_value2 * int(i)
                    place_value2 *= 2

            def print_result(result):
                    result = (place_value1 + place_value2)
                    remainder = ''
            while result > 0:
                    remainder = str(result % 2) + remainder
                    result >>= 1
            print("The result is",remainder)


From breamoreboy at yahoo.co.uk  Wed Feb 13 20:51:08 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Wed, 13 Feb 2013 19:51:08 +0000
Subject: [Tutor] Binary Addition
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <kfgqga$q01$1@ger.gmane.org>

On 13/02/2013 19:13, Ghadir Ghasemi wrote:
> Hi guys can you tell me what is wrong with this code?. It says unexpected indent and the bottom of the code everytime I run it.  Thank you
>
>
> on=True
> while on == True:
>      def eight_digit_binary1(message):
>          response1 = input(message)
>      while len(response1) > 8:
>          response1 = input(message)
>      return (response1)
>
>
>      try:
>
>          binary1 = eight_digit_binary1('please enter the first 8 bit binary number: ');
>          denary1 = 0
>          place_value1 = 1
>
>          for i in binary1 [::-1]:
>                  denary1 += place_value1 * int(i)
>                  place_value1 *= 2
>
>
>          def eight_digit_binary2(message):
>              response2 = input(message)
>          while len(response2) > 8:
>              response2 = input(message)
>          return (response2)
>
>
>          try:
>
>              binary2 = eight_digit_binary2('please enter the first 8 bit binary number: ');
>              denary2 = 0
>              place_value2 = 1
>
>              for i in binary2 [::-1]:
>                      denary2 += place_value2 * int(i)
>                      place_value2 *= 2
>
>              def print_result(result):
>                      result = (place_value1 + place_value2)
>                      remainder = ''
>              while result > 0:
>                      remainder = str(result % 2) + remainder
>                      result >>= 1
>              print("The result is",remainder)
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

The while loops and return statements in the eight_digit_binary1/2 
functions aren't correctly indented.  Why put these functions within the 
outer while loop?  The trys aren't matched up with anything, you need 
something else, usually one or more except clauses.

-- 
Cheers.

Mark Lawrence


From alan.gauld at btinternet.com  Wed Feb 13 20:50:48 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Wed, 13 Feb 2013 19:50:48 +0000
Subject: [Tutor] Binary Addition
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <kfgqql$teb$1@ger.gmane.org>

On 13/02/13 19:13, Ghadir Ghasemi wrote:
> Hi guys can you tell me what is wrong with this code?.

Quite a few things.
Your try lines don't have matching excepts....
You have a function definitions in the middle that have
indentation errors.

eg.
       def eight_digit_binary1(message):
           response1 = input(message)
       while len(response1) > 8:
           response1 = input(message)
       return (response1)

should be:

       def eight_digit_binary1(message):
           response1 = input(message)
           while len(response1) > 8:
               response1 = input(message)
           return (response1)

Except that its buggy (what is returned if the user just hits Enter? Or 
types "fabulous"), but at least the indentation is right!

Also, since you never seem to change 'on' anywhere you might as well use 
a while True loop....

It says unexpected indent and the bottom of the code everytime I run it. 
  Thank you
>
>
> on=True
> while on == True:
>      def eight_digit_binary1(message):
>          response1 = input(message)
>      while len(response1) > 8:
>          response1 = input(message)
>      return (response1)
>
>
>      try:
>
>          binary1 = eight_digit_binary1('please enter the first 8 bit binary number: ');
>          denary1 = 0
>          place_value1 = 1
>
>          for i in binary1 [::-1]:
>                  denary1 += place_value1 * int(i)
>                  place_value1 *= 2
>
>
>          def eight_digit_binary2(message):
>              response2 = input(message)
>          while len(response2) > 8:
>              response2 = input(message)
>          return (response2)
>
>
>          try:
>
>              binary2 = eight_digit_binary2('please enter the first 8 bit binary number: ');
>              denary2 = 0
>              place_value2 = 1
>
>              for i in binary2 [::-1]:
>                      denary2 += place_value2 * int(i)
>                      place_value2 *= 2
>
>              def print_result(result):
>                      result = (place_value1 + place_value2)
>                      remainder = ''
>              while result > 0:
>                      remainder = str(result % 2) + remainder
>                      result >>= 1
>              print("The result is",remainder)
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From bgailer at gmail.com  Wed Feb 13 20:50:09 2013
From: bgailer at gmail.com (bob gailer)
Date: Wed, 13 Feb 2013 14:50:09 -0500
Subject: [Tutor] Binary Addition
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <511BEE71.4060506@gmail.com>

On 2/13/2013 2:13 PM, Ghadir Ghasemi wrote:
> Hi guys can you tell me what is wrong with this code?. It says unexpected indent and the bottom of the code everytime I run it.  Thank you
Please post the entire traceback - there is valuable information there. 
Without that we have to go on a time consuming witch hunt. We are 
volunteers who love to help - with limits on our time and energy.

Do you understand how Python uses indentation? The error you report says 
you have violated the indentation rules.
>
>
> on=True
> while on == True:
>      def eight_digit_binary1(message):
>          response1 = input(message)
>      while len(response1) > 8:
>          response1 = input(message)
>      return (response1)
>
>
>      try:
>
>          binary1 = eight_digit_binary1('please enter the first 8 bit binary number: ');
>          denary1 = 0
>          place_value1 = 1
>
>          for i in binary1 [::-1]:
>                  denary1 += place_value1 * int(i)
>                  place_value1 *= 2
>
>          
>          def eight_digit_binary2(message):
>              response2 = input(message)
>          while len(response2) > 8:
>              response2 = input(message)
>          return (response2)
>
>       
>          try:
>
>              binary2 = eight_digit_binary2('please enter the first 8 bit binary number: ');
>              denary2 = 0
>              place_value2 = 1
>
>              for i in binary2 [::-1]:
>                      denary2 += place_value2 * int(i)
>                      place_value2 *= 2
>
>              def print_result(result):
>                      result = (place_value1 + place_value2)
>                      remainder = ''
>              while result > 0:
>                      remainder = str(result % 2) + remainder
>                      result >>= 1
>              print("The result is",remainder)
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
Bob Gailer
919-636-4239
Chapel Hill NC


From alan.gauld at btinternet.com  Wed Feb 13 20:55:36 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Wed, 13 Feb 2013 19:55:36 +0000
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
Message-ID: <kfgr3l$k1$1@ger.gmane.org>

On 13/02/13 19:14, neubyr wrote:

> I am not sure how to save an object in memory to a file
> before exiting the program. Any examples or related documentation links
> would be really helpful. I am guessing it would be using some kind of
> before teardown method, but not sure about it. Any help?

If using class methods or standalone functions just call them explicitly 
at the start and end of your program. If you want to
be sure it gets called use a try/finally

try:
    Book.loadBooks(filename)  # load the data
    # do your program stuff
finally:
    Book.saveBooks(filename)   # save the data

That ensures that even if there is an exception the data will always be 
saved.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From bgailer at gmail.com  Wed Feb 13 21:03:56 2013
From: bgailer at gmail.com (bob gailer)
Date: Wed, 13 Feb 2013 15:03:56 -0500
Subject: [Tutor] Binary Addition
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE030D83794790@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <511BF1AC.7020507@gmail.com>

On 2/13/2013 2:13 PM, Ghadir Ghasemi wrote:
> Hi guys can you tell me what is wrong with this code?. It says unexpected indent and the bottom of the code everytime I run it.  Thank you
>
>
> on=True
> while on == True:
>      def eight_digit_binary1(message):
>          response1 = input(message)
>      while len(response1) > 8:
>          response1 = input(message)
>      return (response1)
>
>
>      try:
>
>          binary1 = eight_digit_binary1('please enter the first 8 bit binary number: ');
>          denary1 = 0
>          place_value1 = 1
>
>          for i in binary1 [::-1]:
>                  denary1 += place_value1 * int(i)
>                  place_value1 *= 2
>
>          
>          def eight_digit_binary2(message):
>              response2 = input(message)
>          while len(response2) > 8:
>              response2 = input(message)
>          return (response2)
>
>       
>          try:
>
>              binary2 = eight_digit_binary2('please enter the first 8 bit binary number: ');
>              denary2 = 0
>              place_value2 = 1
>
>              for i in binary2 [::-1]:
>                      denary2 += place_value2 * int(i)
>                      place_value2 *= 2
>
>              def print_result(result):
>                      result = (place_value1 + place_value2)
>                      remainder = ''
>              while result > 0:
>                      remainder = str(result % 2) + remainder
>                      result >>= 1
>              print("The result is",remainder)
You have some incomplete try: statements. try must be followed by 
except: and/or finally:

You should limit the scope of try: to just the one or few statements 
that you expect to raise the exception. And you should have an except 
clause for that exception.

There is no need to define eight_digit_binary and eight_digit_binary2, 
as they do the same thing.

There is no need to nest these defs inside the loop.

You have a lot of other unnecessarily duplicated code.

There is no need to say while on == True:
It is sufficient to say while on:

Your program will never terminate as you never change the value of on.

-- 
Bob Gailer
919-636-4239
Chapel Hill NC


From ramit.prasad at jpmorgan.com  Wed Feb 13 21:17:02 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Wed, 13 Feb 2013 20:17:02 +0000
Subject: [Tutor] Additional help
In-Reply-To: <CALWZNGgLqdnL3nMQ7bQp=W8B7p5SVCGhkA2R-cbSC+++zoq8Bw@mail.gmail.com>
References: <010FB2F3C55002408EE1404538D1B6AE030D8379478F@LLN-SPP-ES-04.user01.lln.local>
	<CAF6DajLkU4vF2Y_SWRX1niie3ENDnn0XcKrBheXWpgJVox3hCA@mail.gmail.com>
	<CALWZNGgLqdnL3nMQ7bQp=W8B7p5SVCGhkA2R-cbSC+++zoq8Bw@mail.gmail.com>
Message-ID: <5B80DD153D7D744689F57F4FB69AF47418195229@SCACMX008.exchad.jpmchase.net>

Ahmet Can KEPENEK wrote:
> Hello,
> I used regular expression module of python. I checked binary and denary numbers. If input is invalid i
> ask again. I edited your code. Code is below follow as .
> 
[snip]
> ??????? if re.match("^[0-1]*$", binary):
> ??????? if re.match("^[0-9]*$", denary2):
[snip]

Both of these will fail for empty strings (or '\n'). 

I will quote Steven D'Aprano's often quoted quotation regarding
regular expressions. (Say that 5 times fast :) )


'''
Some people, when confronted with a problem, think "I know,
     I'll use regular expressions." Now they have two problems.
     -- Jamie Zawinski
'''

I think it would be more accurate (and easier) to convert to 
int and see if the conversion works.

int(binary, 2) # binary = base 2
int(denary2, 10) # denary = base 10


~Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From eryksun at gmail.com  Wed Feb 13 23:16:20 2013
From: eryksun at gmail.com (eryksun)
Date: Wed, 13 Feb 2013 17:16:20 -0500
Subject: [Tutor] "Strange" behaviour of list comprehension
In-Reply-To: <CAJmBOfn8Z3RRKUfHCVF_CMfjVxaRZbN5f=R2XgGb=cDCW5Wayw@mail.gmail.com>
References: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
	<CAJmBOfn8Z3RRKUfHCVF_CMfjVxaRZbN5f=R2XgGb=cDCW5Wayw@mail.gmail.com>
Message-ID: <CACL+1as_EZCLXFD0nDDxR6YDGa9emJ6xziXnim26j1PAP6dabQ@mail.gmail.com>

On Wed, Feb 13, 2013 at 9:17 AM, Hugo Arts <hugo.yoshi at gmail.com> wrote:
> To be more precise, the comma at the end is part of a tuple (you can omit
> parentheses of a tuple in many cases). This makes the final for loop iterate
> over the tuple (range(y, 10), x + y == z). You'll notice that this only
> works if the variable 'z' is already defined, since the tuple isn't
> constructed in the for loop.

In 3.x the parser requires the parentheses in a list comprehension,
but not in a for loop. And the list comprehension is compiled as a
function, so you get an UnboundLocalError when trying to evaluate
x+y==z.

Just for fun, here's an example that makes a function from the code of
a list comprehension in 3.x. The function takes the first iterator in
the comprehension as an argument:

    >>> f = lambda: [(x,y) for x in 'ab' for y in 'cd']
    >>> lcomp = type(f)(f.__code__.co_consts[1], globals())

    >>> lcomp(iter('12'))
    [('1', 'c'), ('1', 'd'), ('2', 'c'), ('2', 'd')]

Never do this. The code assumes the argument is an iterator, so it's
easy to trigger a segfault:

    >>> lcomp('12')
    Segmentation fault

From hugo.yoshi at gmail.com  Wed Feb 13 23:45:53 2013
From: hugo.yoshi at gmail.com (Hugo Arts)
Date: Wed, 13 Feb 2013 23:45:53 +0100
Subject: [Tutor] "Strange" behaviour of list comprehension
In-Reply-To: <50BDA34A8AE5C2468A88793F841D54AB25881361@rtwedb05.lca.labcorp.com>
References: <50BDA34A8AE5C2468A88793F841D54AB25880F13@rtwedb05.lca.labcorp.com>
	<CAJmBOfn8Z3RRKUfHCVF_CMfjVxaRZbN5f=R2XgGb=cDCW5Wayw@mail.gmail.com>
	<50BDA34A8AE5C2468A88793F841D54AB25881361@rtwedb05.lca.labcorp.com>
Message-ID: <CAJmBOf=jQj6xvh36Uqxxie=yvDT3A+b8eUftS18Rt3+zMdazag@mail.gmail.com>

On Wed, Feb 13, 2013 at 10:07 PM, Mahadevan, Anand <Mahadea at labcorp.com>wrote:

>  Thanks for the good explanation, Hugo.  Not sure of the protocol for
> replying in this forum, when I clicked on reply it filled your id in.
>

Glad I could be of help :) For future reference, it's generally considered
politest to send all replies over the tutor mailing list as well so we can
all see them, especially if further discussion is possible. Either click
"Reply All" or make sure you have tutor at python.org in your CC list.

Hugo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/caf8373f/attachment-0001.html>

From ramit.prasad at jpmorgan.com  Wed Feb 13 23:39:26 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Wed, 13 Feb 2013 22:39:26 +0000
Subject: [Tutor] Python Lover
In-Reply-To: <BLU0-SMTP240CF348AF5BA3DBC4BEC4AFE080@phx.gbl>
References: <BLU0-SMTP240CF348AF5BA3DBC4BEC4AFE080@phx.gbl>
Message-ID: <5B80DD153D7D744689F57F4FB69AF4741819553A@SCACMX008.exchad.jpmchase.net>

Brajesh wrote:
> Hi ,
> 
> I have just subscribed mailing list to learn python. I am programming in
> java for nearly 8 months, I have developed a strong love towards python
> and want to learn and start making the best use of it. I want to know
> where to from as i know JAVA already so where to start from.
> 
> Regards
> Brajesh

Since you are from a Java background, I think it will help
you to read the following articles.

http://dirtsimple.org/2004/12/python-is-not-java.html
And the counter article
http://dirtsimple.org/2004/12/java-is-not-python-either.html


I also think Doug Hellman's Module of the Week (MOTW) is an 
excellent reference for the standard library.
http://www.doughellmann.com/PyMOTW/index.html


~Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From richkappler at gmail.com  Thu Feb 14 00:14:57 2013
From: richkappler at gmail.com (richard kappler)
Date: Wed, 13 Feb 2013 18:14:57 -0500
Subject: [Tutor] Having trouble figuring out bug
Message-ID: <CAG7edPEHZKVkGBmmH1kQOnZM=ywJctpW-NiPhFmS9kXnR0VmWg@mail.gmail.com>

I have tried to run the Google speech recognition code found here:
https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py

I am getting the following traceback:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "GoogSTT.py", line 43, in listen_for_speech
    data = stream.read(chunk)
  File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
    return pa.read_stream(self._stream, num_frames)

which refers to this part of the code:

while (True):
        data = stream.read(chunk)

        slid_win.append (abs(audioop.avg(data, 2)))

        if(True in [ x>THRESHOLD for x in slid_win]):
            if(not started):
                print "starting record"
            started = True
            all_m.append(data)
        elif (started==True):
            print "finished"
            #the limit was reached, finish capture and deliver
            filename = save_speech(all_m,p)
            stt_google_wav(filename)
            #reset all
            started = False
            slid_win = deque(maxlen=SILENCE_LIMIT*rel)
            all_m= []
            print "listening ..."

I have run another bit of code is very similar to the above, to wit:

while 1:
        data = stream.read(CHUNK_SIZE)
        L = unpack('<' + ('h'*(len(data)/2)), data) # little endian, signed
short
        L = array('h', L)
        LRtn.extend(L)


and get no errors, the code runs fine and records. Please note that the
line in question is virtually identical in both snippets of code, one
works, one does not. To the best of my ability I have verified what I know
how to, for example chunk is set with a value previous, etc. Not sure where
I'm running into problems, could use some guidance. NOTE: I did not post
the entire code here for brevity, but it is available at the listed website
or, if it is preferred, I can post it in a follow-on email.

regards, Richard


-- 

quando omni flunkus moritati
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/4f58afd5/attachment.html>

From steve at pearwood.info  Thu Feb 14 00:56:16 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Thu, 14 Feb 2013 10:56:16 +1100
Subject: [Tutor] Having trouble figuring out bug
In-Reply-To: <CAG7edPEHZKVkGBmmH1kQOnZM=ywJctpW-NiPhFmS9kXnR0VmWg@mail.gmail.com>
References: <CAG7edPEHZKVkGBmmH1kQOnZM=ywJctpW-NiPhFmS9kXnR0VmWg@mail.gmail.com>
Message-ID: <511C2820.3050704@pearwood.info>

On 14/02/13 10:14, richard kappler wrote:
> I have tried to run the Google speech recognition code found here:
> https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py
>
> I am getting the following traceback:
> Traceback (most recent call last):
>    File "<stdin>", line 1, in<module>
>    File "GoogSTT.py", line 43, in listen_for_speech
>      data = stream.read(chunk)
>    File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
>      return pa.read_stream(self._stream, num_frames)


Awesome!

Richard, if you hang around this mailing list for a while, you will soon see that we tutors have a lot of trouble convincing newbies to post the entire traceback, not just the error message. But this is the first time that somebody has posted the traceback EXCEPT for the error message.

Well done, you win the Internet :-)

Please try again and post the entire traceback, including the error message at the end.

Thank you.




-- 
Steven

From steve at pearwood.info  Thu Feb 14 01:51:43 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Thu, 14 Feb 2013 11:51:43 +1100
Subject: [Tutor] Having trouble figuring out bug
In-Reply-To: <CAG7edPESMqqHV7bFNOSYv8AvyeCroWtAFH=GTe1azw-tkv3COw@mail.gmail.com>
References: <CAG7edPEHZKVkGBmmH1kQOnZM=ywJctpW-NiPhFmS9kXnR0VmWg@mail.gmail.com>
	<511C2820.3050704@pearwood.info>
	<CAG7edPESMqqHV7bFNOSYv8AvyeCroWtAFH=GTe1azw-tkv3COw@mail.gmail.com>
Message-ID: <511C351F.8010207@pearwood.info>

On 14/02/13 11:16, richard kappler wrote:
> On Wed, Feb 13, 2013 at 6:56 PM, Steven D'Aprano<steve at pearwood.info>wrote:
>
>> On 14/02/13 10:14, richard kappler wrote:
>>
>>> I have tried to run the Google speech recognition code found here:
>>> https://github.com/jeysonmc/**python-google-speech-scripts/**
>>> blob/master/stt_google.py<https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py>
>>>
>>> I am getting the following traceback:
>>> Traceback (most recent call last):
>>>     File "<stdin>", line 1, in<module>
>>>     File "GoogSTT.py", line 43, in listen_for_speech
>>>       data = stream.read(chunk)
>>>     File "/usr/lib/python2.7/dist-**packages/pyaudio.py", line 605, in
>>> read
>>>       return pa.read_stream(self._stream, num_frames)
>>>
>>
>>
>> Awesome!
>>
>> Richard, if you hang around this mailing list for a while, you will soon
>> see that we tutors have a lot of trouble convincing newbies to post the
>> entire traceback, not just the error message. But this is the first time
>> that somebody has posted the traceback EXCEPT for the error message.
>>
>> Well done, you win the Internet :-)
>>
>> Please try again and post the entire traceback, including the error
>> message at the end.
>>
>> Thank you.
>>
>>
>> And now you see my dilemma. That's the error message, the whole bloody
> thing. But for ye unbelievers out there, here's my entire screen, from the
> call to the crash:
>
> python GoogSTT.py
> ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
> ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
> ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
> ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
> BT_GET_CAPABILITIES failed : Input/output error(5)
> ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
> BT_GET_CAPABILITIES failed : Input/output error(5)
> ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
> BT_GET_CAPABILITIES failed : Input/output error(5)
> ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
> BT_GET_CAPABILITIES failed : Input/output error(5)
> ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only
> playback stream
> Cannot connect to server socket err = No such file or directory
> Cannot connect to server request channel
> jack server is not running or cannot be started
> * listening. CTRL+C to finish.
> starting record
> ^CTraceback (most recent call last):
>    File "GoogSTT.py", line 108, in<module>
>      listen_for_speech()
>    File "GoogSTT.py", line 43, in listen_for_speech
>      data = stream.read(chunk)
>    File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
>      return pa.read_stream(self._stream, num_frames)
> KeyboardInterrupt

See that KeyboardInterrupt line? That was missing from your first post.

You get that because you have hit Ctrl-C, which is Python's way of halting the running code (if possible). If you don't want this exception, then don't hit Ctrl-C.

Which of course brings you to a dilemma -- the software tells you to use Ctrl-C to stop recording, but it apparently lies. I suggest that it is buggy. Looking at the source code to the library, here:

https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py

I'm pretty sure it is buggy. There is no attempt to catch the Ctrl-C and continue processing. I could be wrong, because I haven't actually tested it or studied it in detail, but I can't see how this could possibly work as advertised.

Also the library includes something which gives me the absolute heebie-jeebies: it downloads a website from the Internet, then *executes it as code* without making any attempt to see what it is. If you run this library, you are giving Google, or anyone that manages to intercept your connection to Google, carte blanche to run ANY CODE THEY LIKE on your computer. I wouldn't touch that library with a fifty-foot pole until that is fixed.




-- 
Steven

From richkappler at gmail.com  Thu Feb 14 02:03:10 2013
From: richkappler at gmail.com (richard kappler)
Date: Wed, 13 Feb 2013 20:03:10 -0500
Subject: [Tutor] Having trouble figuring out bug
In-Reply-To: <511C351F.8010207@pearwood.info>
References: <CAG7edPEHZKVkGBmmH1kQOnZM=ywJctpW-NiPhFmS9kXnR0VmWg@mail.gmail.com>
	<511C2820.3050704@pearwood.info>
	<CAG7edPESMqqHV7bFNOSYv8AvyeCroWtAFH=GTe1azw-tkv3COw@mail.gmail.com>
	<511C351F.8010207@pearwood.info>
Message-ID: <CAG7edPFehYsSZSNvSitrgArt27=R=f=r2Qd2eNn0PJpX_4yO7w@mail.gmail.com>

> See that KeyboardInterrupt line? That was missing from your first post.
>
> You get that because you have hit Ctrl-C, which is Python's way of halting
> the running code (if possible). If you don't want this exception, then
> don't hit Ctrl-C.
>
> Which of course brings you to a dilemma -- the software tells you to use
> Ctrl-C to stop recording, but it apparently lies. I suggest that it is
> buggy. Looking at the source code to the library, here:
>
> https://github.com/jeysonmc/**python-google-speech-scripts/**
> blob/master/stt_google.py<https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py>
>
> I'm pretty sure it is buggy. There is no attempt to catch the Ctrl-C and
> continue processing. I could be wrong, because I haven't actually tested it
> or studied it in detail, but I can't see how this could possibly work as
> advertised.
>
> Also the library includes something which gives me the absolute
> heebie-jeebies: it downloads a website from the Internet, then *executes it
> as code* without making any attempt to see what it is. If you run this
> library, you are giving Google, or anyone that manages to intercept your
> connection to Google, carte blanche to run ANY CODE THEY LIKE on your
> computer. I wouldn't touch that library with a fifty-foot pole until that
> is fixed.


Uh huh... That actually makes perfect sense and I'm a bit annoyed I didn't
catch it. So... methinks that if I code in for the recording to end on say
a second or two of silence, and get rid of the CTRL+C, then the code should
proceed as necessary. Then I neeed to figure out how to make it more secure
per your heebie-jeebies. Okay, once more into the breach dear tutors!

thanks for the help, Richard
-- 

quando omni flunkus moritati
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/4983742b/attachment-0001.html>

From doanviettrung at gmail.com  Thu Feb 14 05:08:53 2013
From: doanviettrung at gmail.com (DoanVietTrungAtGmail)
Date: Thu, 14 Feb 2013 15:08:53 +1100
Subject: [Tutor] Python Lover
In-Reply-To: <5B80DD153D7D744689F57F4FB69AF4741819553A@SCACMX008.exchad.jpmchase.net>
References: <BLU0-SMTP240CF348AF5BA3DBC4BEC4AFE080@phx.gbl>
	<5B80DD153D7D744689F57F4FB69AF4741819553A@SCACMX008.exchad.jpmchase.net>
Message-ID: <CAFZXNMHVta88hcui39EHTLYpYM8t9x0n2BhbzC_O4Wd952rQow@mail.gmail.com>

I am also learning and have found it useful to learn from David Beazley's
"Python In Action", parts 1 and 2. Part 2 is tough for me because I don't
know other languages nor systems programming, but may be OK for you Brajesh.

The slidepacks are at
     http://www.slideshare.net/dabeaz/presentations

Trung Doan
============

On Thu, Feb 14, 2013 at 9:39 AM, Prasad, Ramit <ramit.prasad at jpmorgan.com>wrote:

> Brajesh wrote:
> > Hi ,
> >
> > I have just subscribed mailing list to learn python. I am programming in
> > java for nearly 8 months, I have developed a strong love towards python
> > and want to learn and start making the best use of it. I want to know
> > where to from as i know JAVA already so where to start from.
> >
> > Regards
> > Brajesh
>
> Since you are from a Java background, I think it will help
> you to read the following articles.
>
> http://dirtsimple.org/2004/12/python-is-not-java.html
> And the counter article
> http://dirtsimple.org/2004/12/java-is-not-python-either.html
>
>
> I also think Doug Hellman's Module of the Week (MOTW) is an
> excellent reference for the standard library.
> http://www.doughellmann.com/PyMOTW/index.html
>
>
> ~Ramit
>
>
> This email is confidential and subject to important disclaimers and
> conditions including on offers for the purchase or sale of
> securities, accuracy and completeness of information, viruses,
> confidentiality, legal privilege, and legal entity disclaimers,
> available at http://www.jpmorgan.com/pages/disclosures/email.
> _______________________________________________
> 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/20130214/81feb1d6/attachment.html>

From richkappler at gmail.com  Thu Feb 14 01:16:56 2013
From: richkappler at gmail.com (richard kappler)
Date: Wed, 13 Feb 2013 19:16:56 -0500
Subject: [Tutor] Having trouble figuring out bug
In-Reply-To: <511C2820.3050704@pearwood.info>
References: <CAG7edPEHZKVkGBmmH1kQOnZM=ywJctpW-NiPhFmS9kXnR0VmWg@mail.gmail.com>
	<511C2820.3050704@pearwood.info>
Message-ID: <CAG7edPESMqqHV7bFNOSYv8AvyeCroWtAFH=GTe1azw-tkv3COw@mail.gmail.com>

On Wed, Feb 13, 2013 at 6:56 PM, Steven D'Aprano <steve at pearwood.info>wrote:

> On 14/02/13 10:14, richard kappler wrote:
>
>> I have tried to run the Google speech recognition code found here:
>> https://github.com/jeysonmc/**python-google-speech-scripts/**
>> blob/master/stt_google.py<https://github.com/jeysonmc/python-google-speech-scripts/blob/master/stt_google.py>
>>
>> I am getting the following traceback:
>> Traceback (most recent call last):
>>    File "<stdin>", line 1, in<module>
>>    File "GoogSTT.py", line 43, in listen_for_speech
>>      data = stream.read(chunk)
>>    File "/usr/lib/python2.7/dist-**packages/pyaudio.py", line 605, in
>> read
>>      return pa.read_stream(self._stream, num_frames)
>>
>
>
> Awesome!
>
> Richard, if you hang around this mailing list for a while, you will soon
> see that we tutors have a lot of trouble convincing newbies to post the
> entire traceback, not just the error message. But this is the first time
> that somebody has posted the traceback EXCEPT for the error message.
>
> Well done, you win the Internet :-)
>
> Please try again and post the entire traceback, including the error
> message at the end.
>
> Thank you.
>
>
> And now you see my dilemma. That's the error message, the whole bloody
thing. But for ye unbelievers out there, here's my entire screen, from the
call to the crash:

python GoogSTT.py
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect)
BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only
playback stream
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
* listening. CTRL+C to finish.
starting record
^CTraceback (most recent call last):
  File "GoogSTT.py", line 108, in <module>
    listen_for_speech()
  File "GoogSTT.py", line 43, in listen_for_speech
    data = stream.read(chunk)
  File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
    return pa.read_stream(self._stream, num_frames)
KeyboardInterrupt

So I call the script, when it says *listening I speak into the microphone,
then hit CTRL+C and everything after starting to record spits out. When I
run the script that fails not, it provides EXACTLY the same ALSA and
jackserver output, but records the wav.

regards, Richard

-- 

quando omni flunkus moritati
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130213/7740e76b/attachment.html>

From eva.bofias at gmail.com  Thu Feb 14 13:57:04 2013
From: eva.bofias at gmail.com (Eva Bofias)
Date: Thu, 14 Feb 2013 13:57:04 +0100
Subject: [Tutor] use of variables in re.sub
Message-ID: <CAJ1f=8VivS_Qz0YLzuBTy8MzofiOMPeYCZxfyNEedf4X7A8_gA@mail.gmail.com>

Helo,

I need to do a substitution in a regular expression that depends on a
variable. To simplify I want to be able to do this substitution:

text2='XX. AA YY. DD'
re.sub(ur"\. (AA|BB|??","(.) \g<1>",text2)

this would give as a result:
'XX(.) AA YY. DD'
Which is exactly what I want.

But when I try to substitute AA|BB|CC for a variable I do not know how to
make it work.
I wanted to use re.compile. I tryed:

NP= u"AA|BB|??"
reNP=re.compile(ur'%s'%NP)

But if I try:

reNP.match(text2)

And I do not know how to use the variables in there. Should I use
re.compile or is there something else that I should be using

Thank you

Eva Bofias
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130214/99f5eaf6/attachment.html>

From ramit.prasad at jpmorgan.com  Thu Feb 14 18:35:40 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Thu, 14 Feb 2013 17:35:40 +0000
Subject: [Tutor] associating two objects without ORM and processing
	a	text file
In-Reply-To: <CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
Message-ID: <5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>

neubyr wrote:
> I am not sure how to save an object in memory to a file before?exiting?the program. Any examples or
> related documentation links would be really helpful. I am guessing it would be using some kind of
> before teardown method, but not sure about it. Any help?

Look at the pickle or shelve modules.
http://www.doughellmann.com/PyMOTW/pickle/index.html
http://www.doughellmann.com/PyMOTW/shelve/index.html

This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From davea at davea.name  Thu Feb 14 21:30:43 2013
From: davea at davea.name (Dave Angel)
Date: Thu, 14 Feb 2013 15:30:43 -0500
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
Message-ID: <511D4973.7040308@davea.name>

On 02/14/2013 12:35 PM, Prasad, Ramit wrote:
> neubyr wrote:
>> I am not sure how to save an object in memory to a file before exiting the program. Any examples or
>> related documentation links would be really helpful. I am guessing it would be using some kind of
>> before teardown method, but not sure about it. Any help?
>
> Look at the pickle or shelve modules.
> http://www.doughellmann.com/PyMOTW/pickle/index.html
> http://www.doughellmann.com/PyMOTW/shelve/index.html
>

You miss the point.  The OP wants to make sure the text file is saved no 
matter how the program happens to exit.  He's not asking how to format 
the file.



-- 
DaveA

From mmcconac at redhat.com  Thu Feb 14 21:55:23 2013
From: mmcconac at redhat.com (Michael McConachie)
Date: Thu, 14 Feb 2013 15:55:23 -0500 (EST)
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given (x)
 Range?!?!
In-Reply-To: <mailman.0.1360871813.14433.tutor@python.org>
Message-ID: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>

Hello all,

This is my first post here.  I have tried to get answers from StackOverflow, but I realized quickly that I am too "green" for that environment.  As such, I have purchased Beginning Python (2nd edition, Hetland) and also the $29.00 course available from learnpythonthehardway(dot)com.  I have been reading fervently, and have enjoyed python -- very much.  I can do all the basic printing, math, substitutions, etc.  Although, I am stuck when trying to combine all the new skills I have been learning over the past few weeks.  Anyway, I was hoping to get some help with something NON-HOMEWORK related. (I swear.)  

I have a task that I have generalized due to the nature of what I am trying to do -- and it's need to remain confidential.  

My end goal as described on SO was: "Calculating and Plotting the Average of every (X) items in a list of (Y) total", but for now I am only stuck on the actual addition, and/or averaging items -- in a serial sense, based on the relation to the previous number, average of numbers, etc being acted on.  Not the actual plotting. (Plotting is pretty EZ.)

Essentially:

1.  I have a list of numbers that already exist in a file.  I generate this file by parsing info from logs.
2.  Each line contains an integer on it (corresponding to the number of milliseconds that it takes to complete a certain repeated task).
3.  There are over a million entries in this file, one per line; at any given time it can be just a few thousand, or more than a million.

   Example:
   -------
   173
   1685
   1152
   253
   1623

Eventually what I'll need to do is:

1.  Index the file and/or count the lines, as to identify each line's positional relevance so that it can average any range of numbers that are sequential; one to one another.
2.  Calculate the difference between any given (x) range.  In order to be able to ask the program to average every 5, 10, 100, 100, or 10,000 etc. --> until completion.  This includes the need to dealing with stray remainders at the end of the file that aren't divisible by that initial requested range. 

(ie: average some file with 3,245 entries by 100 --> not excluding the remaining 45 entries, in order to represent the remainder.)
    
So, looking above, transaction #1 took "173" milliseconds, while transaction #2 took 1685 milliseconds.  

Based on this, I need to figure out how to do two things:

1.  Calculate the difference of each transaction, related to the one before it AND record/capture the difference. (An array, list, dictionary -- I don't care.) 
2.  Starting with the very first line/entry, count the first (x number) and average (x).  I can obtain a "Happy medium" for what the gradient/delta is between sets of 100 over the course of the aggregate.

   ie:
   ---
   Entries 1-100 = (eventualPlottedAvgTotalA)
   Entries 101-200 = (eventualPlottedAvgTotalB)
   Entries 201-300 = (eventualPlottedAvgTotalC)
   Entries 301-400 = (eventualPlottedAvgTotalD)

>From what I can tell, I don't need to indefinitely store the values, only pass them as they are processed (in order) to the plotter. I have tried the following example to sum a range of 5 entries from the above list of 5 (which works), but I don't know how to dynamically pass the 5 at a time until completion, all the while retaining the calculated averages which will ultimately be passed to pyplot at a later time/date.

What I have been able to figure out thus far is below.  

ex:

   Python 2.7.3 (default, Jul 24 2012, 10:05:38) 
   [GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2
   Type "help", "copyright", "credits" or "license" for more information.
   >>> plottedTotalA = ['173', '1685', '1152', '253', '1623']
   >>> sum(float(t) for t in plottedTotalA)
   4886.0

I received 2 answers from SO, but was unable to fully capture what they were trying to tell me.  Unfortunately, I might need a "baby-step" / "Barney-style" mentor who is willing to guide me on this.  I hope this makes sense to someone out there, and thank you in advance for any help that you can provide.  I apologize in advance for being so thick if its uber-EZ.

-- Mike

From ramit.prasad at jpmorgan.com  Thu Feb 14 22:33:26 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Thu, 14 Feb 2013 21:33:26 +0000
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <511D4973.7040308@davea.name>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
Message-ID: <5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>

Dave Angel wrote:
> On 02/14/2013 12:35 PM, Prasad, Ramit wrote:
> > neubyr wrote:
> >> I am not sure how to save an object in memory to a file before exiting the program. Any examples or
> >> related documentation links would be really helpful. I am guessing it would be using some kind of
> >> before teardown method, but not sure about it. Any help?
> >
> > Look at the pickle or shelve modules.
> > http://www.doughellmann.com/PyMOTW/pickle/index.html
> > http://www.doughellmann.com/PyMOTW/shelve/index.html
> >
> 
> You miss the point.  The OP wants to make sure the text file is saved no
> matter how the program happens to exit.  He's not asking how to format
> the file.
> 

Hmm. Good point Dave, I did miss that point. 

My knee jerk response is a try/finally block, but I am sure there 
are better ways.

# UNTESTED
stored_data = {}
try:
    stored_data = load_data()
    while True:
        #<do program>
except Exception:
    raise # reraise exception to keep trace and still
          # propogate error for attention
finally:
    store_data(stored_data) # Save data since we are exiting
                            # (intentionally or not).


~Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From steve at pearwood.info  Thu Feb 14 22:58:26 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Fri, 15 Feb 2013 08:58:26 +1100
Subject: [Tutor] Python needs your help -- trademark under attack
Message-ID: <511D5E02.7090105@pearwood.info>

Hello all,


The Python Software Foundation is the organisation which protects and manages the "boring" bits of keeping a big open source project alive: the legal and contractual parts, funding for projects, trademarks and copyrights.

If you are based in Europe, or know somebody who uses Python in Europe, the PSF needs your help.

There is a company in the UK who has applied to trademark the name "Python" and are claiming the *exclusive* right to use the word "Python" for software, servers, and web services over the entire European Union.

You can read more about this here:

http://pyfound.blogspot.com/2013/02/python-trademark-at-risk-in-europe-we.html

If you have documentation of European user groups, trade associations, books, conferences, scans of job advertisements for Python programmers, software that uses some variation of "Python" in the name, etc. your evidence will be helpful in defeating this attempted grab of the Python name.

You can also testify to the fact that when you read or hear of the name "Python" in relation to computers and the Internet, you think of Python the programming language.


Thank you.



-- 
Steven

From davea at davea.name  Thu Feb 14 23:01:05 2013
From: davea at davea.name (Dave Angel)
Date: Thu, 14 Feb 2013 17:01:05 -0500
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
 (x) Range?!?!
In-Reply-To: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
References: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
Message-ID: <511D5EA1.8050109@davea.name>

On 02/14/2013 03:55 PM, Michael McConachie wrote:
> Hello all,
>
> This is my first post here.  I have tried to get answers from StackOverflow, but I realized quickly that I am too "green" for that environment.  As such, I have purchased Beginning Python (2nd edition, Hetland) and also the $29.00 course available from learnpythonthehardway(dot)com.  I have been reading fervently, and have enjoyed python -- very much.  I can do all the basic printing, math, substitutions, etc.  Although, I am stuck when trying to combine all the new skills I have been learning over the past few weeks.  Anyway, I was hoping to get some help with something NON-HOMEWORK related. (I swear.)
>
> I have a task that I have generalized due to the nature of what I am trying to do -- and it's need to remain confidential.
>
> My end goal as described on SO was: "Calculating and Plotting the Average of every (X) items in a list of (Y) total", but for now I am only stuck on the actual addition, and/or averaging items -- in a serial sense, based on the relation to the previous number, average of numbers, etc being acted on.  Not the actual plotting. (Plotting is pretty EZ.)
>

If you're stuck on the addition, why give us all the other parts?  Your 
problem statement is very confused, and you don't show much actual code.

> Essentially:
>
> 1.  I have a list of numbers that already exist in a file.  I generate this file by parsing info from logs.
> 2.  Each line contains an integer on it (corresponding to the number of milliseconds that it takes to complete a certain repeated task).
> 3.  There are over a million entries in this file, one per line; at any given time it can be just a few thousand, or more than a million.
>
>     Example:
>     -------
>     173
>     1685
>     1152
>     253
>     1623

So write a loop that reads this file into a list of ints, converting 
each line.  Then you can tell us you've got a list of about a million ints.


>
> Eventually what I'll need to do is:
>
> 1.  Index the file and/or count the lines, as to identify each line's positional relevance so that it can average any range of numbers that are sequential; one to one another.
> 2.  Calculate the difference between any given (x) range.  In order to be able to ask the program to average every 5, 10, 100, 100, or 10,000 etc. --> until completion.  This includes the need to dealing with stray remainders at the end of the file that aren't divisible by that initial requested range.
>
> (ie: average some file with 3,245 entries by 100 --> not excluding the remaining 45 entries, in order to represent the remainder.)
>
> So, looking above, transaction #1 took "173" milliseconds, while transaction #2 took 1685 milliseconds.
>
> Based on this, I need to figure out how to do two things:
>
> 1.  Calculate the difference of each transaction, related to the one before it AND record/capture the difference. (An array, list, dictionary -- I don't care.)

What difference, what transaction, related how?


> 2.  Starting with the very first line/entry, count the first (x number) and average (x).  I can obtain a "Happy medium" for what the gradient/delta is between sets of 100 over the course of the aggregate.

What's an x-number?  What, what, which, who ?

>
>     ie:
>     ---
>     Entries 1-100 = (eventualPlottedAvgTotalA)
>     Entries 101-200 = (eventualPlottedAvgTotalB)
>     Entries 201-300 = (eventualPlottedAvgTotalC)
>     Entries 301-400 = (eventualPlottedAvgTotalD)
>
>>From what I can tell, I don't need to indefinitely store the values, only pass them as they are processed (in order) to the plotter. I have tried the following example to sum a range of 5 entries from the above list of 5 (which works), but I don't know how to dynamically pass the 5 at a time until completion, all the while retaining the calculated averages which will ultimately be passed to pyplot at a later time/date.
>
> What I have been able to figure out thus far is below.
>
> ex:
>
>     Python 2.7.3 (default, Jul 24 2012, 10:05:38)
>     [GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2
>     Type "help", "copyright", "credits" or "license" for more information.
>     >>> plottedTotalA = ['173', '1685', '1152', '253', '1623']
>     >>> sum(float(t) for t in plottedTotalA)
>     4886.0
>
> I received 2 answers from SO, but was unable to fully capture what they were trying to tell me.  Unfortunately, I might need a "baby-step" / "Barney-style" mentor who is willing to guide me on this.  I hope this makes sense to someone out there, and thank you in advance for any help that you can provide.  I apologize in advance for being so thick if its uber-EZ.
>
>

If you want to make a sublist out of the first 2 items in a list, you 
can use a slice  (notice the colon):

     allvalues = [ 173, 1685, 1152, 263, 1623, 19 ]
     firsttwo = allvalues[0:2]

To get the 3rd such sublist, use
     othertwo = allvalues[4:2]


If you've made such a list, you can readily use sum directly on it:
       mysum = sum(othertwo)



-- 
DaveA

From davea at davea.name  Thu Feb 14 23:05:09 2013
From: davea at davea.name (Dave Angel)
Date: Thu, 14 Feb 2013 17:05:09 -0500
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
Message-ID: <511D5F95.70606@davea.name>

On 02/14/2013 04:33 PM, Prasad, Ramit wrote:
> Dave Angel wrote:
>> On 02/14/2013 12:35 PM, Prasad, Ramit wrote:
>>> neubyr wrote:
>>>> I am not sure how to save an object in memory to a file before exiting the program. Any examples or
>>>> related documentation links would be really helpful. I am guessing it would be using some kind of
>>>> before teardown method, but not sure about it. Any help?
>>>
>>> Look at the pickle or shelve modules.
>>> http://www.doughellmann.com/PyMOTW/pickle/index.html
>>> http://www.doughellmann.com/PyMOTW/shelve/index.html
>>>
>>
>> You miss the point.  The OP wants to make sure the text file is saved no
>> matter how the program happens to exit.  He's not asking how to format
>> the file.
>>
>
> Hmm. Good point Dave, I did miss that point.
>
> My knee jerk response is a try/finally block, but I am sure there
> are better ways.
>
> # UNTESTED
> stored_data = {}
> try:
>      stored_data = load_data()
>      while True:
>          #<do program>
> except Exception:
>      raise # reraise exception to keep trace and still
>            # propogate error for attention
> finally:
>      store_data(stored_data) # Save data since we are exiting
>                              # (intentionally or not).

That would be my reaction as well.  I would, however make it conditional 
on some changes having been made.  That way if this program run only 
made queries, the effort and risk of saving can be avoided.

The other thing I'd recommend is to store the data in an alternate file, 
and only delete the original when the alternate is ready to rename. 
That way, you can't readily get into trouble if something crashes while 
saving.



-- 
DaveA

From steve at pearwood.info  Thu Feb 14 23:48:18 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Fri, 15 Feb 2013 09:48:18 +1100
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
 (x) Range?!?!
In-Reply-To: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
References: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
Message-ID: <511D69B2.9080802@pearwood.info>

On 15/02/13 07:55, Michael McConachie wrote:

> Essentially:
>
> 1.  I have a list of numbers that already exist in a file.  I generate this file by parsing info from logs.
> 2.  Each line contains an integer on it (corresponding to the number of milliseconds that it takes to complete a certain repeated task).
> 3.  There are over a million entries in this file, one per line; at any given time it can be just a few thousand, or more than a million.
>
>     Example:
>     -------
>     173
>     1685
>     1152
>     253
>     1623


A million entries sounds like a lot to you or me, but to your computer, it's not. When you start talking tens or hundreds of millions, that's possibly a lot.

Do you know how to read those numbers into a Python list? Here is the "baby step" way to do so:


data = []  # Start with an empty list.
f = open("filename")  # Obviously you have to use the actual file name.
for line in f:  # Read the file one line at a time.
     num = int(line)  # Convert each line into an integer (whole number)
     data.append(num)  # and append it to the end of the list.
f.close()  # Close the file when done.


Here's a more concise way to do it:

with open("filename") as f:
     data = [int(line) for line in f]



Once you have that list of numbers, you can sum the whole lot:

sum(data)


or just a range of the items:

sum(data[:100])  # The first 100 items.

sum(data[100:200])  # The second 100 items.

sum(data[-50:])  # The last 50 items.

sum(data[1000:])  # Item 1001 to the end.  (See below.)

sum(data[5:99:3])  # Every third item, starting at index 5 and ending at index 98.



This is called "slicing", and it is perhaps the most powerful and useful technique that Python gives you for dealing with lists. The rules though are not necessarily the most intuitive though.


A slice is either a pair of numbers separated with a colon, inside the square brackets:

     data[start:end]

or a triple:

     data[start:end:step]

Any of these three numbers can be left out. The default values are:

start=0
end=length of the sequence being sliced
step=1

They can also be negative. If start or end are negative, they are interpreted as "from the end" rather than "from the beginning".

Item positions are counted from 0, which will be very familiar to C programmers. The start index is included in the slice, the end position is excluded.

The model that you should think of is to imagine the sequence of items labelled with their index, starting from zero, and with a vertical line *between* each position. Here is a sequence of 26 items, showing the index in the first line and the value in the second:


|0|1|2|3|4|5|6|7|8|9| ... |25|
|a|b|c|d|e|f|g|h|i|j| ... |z |

When you take a slice, the items are always cut at the left. So, if the above is called "letters", we have:

letters[0:4]  # returns "abcd"

letters[2:8]  # returns "cdefgh"

letters[2:8:2]  # returns "ceg"

letters[-3:]  # returns "xyz"



> Eventually what I'll need to do is:
>
> 1.  Index the file and/or count the lines, as to identify each line's positional relevance so that it can average any range of numbers that are sequential; one to one another.


No need. Python already does that, automatically, when you read the data into a list.



> 2.  Calculate the difference between any given (x) range.  In order to be able to ask the program to average every 5, 10, 100, 100, or 10,000 etc. -->  until completion.  This includes the need to dealing with stray remainders at the end of the file that aren't divisible by that initial requested range.

I don't quite understand you here. First you say "difference", then you say "average". Can you show a sample of data, say, 10 values, and the sorts of typical calculations you want to perform, with the answers you expect to get?


For example, here's 10 numbers:


103, 104, 105, 109, 111, 112, 115, 120, 123, 128


Here are the running averages of 3 values:

(103+104+105)/3

(104+105+109)/3

(105+109+111)/3

(109+111+112)/3

(111+112+115)/3

(112+115+120)/3

(115+120+123)/3

(120+123+128)/3


Is that what you mean? If so, then Python can deal with this trivially, using slicing. With your data stored in list "data", as above, I can say:


for i in range(0, len(data)-3):  # Stop 3 from the end.
     print sum(data[i:i+3])


to print the running sums taking three items at a time.



The rest of your post just confuses me. Until you explain exactly what calculations you are trying to perform, I can't tell you how to perform them :-)




-- 
Steven

From bgailer at gmail.com  Thu Feb 14 23:06:57 2013
From: bgailer at gmail.com (bob gailer)
Date: Thu, 14 Feb 2013 17:06:57 -0500
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
 (x) Range?!?!
In-Reply-To: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
References: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
Message-ID: <511D6001.1020804@gmail.com>

On 2/14/2013 3:55 PM, Michael McConachie wrote:
[snip]

I agree with dave angel - the specification is far from clear. please 
clarify. perhaps a simple example that goes from input to desired output.

-- 
Bob Gailer
919-636-4239
Chapel Hill NC


From oscar.j.benjamin at gmail.com  Fri Feb 15 01:29:38 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Fri, 15 Feb 2013 00:29:38 +0000
Subject: [Tutor] use of variables in re.sub
In-Reply-To: <CAJ1f=8VivS_Qz0YLzuBTy8MzofiOMPeYCZxfyNEedf4X7A8_gA@mail.gmail.com>
References: <CAJ1f=8VivS_Qz0YLzuBTy8MzofiOMPeYCZxfyNEedf4X7A8_gA@mail.gmail.com>
Message-ID: <CAHVvXxQR2E_bZdTmk3SJKL3b7a6cmZWmv9PNFsB+MZ1t6M7=JA@mail.gmail.com>

On 14 February 2013 12:57, Eva Bofias <eva.bofias at gmail.com> wrote:
> Helo,

Hi,

> I need to do a substitution in a regular expression that depends on a
> variable. To simplify I want to be able to do this substitution:
>
> text2='XX. AA YY. DD'
> re.sub(ur"\. (AA|BB|??","(.) \g<1>",text2)

There is a missing bracket in that expression. did you mean ur"\. (AA|BB|??)"?

> this would give as a result:
> 'XX(.) AA YY. DD'
> Which is exactly what I want.
>
> But when I try to substitute AA|BB|CC for a variable I do not know how to
> make it work.

How about this?

>>> import re
>>> text2='XX. AA YY. DD'
>>> re.sub(ur"\. (AA|BB|??)",r"(.) \g<1>",text2)  # ?Note the r"" raw string!
'XX(.) AA YY. DD'


Or have I misunderstood?


Oscar

From neubyr at gmail.com  Fri Feb 15 04:01:20 2013
From: neubyr at gmail.com (neubyr)
Date: Thu, 14 Feb 2013 21:01:20 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <kfgr3l$k1$1@ger.gmane.org>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<kfgr3l$k1$1@ger.gmane.org>
Message-ID: <CALFxCvx9YpK=r5vkLxpFhcwW0oTzL6HyXVX_NJ-14zJO5+yJGQ@mail.gmail.com>

On Wed, Feb 13, 2013 at 1:55 PM, Alan Gauld <alan.gauld at btinternet.com>wrote:

> On 13/02/13 19:14, neubyr wrote:
>
>  I am not sure how to save an object in memory to a file
>> before exiting the program. Any examples or related documentation links
>> would be really helpful. I am guessing it would be using some kind of
>> before teardown method, but not sure about it. Any help?
>>
>
> If using class methods or standalone functions just call them explicitly
> at the start and end of your program. If you want to
> be sure it gets called use a try/finally
>
> try:
>    Book.loadBooks(filename)  # load the data
>    # do your program stuff
> finally:
>    Book.saveBooks(filename)   # save the data
>
> That ensures that even if there is an exception the data will always be
> saved.
>
>
>

Thanks Alan!

- N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130214/5ac95e09/attachment.html>

From neubyr at gmail.com  Fri Feb 15 04:09:49 2013
From: neubyr at gmail.com (neubyr)
Date: Thu, 14 Feb 2013 21:09:49 -0600
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <511D5F95.70606@davea.name>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
	<511D5F95.70606@davea.name>
Message-ID: <CALFxCvzABRstXhieaomMj-g5YOecSvxVhX+sRHLvkJ-J-d0oQA@mail.gmail.com>

On Thu, Feb 14, 2013 at 4:05 PM, Dave Angel <davea at davea.name> wrote:

> On 02/14/2013 04:33 PM, Prasad, Ramit wrote:
>
>> Dave Angel wrote:
>>
>>> On 02/14/2013 12:35 PM, Prasad, Ramit wrote:
>>>
>>>> neubyr wrote:
>>>>
>>>>> I am not sure how to save an object in memory to a file before exiting
>>>>> the program. Any examples or
>>>>> related documentation links would be really helpful. I am guessing it
>>>>> would be using some kind of
>>>>> before teardown method, but not sure about it. Any help?
>>>>>
>>>>
>>>> Look at the pickle or shelve modules.
>>>> http://www.doughellmann.com/**PyMOTW/pickle/index.html<http://www.doughellmann.com/PyMOTW/pickle/index.html>
>>>> http://www.doughellmann.com/**PyMOTW/shelve/index.html<http://www.doughellmann.com/PyMOTW/shelve/index.html>
>>>>
>>>>
>>> You miss the point.  The OP wants to make sure the text file is saved no
>>> matter how the program happens to exit.  He's not asking how to format
>>> the file.
>>>
>>>
>> Hmm. Good point Dave, I did miss that point.
>>
>> My knee jerk response is a try/finally block, but I am sure there
>> are better ways.
>>
>> # UNTESTED
>> stored_data = {}
>> try:
>>      stored_data = load_data()
>>      while True:
>>          #<do program>
>> except Exception:
>>      raise # reraise exception to keep trace and still
>>            # propogate error for attention
>> finally:
>>      store_data(stored_data) # Save data since we are exiting
>>                              # (intentionally or not).
>>
>
> That would be my reaction as well.  I would, however make it conditional
> on some changes having been made.  That way if this program run only made
> queries, the effort and risk of saving can be avoided.
>
> The other thing I'd recommend is to store the data in an alternate file,
> and only delete the original when the alternate is ready to rename. That
> way, you can't readily get into trouble if something crashes while saving.
>
>
>
>
>
Thanks Ramit and Dave!

I haven't had chance to code/learn further, but I will give play with this
soon.

I do have a doubt regarding this - e.g. how would I implement this if my
program/application is web based. For example, loading the text file during
web server start and stop.

Hope to try it out soon!


- N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130214/01099e3b/attachment.html>

From eryksun at gmail.com  Fri Feb 15 06:38:33 2013
From: eryksun at gmail.com (eryksun)
Date: Fri, 15 Feb 2013 00:38:33 -0500
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
Message-ID: <CACL+1as09jRMFrUu4-tY2LjCrUTJf4P-hNNzXNeMdQtzvA11Ng@mail.gmail.com>

On Thu, Feb 14, 2013 at 4:33 PM, Prasad, Ramit
<ramit.prasad at jpmorgan.com> wrote:
> My knee jerk response is a try/finally block, but I am sure there
> are better ways.

The atexit.register decorator hooks sys.exitfunc:

http://docs.python.org/2/library/atexit

Registered atexit functions are run early during interpreter
finalization. Signal handling is still enabled (e.g. SIGINT), and you
can still import. In the standard lib, logging and multiprocessing use
atexit.

In a C extension there's also Py_AtExit for registering a C function:

http://docs.python.org/2/c-api/sys.html#Py_AtExit

Calling the exitfuncs is the last task in Py_Finalize, after
everything has been torn down, so they should not use the C-API.

Example:

    import atexit
    from tempfile import NamedTemporaryFile
    from subprocess import Popen, PIPE
    from ctypes import CDLL, pythonapi

    @atexit.register
    def f():
        print "shutdown: atexit"

    # register a C function
    with NamedTemporaryFile() as so:
        p = Popen(['gcc', '-xc', '-shared', '-fPIC', '-o',
                   so.name, '-'], stdin=PIPE, stdout=so)
        p.communicate('''#include <stdio.h>
          void fc(void) {printf("shutdown: Py_AtExit\\n");}''')
        fc = CDLL(so.name).fc # keep reference
        pythonapi.Py_AtExit(fc)

    try:
        raise RuntimeError
    finally:
        print "shutdown: finally"

Output:

shutdown: finally
Traceback (most recent call last):
  File "atexit_example.py", line 20, in <module>
    raise RuntimeError
RuntimeError
shutdown: atexit
shutdown: Py_AtExit

From alan.gauld at btinternet.com  Fri Feb 15 09:58:40 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Fri, 15 Feb 2013 08:58:40 +0000
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <CALFxCvzABRstXhieaomMj-g5YOecSvxVhX+sRHLvkJ-J-d0oQA@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
	<511D5F95.70606@davea.name>
	<CALFxCvzABRstXhieaomMj-g5YOecSvxVhX+sRHLvkJ-J-d0oQA@mail.gmail.com>
Message-ID: <kfktbt$pbk$1@ger.gmane.org>

On 15/02/13 03:09, neubyr wrote:

> I do have a doubt regarding this - e.g. how would I implement this if my
> program/application is web based. For example, loading the text file
> during web server start and stop.

For a long running process like a web server this is probably the wrong 
approach. You probably want to save the data more regularly - maybe even 
at the end of every user transaction. But with a web server we have the 
additional problem of usually wanting to handle multiple requests in 
parallel so storing data in memory gets more complicated - which takes 
us back to using a data base which pretty much handles all of that for you.

If you will only have a single request running at a time then you can 
use the same try/finally approach in your transaction processing code. 
But because they run  so often I'd add the 'dirty flag' idea that 
somebody else mentioned too so that you don;t sabve if no changes have 
been made.

A dirty flag is simply a global (or class) level variable (isDirty) that 
gets set by your code anytime you change the data. If a book changes its 
state it sets the flag to True. The save code then does something like

with open(filename) as store
    if Book.isDirty:
       for book in Book.instances:
           book.save(store)

That will ensure that any changes are saved but we don't waste time
if no changes exist.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From michael at redhat.com  Fri Feb 15 15:41:54 2013
From: michael at redhat.com (Michael J. McConachie)
Date: Fri, 15 Feb 2013 09:41:54 -0500
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
 (x) Range?!?!
In-Reply-To: <511D6001.1020804@gmail.com>
References: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
	<511D6001.1020804@gmail.com>
Message-ID: <511E4932.6090102@redhat.com>

@Bob @David -- I gave you all the other parts to give you a background,
and context as it relates to my 'problem'.  My apologies if it seems
obfuscated.  I took an  hour to write that email, and revised it several
times in an attempt to provide good information.  Please disregard my OP.


On 02/14/2013 05:06 PM, bob gailer wrote:
> On 2/14/2013 3:55 PM, Michael McConachie wrote:
> [snip]
>
> I agree with dave angel - the specification is far from clear. please
> clarify. perhaps a simple example that goes from input to desired output.
>


From michael at redhat.com  Fri Feb 15 15:45:05 2013
From: michael at redhat.com (Michael J. McConachie)
Date: Fri, 15 Feb 2013 09:45:05 -0500
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
 (x) Range?!?!
In-Reply-To: <511D69B2.9080802@pearwood.info>
References: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
	<511D69B2.9080802@pearwood.info>
Message-ID: <511E49F1.8060901@redhat.com>

@ Stephen,

Thank you for the answers.  I appreciate your understanding, and
patience; I understand that it was confusing (unintentionally) and
probably irritating to any of the seasoned tutor list members. 

Your examples helped greatly, and was the push I needed.  Happy Friday,
and thanks again,

Mike

On 02/14/2013 05:48 PM, Steven D'Aprano wrote:
> On 15/02/13 07:55, Michael McConachie wrote:
>
>> Essentially:
>>
>> 1.  I have a list of numbers that already exist in a file.  I
>> generate this file by parsing info from logs.
>> 2.  Each line contains an integer on it (corresponding to the number
>> of milliseconds that it takes to complete a certain repeated task).
>> 3.  There are over a million entries in this file, one per line; at
>> any given time it can be just a few thousand, or more than a million.
>>
>>     Example:
>>     -------
>>     173
>>     1685
>>     1152
>>     253
>>     1623
>
>
> A million entries sounds like a lot to you or me, but to your
> computer, it's not. When you start talking tens or hundreds of
> millions, that's possibly a lot.
>
> Do you know how to read those numbers into a Python list? Here is the
> "baby step" way to do so:
>
>
> data = []  # Start with an empty list.
> f = open("filename")  # Obviously you have to use the actual file name.
> for line in f:  # Read the file one line at a time.
>     num = int(line)  # Convert each line into an integer (whole number)
>     data.append(num)  # and append it to the end of the list.
> f.close()  # Close the file when done.
>
>
> Here's a more concise way to do it:
>
> with open("filename") as f:
>     data = [int(line) for line in f]
>
>
>
> Once you have that list of numbers, you can sum the whole lot:
>
> sum(data)
>
>
> or just a range of the items:
>
> sum(data[:100])  # The first 100 items.
>
> sum(data[100:200])  # The second 100 items.
>
> sum(data[-50:])  # The last 50 items.
>
> sum(data[1000:])  # Item 1001 to the end.  (See below.)
>
> sum(data[5:99:3])  # Every third item, starting at index 5 and ending
> at index 98.
>
>
>
> This is called "slicing", and it is perhaps the most powerful and
> useful technique that Python gives you for dealing with lists. The
> rules though are not necessarily the most intuitive though.
>
>
> A slice is either a pair of numbers separated with a colon, inside the
> square brackets:
>
>     data[start:end]
>
> or a triple:
>
>     data[start:end:step]
>
> Any of these three numbers can be left out. The default values are:
>
> start=0
> end=length of the sequence being sliced
> step=1
>
> They can also be negative. If start or end are negative, they are
> interpreted as "from the end" rather than "from the beginning".
>
> Item positions are counted from 0, which will be very familiar to C
> programmers. The start index is included in the slice, the end
> position is excluded.
>
> The model that you should think of is to imagine the sequence of items
> labelled with their index, starting from zero, and with a vertical
> line *between* each position. Here is a sequence of 26 items, showing
> the index in the first line and the value in the second:
>
>
> |0|1|2|3|4|5|6|7|8|9| ... |25|
> |a|b|c|d|e|f|g|h|i|j| ... |z |
>
> When you take a slice, the items are always cut at the left. So, if
> the above is called "letters", we have:
>
> letters[0:4]  # returns "abcd"
>
> letters[2:8]  # returns "cdefgh"
>
> letters[2:8:2]  # returns "ceg"
>
> letters[-3:]  # returns "xyz"
>
>
>
>> Eventually what I'll need to do is:
>>
>> 1.  Index the file and/or count the lines, as to identify each line's
>> positional relevance so that it can average any range of numbers that
>> are sequential; one to one another.
>
>
> No need. Python already does that, automatically, when you read the
> data into a list.
>
>
>
>> 2.  Calculate the difference between any given (x) range.  In order
>> to be able to ask the program to average every 5, 10, 100, 100, or
>> 10,000 etc. -->  until completion.  This includes the need to dealing
>> with stray remainders at the end of the file that aren't divisible by
>> that initial requested range.
>
> I don't quite understand you here. First you say "difference", then
> you say "average". Can you show a sample of data, say, 10 values, and
> the sorts of typical calculations you want to perform, with the
> answers you expect to get?
>
>
> For example, here's 10 numbers:
>
>
> 103, 104, 105, 109, 111, 112, 115, 120, 123, 128
>
>
> Here are the running averages of 3 values:
>
> (103+104+105)/3
>
> (104+105+109)/3
>
> (105+109+111)/3
>
> (109+111+112)/3
>
> (111+112+115)/3
>
> (112+115+120)/3
>
> (115+120+123)/3
>
> (120+123+128)/3
>
>
> Is that what you mean? If so, then Python can deal with this
> trivially, using slicing. With your data stored in list "data", as
> above, I can say:
>
>
> for i in range(0, len(data)-3):  # Stop 3 from the end.
>     print sum(data[i:i+3])
>
>
> to print the running sums taking three items at a time.
>
>
>
> The rest of your post just confuses me. Until you explain exactly what
> calculations you are trying to perform, I can't tell you how to
> perform them :-)
>
>
>
>


From fomcl at yahoo.com  Fri Feb 15 22:03:00 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Fri, 15 Feb 2013 13:03:00 -0800 (PST)
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
	(x) Range?!?!
In-Reply-To: <766423498.1712009.1360875323937.JavaMail.root@redhat.com>
References: <mailman.0.1360871813.14433.tutor@python.org>
	<766423498.1712009.1360875323937.JavaMail.root@redhat.com>
Message-ID: <1360962180.92259.YahooMailNeo@web163803.mail.gq1.yahoo.com>

<snip>
> Eventually what I'll need to do is:

> 
> 1.? Index the file and/or count the lines, as to identify each line's 
> positional relevance so that it can average any range of numbers that are 
> sequential; one to one another.

In other words: you would like to down-sample your data? For example, reduce a sampling frequency from 1000 samples/second (1KHz) to 100, by averaging every ten sequential data points?

> 2.? Calculate the difference between any given (x) range.? In order to be able 
> to ask the program to average every 5, 10, 100, 100, or 10,000 etc. --> until 
> completion.? This includes the need to dealing with stray remainders at the end 
> of the file that aren't divisible by that initial requested range. 

In other words: you would like to calculate a running/moving average, with window size as a parameter?

From michael at redhat.com  Fri Feb 15 23:00:55 2013
From: michael at redhat.com (Michael J. McConachie)
Date: Fri, 15 Feb 2013 17:00:55 -0500
Subject: [Tutor] Newbie Here -- Averaging & Adding Madness Over a Given
 (x) Range?!?!
In-Reply-To: <1360962180.92259.YahooMailNeo@web163803.mail.gq1.yahoo.com>
References: <mailman.0.1360871813.14433.tutor@python.org>
	<766423498.1712009.1360875323937.JavaMail.root@redhat.com>
	<1360962180.92259.YahooMailNeo@web163803.mail.gq1.yahoo.com>
Message-ID: <511EB017.5020705@redhat.com>

On 02/15/2013 04:03 PM, Albert-Jan Roskam wrote:
> <snip>
>> Eventually what I'll need to do is:
>> 1.  Index the file and/or count the lines, as to identify each line's 
>> positional relevance so that it can average any range of numbers that are 
>> sequential; one to one another.
> In other words: you would like to down-sample your data? For example, reduce a sampling frequency from 1000 samples/second (1KHz) to 100, by averaging every ten sequential data points?
I think so.  When I said 'index' in my OP, I wasn't sure how to explain
that each line would be used positionally to identify each group of (x)
among themselves.  (That's all I meant.)  I am trying to identify
gradient(s) in order to determine performance 'thresholds' if they
exist.  We are noting that as the number of tasks (already performed)
increases, a noticeable decrease in the performance of a certain
repeated task exists.  I am trying to determine that point/elbow in the
performance curve.  I have been asked to identify, and plot the overall
'average performance' with varying levels of granularity.  (Averaging
10, by 100, by 1000, etc.)

The file I mentioned in my OP contains the measurement of time it takes
to complete these repeated tasks.  Each entry is on it's own line. The
recorded data is in literal order of completion.  I am averaging those
(ms time entries) in sets of (x) to keep from having to compute the
difference in time for each completed task individually.

  ie:
       Lines 1-10, (11-20, 21-30 --> to completion) are averaged and
read into a list, or hash in order.
  or:
       Lines 1-100, (101-200, 201-300 --> to completion) are averaged
and read into a list, or hash in order.
  or:
       Lines 1-1000, (1001-2000, 2001-3000 --> to completion) are
averaged and read into a list, or hash in order.

       etc, etc.
>> 2.  Calculate the difference between any given (x) range.  In order to be able 
>> to ask the program to average every 5, 10, 100, 100, or 10,000 etc. --> until 
>> completion.  This includes the need to dealing with stray remainders at the end 
>> of the file that aren't divisible by that initial requested range. 
> In other words: you would like to calculate a running/moving average, with window size as a parameter?
Yes.


From joel.goldstick at gmail.com  Fri Feb 15 23:05:51 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Fri, 15 Feb 2013 17:05:51 -0500
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
Message-ID: <CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>

On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski
<spiceninja4u at gmail.com>wrote:

>
>
> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <joel.goldstick at gmail.com>wrote:
>
>>
>>
>>
>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>> spiceninja4u at gmail.com> wrote:
>>
>>> Hi,
>>>
>>>
>>> I am very new to Python, I am using the e-book "Python Programming for
>>> the Absolute Beginner" and am starting with a simple "Game Over" Program.
>>>  This is the code:which is extremely simple!
>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>
>>
>> welcome Nicholas
>>
>>
>> One important thing about python is indentation is important.  You have
>> presented your code in a way that can't be.  Can you actually copy your
>> program and paste it into an email message.  Also, Windows, Linux, Mac?
>>
>>
>>
>>> That's it. It is supposed to bring up a window that says "Game Over" and
>>> at the bottom say "Press enter Key to exit" and when you press the enter
>>> key it is supposed to exit(big suprise).
>>> But all it does is highlight "raw_input" and says "invalid syntax" Now,
>>> if I just put "print "Game Over"" then it says Game Over UNDERNEATH the
>>> code I just printed!
>>> now I am following the book to the *pixel* and that is not what is
>>> supposed to happen!
>>> Please email me back as soon as you get this...(if you are not to busy).
>>>
>>> Thanks,Nicholas
>>>
>>> --
>>> http://mail.python.org/mailman/listinfo/python-list
>>>
>>>
>>
>>
>> --
>> Joel Goldstick
>> http://joelgoldstick.com
>>
>
>
> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
> Here is the code in exact form
> print "Game Over"
>      raw_input("\n\nPress Enter Key to Exit")
> Thanks,
> Nicholas


You need to unindent the raw_input like so:

print "Game Over"
raw_input("\n\nPress Enter Key to Exit")

In python you indent code blocks (like for loops, if statements, function
blocks, etc.).  You can't just indent from one line to the next in
sequential code or you will be told its a syntax error



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130215/7bb68001/attachment-0001.html>

From joel.goldstick at gmail.com  Fri Feb 15 23:12:58 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Fri, 15 Feb 2013 17:12:58 -0500
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
Message-ID: <CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>

On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski
<spiceninja4u at gmail.com>wrote:

> It Didn't work.


First of all, reply to all.  You are sending messages to me only, not to
the group.  Other's may be able to help you better than I can.

Second.  "It didn't work" is not a useful answer.

So you have a file with two lines in it.  The first has a print statement.
The second has a raw_input statement.  When you run it, what happens
exactly? Do you get a traceback message telling you what the error is, and
on what line?



>
>
> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <joel.goldstick at gmail.com>wrote:
>
>>
>>
>>
>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>> spiceninja4u at gmail.com> wrote:
>>
>>>
>>>
>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>> joel.goldstick at gmail.com> wrote:
>>>
>>>>
>>>>
>>>>
>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>> spiceninja4u at gmail.com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>>
>>>>> I am very new to Python, I am using the e-book "Python Programming for
>>>>> the Absolute Beginner" and am starting with a simple "Game Over" Program.
>>>>>  This is the code:which is extremely simple!
>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>
>>>>
>>>> welcome Nicholas
>>>>
>>>>
>>>> One important thing about python is indentation is important.  You have
>>>> presented your code in a way that can't be.  Can you actually copy your
>>>> program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>
>>>>
>>>>
>>>>> That's it. It is supposed to bring up a window that says "Game Over"
>>>>> and at the bottom say "Press enter Key to exit" and when you press the
>>>>> enter key it is supposed to exit(big suprise).
>>>>> But all it does is highlight "raw_input" and says "invalid syntax"
>>>>> Now, if I just put "print "Game Over"" then it says Game Over UNDERNEATH
>>>>> the code I just printed!
>>>>> now I am following the book to the *pixel* and that is not what is
>>>>> supposed to happen!
>>>>> Please email me back as soon as you get this...(if you are not to
>>>>> busy).
>>>>>
>>>>> Thanks,Nicholas
>>>>>
>>>>> --
>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Joel Goldstick
>>>> http://joelgoldstick.com
>>>>
>>>
>>>
>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>> Here is the code in exact form
>>> print "Game Over"
>>>      raw_input("\n\nPress Enter Key to Exit")
>>> Thanks,
>>> Nicholas
>>
>>
>> You need to unindent the raw_input like so:
>>
>>
>> print "Game Over"
>> raw_input("\n\nPress Enter Key to Exit")
>>
>> In python you indent code blocks (like for loops, if statements, function
>> blocks, etc.).  You can't just indent from one line to the next in
>> sequential code or you will be told its a syntax error
>>
>>
>>
>> --
>> Joel Goldstick
>> http://joelgoldstick.com
>>
>
>
>
> --
> Nicholas J. Piotrowski




-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130215/bfbb4037/attachment.html>

From joel.goldstick at gmail.com  Fri Feb 15 23:29:53 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Fri, 15 Feb 2013 17:29:53 -0500
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
Message-ID: <CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>

Are you using python 2 or python 3?


On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski
<spiceninja4u at gmail.com>wrote:

> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New Window"
> and type in the code:
> print "Game Over"
> raw_input("\n\nPress Enter Key to exit")
> and save the file on my desktop.
> I double-click it and it opens a black window with gray text for a split
> second and if you look quickly enough then you can see "Invalid Sytnax".
> If I do the same code in the Interactive Window then it highlights
> "raw_input" and says "Invalid Syntax"
>
> Are you using python 2 or python 3?

>
> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <joel.goldstick at gmail.com>wrote:
>
>>
>>
>>
>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
>> spiceninja4u at gmail.com> wrote:
>>
>>> It Didn't work.
>>
>>
>> First of all, reply to all.  You are sending messages to me only, not to
>> the group.  Other's may be able to help you better than I can.
>>
>> Second.  "It didn't work" is not a useful answer.
>>
>> So you have a file with two lines in it.  The first has a print
>> statement.  The second has a raw_input statement.  When you run it, what
>> happens exactly? Do you get a traceback message telling you what the error
>> is, and on what line?
>>
>>
>>
>>>
>>>
>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
>>> joel.goldstick at gmail.com> wrote:
>>>
>>>>
>>>>
>>>>
>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>>>> spiceninja4u at gmail.com> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>>>> joel.goldstick at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>>
>>>>>>> I am very new to Python, I am using the e-book "Python Programming
>>>>>>> for the Absolute Beginner" and am starting with a simple "Game Over"
>>>>>>> Program.  This is the code:which is extremely simple!
>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>>>
>>>>>>
>>>>>> welcome Nicholas
>>>>>>
>>>>>>
>>>>>> One important thing about python is indentation is important.  You
>>>>>> have presented your code in a way that can't be.  Can you actually copy
>>>>>> your program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>>>
>>>>>>
>>>>>>
>>>>>>> That's it. It is supposed to bring up a window that says "Game Over"
>>>>>>> and at the bottom say "Press enter Key to exit" and when you press the
>>>>>>> enter key it is supposed to exit(big suprise).
>>>>>>> But all it does is highlight "raw_input" and says "invalid syntax"
>>>>>>> Now, if I just put "print "Game Over"" then it says Game Over UNDERNEATH
>>>>>>> the code I just printed!
>>>>>>> now I am following the book to the *pixel* and that is not what is
>>>>>>> supposed to happen!
>>>>>>> Please email me back as soon as you get this...(if you are not to
>>>>>>> busy).
>>>>>>>
>>>>>>> Thanks,Nicholas
>>>>>>>
>>>>>>> --
>>>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Joel Goldstick
>>>>>> http://joelgoldstick.com
>>>>>>
>>>>>
>>>>>
>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>>>> Here is the code in exact form
>>>>> print "Game Over"
>>>>>      raw_input("\n\nPress Enter Key to Exit")
>>>>> Thanks,
>>>>> Nicholas
>>>>
>>>>
>>>> You need to unindent the raw_input like so:
>>>>
>>>>
>>>> print "Game Over"
>>>> raw_input("\n\nPress Enter Key to Exit")
>>>>
>>>> In python you indent code blocks (like for loops, if statements,
>>>> function blocks, etc.).  You can't just indent from one line to the next in
>>>> sequential code or you will be told its a syntax error
>>>>
>>>>
>>>>
>>>> --
>>>> Joel Goldstick
>>>> http://joelgoldstick.com
>>>>
>>>
>>>
>>>
>>> --
>>> Nicholas J. Piotrowski
>>
>>
>>
>>
>> --
>> Joel Goldstick
>> http://joelgoldstick.com
>>
>
>
>
> --
> Nicholas J. Piotrowski
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130215/01b5fd51/attachment-0001.html>

From joel.goldstick at gmail.com  Fri Feb 15 23:31:54 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Fri, 15 Feb 2013 17:31:54 -0500
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
Message-ID: <CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>

On Fri, Feb 15, 2013 at 5:29 PM, Joel Goldstick <joel.goldstick at gmail.com>wrote:

> Are you using python 2 or python 3?
>
>
> On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski <
> spiceninja4u at gmail.com> wrote:
>
>> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New
>> Window" and type in the code:
>> print "Game Over"
>> raw_input("\n\nPress Enter Key to exit")
>> and save the file on my desktop.
>> I double-click it and it opens a black window with gray text for a split
>> second and if you look quickly enough then you can see "Invalid Sytnax".
>> If I do the same code in the Interactive Window then it highlights
>> "raw_input" and says "Invalid Syntax"
>>
>> Are you using python 2 or python 3?
>

Sorry, you said above python 3.  In python 3 raw_input was changed to
input.  so change that and it will work for you.
There are some differences between 2 and 3 that you will need to look out
for.  Go to the python.org site to learn about them.  Your book was written
for python 2 it seems


>
>> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <joel.goldstick at gmail.com
>> > wrote:
>>
>>>
>>>
>>>
>>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
>>> spiceninja4u at gmail.com> wrote:
>>>
>>>> It Didn't work.
>>>
>>>
>>> First of all, reply to all.  You are sending messages to me only, not to
>>> the group.  Other's may be able to help you better than I can.
>>>
>>> Second.  "It didn't work" is not a useful answer.
>>>
>>> So you have a file with two lines in it.  The first has a print
>>> statement.  The second has a raw_input statement.  When you run it, what
>>> happens exactly? Do you get a traceback message telling you what the error
>>> is, and on what line?
>>>
>>>
>>>
>>>>
>>>>
>>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
>>>> joel.goldstick at gmail.com> wrote:
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>>>>> spiceninja4u at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>
>>>>>>>> I am very new to Python, I am using the e-book "Python Programming
>>>>>>>> for the Absolute Beginner" and am starting with a simple "Game Over"
>>>>>>>> Program.  This is the code:which is extremely simple!
>>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>>>>
>>>>>>>
>>>>>>> welcome Nicholas
>>>>>>>
>>>>>>>
>>>>>>> One important thing about python is indentation is important.  You
>>>>>>> have presented your code in a way that can't be.  Can you actually copy
>>>>>>> your program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> That's it. It is supposed to bring up a window that says "Game
>>>>>>>> Over" and at the bottom say "Press enter Key to exit" and when you press
>>>>>>>> the enter key it is supposed to exit(big suprise).
>>>>>>>> But all it does is highlight "raw_input" and says "invalid syntax"
>>>>>>>> Now, if I just put "print "Game Over"" then it says Game Over UNDERNEATH
>>>>>>>> the code I just printed!
>>>>>>>> now I am following the book to the *pixel* and that is not what is
>>>>>>>> supposed to happen!
>>>>>>>> Please email me back as soon as you get this...(if you are not to
>>>>>>>> busy).
>>>>>>>>
>>>>>>>> Thanks,Nicholas
>>>>>>>>
>>>>>>>> --
>>>>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Joel Goldstick
>>>>>>> http://joelgoldstick.com
>>>>>>>
>>>>>>
>>>>>>
>>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>>>>> Here is the code in exact form
>>>>>> print "Game Over"
>>>>>>      raw_input("\n\nPress Enter Key to Exit")
>>>>>> Thanks,
>>>>>> Nicholas
>>>>>
>>>>>
>>>>> You need to unindent the raw_input like so:
>>>>>
>>>>>
>>>>> print "Game Over"
>>>>> raw_input("\n\nPress Enter Key to Exit")
>>>>>
>>>>> In python you indent code blocks (like for loops, if statements,
>>>>> function blocks, etc.).  You can't just indent from one line to the next in
>>>>> sequential code or you will be told its a syntax error
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Joel Goldstick
>>>>> http://joelgoldstick.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Nicholas J. Piotrowski
>>>
>>>
>>>
>>>
>>> --
>>> Joel Goldstick
>>> http://joelgoldstick.com
>>>
>>
>>
>>
>> --
>> Nicholas J. Piotrowski
>>
>
>
>
> --
> Joel Goldstick
> http://joelgoldstick.com
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130215/dc98ff8f/attachment.html>

From joel.goldstick at gmail.com  Fri Feb 15 23:44:11 2013
From: joel.goldstick at gmail.com (Joel Goldstick)
Date: Fri, 15 Feb 2013 17:44:11 -0500
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAJshyRmbJA+marZ13EHHdR9FQ43qHGGGfHF49w8PECOsNMYJBQ@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
	<CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
	<CAJshyRmbJA+marZ13EHHdR9FQ43qHGGGfHF49w8PECOsNMYJBQ@mail.gmail.com>
Message-ID: <CAPM-O+x0444bNA_CXKwLGH3_LKOEJ9qKSRDdNbERbcnpJC9-mQ@mail.gmail.com>

so copy the code and the error message here


On Fri, Feb 15, 2013 at 5:42 PM, Deborah Piotrowski
<spiceninja4u at gmail.com>wrote:

> I did what you said, nothing changed.
> same errors, same syntax message.
> I suggest you run it on your IDLE to see if it works.
>
>
> On Fri, Feb 15, 2013 at 3:31 PM, Joel Goldstick <joel.goldstick at gmail.com>wrote:
>
>>
>>
>>
>> On Fri, Feb 15, 2013 at 5:29 PM, Joel Goldstick <joel.goldstick at gmail.com
>> > wrote:
>>
>>> Are you using python 2 or python 3?
>>>
>>>
>>> On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski <
>>> spiceninja4u at gmail.com> wrote:
>>>
>>>> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New
>>>> Window" and type in the code:
>>>> print "Game Over"
>>>> raw_input("\n\nPress Enter Key to exit")
>>>> and save the file on my desktop.
>>>> I double-click it and it opens a black window with gray text for a
>>>> split second and if you look quickly enough then you can see "Invalid
>>>> Sytnax".
>>>> If I do the same code in the Interactive Window then it highlights
>>>> "raw_input" and says "Invalid Syntax"
>>>>
>>>> Are you using python 2 or python 3?
>>>
>>
>> Sorry, you said above python 3.  In python 3 raw_input was changed to
>> input.  so change that and it will work for you.
>> There are some differences between 2 and 3 that you will need to look out
>> for.  Go to the python.org site to learn about them.  Your book was
>> written for python 2 it seems
>>
>>
>>>
>>>> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <
>>>> joel.goldstick at gmail.com> wrote:
>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
>>>>> spiceninja4u at gmail.com> wrote:
>>>>>
>>>>>> It Didn't work.
>>>>>
>>>>>
>>>>> First of all, reply to all.  You are sending messages to me only, not
>>>>> to the group.  Other's may be able to help you better than I can.
>>>>>
>>>>> Second.  "It didn't work" is not a useful answer.
>>>>>
>>>>> So you have a file with two lines in it.  The first has a print
>>>>> statement.  The second has a raw_input statement.  When you run it, what
>>>>> happens exactly? Do you get a traceback message telling you what the error
>>>>> is, and on what line?
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I am very new to Python, I am using the e-book "Python
>>>>>>>>>> Programming for the Absolute Beginner" and am starting with a simple "Game
>>>>>>>>>> Over" Program.  This is the code:which is extremely simple!
>>>>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> welcome Nicholas
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> One important thing about python is indentation is important.  You
>>>>>>>>> have presented your code in a way that can't be.  Can you actually copy
>>>>>>>>> your program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> That's it. It is supposed to bring up a window that says "Game
>>>>>>>>>> Over" and at the bottom say "Press enter Key to exit" and when you press
>>>>>>>>>> the enter key it is supposed to exit(big suprise).
>>>>>>>>>> But all it does is highlight "raw_input" and says "invalid
>>>>>>>>>> syntax" Now, if I just put "print "Game Over"" then it says Game Over
>>>>>>>>>> UNDERNEATH the code I just printed!
>>>>>>>>>> now I am following the book to the *pixel* and that is not what
>>>>>>>>>> is supposed to happen!
>>>>>>>>>> Please email me back as soon as you get this...(if you are not to
>>>>>>>>>> busy).
>>>>>>>>>>
>>>>>>>>>> Thanks,Nicholas
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Joel Goldstick
>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>>>>>>> Here is the code in exact form
>>>>>>>> print "Game Over"
>>>>>>>>      raw_input("\n\nPress Enter Key to Exit")
>>>>>>>> Thanks,
>>>>>>>> Nicholas
>>>>>>>
>>>>>>>
>>>>>>> You need to unindent the raw_input like so:
>>>>>>>
>>>>>>>
>>>>>>> print "Game Over"
>>>>>>> raw_input("\n\nPress Enter Key to Exit")
>>>>>>>
>>>>>>> In python you indent code blocks (like for loops, if statements,
>>>>>>> function blocks, etc.).  You can't just indent from one line to the next in
>>>>>>> sequential code or you will be told its a syntax error
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Joel Goldstick
>>>>>>> http://joelgoldstick.com
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Nicholas J. Piotrowski
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Joel Goldstick
>>>>> http://joelgoldstick.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Nicholas J. Piotrowski
>>>>
>>>
>>>
>>>
>>> --
>>> Joel Goldstick
>>> http://joelgoldstick.com
>>>
>>
>>
>>
>> --
>> Joel Goldstick
>> http://joelgoldstick.com
>>
>
>
>
> --
> Nicholas J. Piotrowski
>



-- 
Joel Goldstick
http://joelgoldstick.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130215/13a5e428/attachment-0001.html>

From joskerc at gmail.com  Sat Feb 16 00:10:21 2013
From: joskerc at gmail.com (Jos Kerc)
Date: Sat, 16 Feb 2013 00:10:21 +0100
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAPM-O+x0444bNA_CXKwLGH3_LKOEJ9qKSRDdNbERbcnpJC9-mQ@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
	<CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
	<CAJshyRmbJA+marZ13EHHdR9FQ43qHGGGfHF49w8PECOsNMYJBQ@mail.gmail.com>
	<CAPM-O+x0444bNA_CXKwLGH3_LKOEJ9qKSRDdNbERbcnpJC9-mQ@mail.gmail.com>
Message-ID: <CAKs9EssmW2dx=H76Xn_ZTL-Z_xDvZ1s-ma3VJ3V4W9wL4v=CYA@mail.gmail.com>

No, not same. At lea


On Fri, Feb 15, 2013 at 11:44 PM, Joel Goldstick
<joel.goldstick at gmail.com>wrote:

> so copy the code and the error message here
>
>
> On Fri, Feb 15, 2013 at 5:42 PM, Deborah Piotrowski <
> spiceninja4u at gmail.com> wrote:
>
>> I did what you said, nothing changed.
>> same errors, same syntax message.
>> I suggest you run it on your IDLE to see if it works.
>>
>>
>> On Fri, Feb 15, 2013 at 3:31 PM, Joel Goldstick <joel.goldstick at gmail.com
>> > wrote:
>>
>>>
>>>
>>>
>>> On Fri, Feb 15, 2013 at 5:29 PM, Joel Goldstick <
>>> joel.goldstick at gmail.com> wrote:
>>>
>>>> Are you using python 2 or python 3?
>>>>
>>>>
>>>> On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski <
>>>> spiceninja4u at gmail.com> wrote:
>>>>
>>>>> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New
>>>>> Window" and type in the code:
>>>>> print "Game Over"
>>>>> raw_input("\n\nPress Enter Key to exit")
>>>>> and save the file on my desktop.
>>>>> I double-click it and it opens a black window with gray text for a
>>>>> split second and if you look quickly enough then you can see "Invalid
>>>>> Sytnax".
>>>>> If I do the same code in the Interactive Window then it highlights
>>>>> "raw_input" and says "Invalid Syntax"
>>>>>
>>>>> Are you using python 2 or python 3?
>>>>
>>>
>>> Sorry, you said above python 3.  In python 3 raw_input was changed to
>>> input.  so change that and it will work for you.
>>> There are some differences between 2 and 3 that you will need to look
>>> out for.  Go to the python.org site to learn about them.  Your book was
>>> written for python 2 it seems
>>>
>>>
>>>>
>>>>> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <
>>>>> joel.goldstick at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>
>>>>>>> It Didn't work.
>>>>>>
>>>>>>
>>>>>> First of all, reply to all.  You are sending messages to me only, not
>>>>>> to the group.  Other's may be able to help you better than I can.
>>>>>>
>>>>>> Second.  "It didn't work" is not a useful answer.
>>>>>>
>>>>>> So you have a file with two lines in it.  The first has a print
>>>>>> statement.  The second has a raw_input statement.  When you run it, what
>>>>>> happens exactly? Do you get a traceback message telling you what the error
>>>>>> is, and on what line?
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I am very new to Python, I am using the e-book "Python
>>>>>>>>>>> Programming for the Absolute Beginner" and am starting with a simple "Game
>>>>>>>>>>> Over" Program.  This is the code:which is extremely simple!
>>>>>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> welcome Nicholas
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> One important thing about python is indentation is important.
>>>>>>>>>> You have presented your code in a way that can't be.  Can you actually copy
>>>>>>>>>> your program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> That's it. It is supposed to bring up a window that says "Game
>>>>>>>>>>> Over" and at the bottom say "Press enter Key to exit" and when you press
>>>>>>>>>>> the enter key it is supposed to exit(big suprise).
>>>>>>>>>>> But all it does is highlight "raw_input" and says "invalid
>>>>>>>>>>> syntax" Now, if I just put "print "Game Over"" then it says Game Over
>>>>>>>>>>> UNDERNEATH the code I just printed!
>>>>>>>>>>> now I am following the book to the *pixel* and that is not what
>>>>>>>>>>> is supposed to happen!
>>>>>>>>>>> Please email me back as soon as you get this...(if you are not
>>>>>>>>>>> to busy).
>>>>>>>>>>>
>>>>>>>>>>> Thanks,Nicholas
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Joel Goldstick
>>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>>>>>>>> Here is the code in exact form
>>>>>>>>> print "Game Over"
>>>>>>>>>      raw_input("\n\nPress Enter Key to Exit")
>>>>>>>>> Thanks,
>>>>>>>>> Nicholas
>>>>>>>>
>>>>>>>>
>>>>>>>> You need to unindent the raw_input like so:
>>>>>>>>
>>>>>>>>
>>>>>>>> print "Game Over"
>>>>>>>> raw_input("\n\nPress Enter Key to Exit")
>>>>>>>>
>>>>>>>> In python you indent code blocks (like for loops, if statements,
>>>>>>>> function blocks, etc.).  You can't just indent from one line to the next in
>>>>>>>> sequential code or you will be told its a syntax error
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Joel Goldstick
>>>>>>>> http://joelgoldstick.com
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Nicholas J. Piotrowski
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Joel Goldstick
>>>>>> http://joelgoldstick.com
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Nicholas J. Piotrowski
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Joel Goldstick
>>>> http://joelgoldstick.com
>>>>
>>>
>>>
>>>
>>> --
>>> Joel Goldstick
>>> http://joelgoldstick.com
>>>
>>
>>
>>
>> --
>> Nicholas J. Piotrowski
>>
>
>
>
> --
> Joel Goldstick
> http://joelgoldstick.com
>
> _______________________________________________
> 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/20130216/8cd83629/attachment.html>

From joskerc at gmail.com  Sat Feb 16 00:14:15 2013
From: joskerc at gmail.com (Jos Kerc)
Date: Sat, 16 Feb 2013 00:14:15 +0100
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAKs9EssmW2dx=H76Xn_ZTL-Z_xDvZ1s-ma3VJ3V4W9wL4v=CYA@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
	<CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
	<CAJshyRmbJA+marZ13EHHdR9FQ43qHGGGfHF49w8PECOsNMYJBQ@mail.gmail.com>
	<CAPM-O+x0444bNA_CXKwLGH3_LKOEJ9qKSRDdNbERbcnpJC9-mQ@mail.gmail.com>
	<CAKs9EssmW2dx=H76Xn_ZTL-Z_xDvZ1s-ma3VJ3V4W9wL4v=CYA@mail.gmail.com>
Message-ID: <CAKs9Esvxuu1n7HXZu7xtswxTDXLdZzOFjocbOL_fziZ83yNFkw@mail.gmail.com>

Sorry, sent before finishing...

If you changed raw_input, as asked.
Now, it complains about print 'Game Over'
Should become print('Game Over')


On Sat, Feb 16, 2013 at 12:10 AM, Jos Kerc <joskerc at gmail.com> wrote:

> No, not same. At lea
>
>
> On Fri, Feb 15, 2013 at 11:44 PM, Joel Goldstick <joel.goldstick at gmail.com
> > wrote:
>
>> so copy the code and the error message here
>>
>>
>> On Fri, Feb 15, 2013 at 5:42 PM, Deborah Piotrowski <
>> spiceninja4u at gmail.com> wrote:
>>
>>> I did what you said, nothing changed.
>>> same errors, same syntax message.
>>> I suggest you run it on your IDLE to see if it works.
>>>
>>>
>>> On Fri, Feb 15, 2013 at 3:31 PM, Joel Goldstick <
>>> joel.goldstick at gmail.com> wrote:
>>>
>>>>
>>>>
>>>>
>>>> On Fri, Feb 15, 2013 at 5:29 PM, Joel Goldstick <
>>>> joel.goldstick at gmail.com> wrote:
>>>>
>>>>> Are you using python 2 or python 3?
>>>>>
>>>>>
>>>>> On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski <
>>>>> spiceninja4u at gmail.com> wrote:
>>>>>
>>>>>> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New
>>>>>> Window" and type in the code:
>>>>>> print "Game Over"
>>>>>> raw_input("\n\nPress Enter Key to exit")
>>>>>> and save the file on my desktop.
>>>>>> I double-click it and it opens a black window with gray text for a
>>>>>> split second and if you look quickly enough then you can see "Invalid
>>>>>> Sytnax".
>>>>>> If I do the same code in the Interactive Window then it highlights
>>>>>> "raw_input" and says "Invalid Syntax"
>>>>>>
>>>>>> Are you using python 2 or python 3?
>>>>>
>>>>
>>>> Sorry, you said above python 3.  In python 3 raw_input was changed to
>>>> input.  so change that and it will work for you.
>>>> There are some differences between 2 and 3 that you will need to look
>>>> out for.  Go to the python.org site to learn about them.  Your book
>>>> was written for python 2 it seems
>>>>
>>>>
>>>>>
>>>>>> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <
>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>
>>>>>>>> It Didn't work.
>>>>>>>
>>>>>>>
>>>>>>> First of all, reply to all.  You are sending messages to me only,
>>>>>>> not to the group.  Other's may be able to help you better than I can.
>>>>>>>
>>>>>>> Second.  "It didn't work" is not a useful answer.
>>>>>>>
>>>>>>> So you have a file with two lines in it.  The first has a print
>>>>>>> statement.  The second has a raw_input statement.  When you run it, what
>>>>>>> happens exactly? Do you get a traceback message telling you what the error
>>>>>>> is, and on what line?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> I am very new to Python, I am using the e-book "Python
>>>>>>>>>>>> Programming for the Absolute Beginner" and am starting with a simple "Game
>>>>>>>>>>>> Over" Program.  This is the code:which is extremely simple!
>>>>>>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> welcome Nicholas
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> One important thing about python is indentation is important.
>>>>>>>>>>> You have presented your code in a way that can't be.  Can you actually copy
>>>>>>>>>>> your program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> That's it. It is supposed to bring up a window that says "Game
>>>>>>>>>>>> Over" and at the bottom say "Press enter Key to exit" and when you press
>>>>>>>>>>>> the enter key it is supposed to exit(big suprise).
>>>>>>>>>>>> But all it does is highlight "raw_input" and says "invalid
>>>>>>>>>>>> syntax" Now, if I just put "print "Game Over"" then it says Game Over
>>>>>>>>>>>> UNDERNEATH the code I just printed!
>>>>>>>>>>>> now I am following the book to the *pixel* and that is not
>>>>>>>>>>>> what is supposed to happen!
>>>>>>>>>>>> Please email me back as soon as you get this...(if you are not
>>>>>>>>>>>> to busy).
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,Nicholas
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Joel Goldstick
>>>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>>>>>>>>> Here is the code in exact form
>>>>>>>>>> print "Game Over"
>>>>>>>>>>      raw_input("\n\nPress Enter Key to Exit")
>>>>>>>>>> Thanks,
>>>>>>>>>> Nicholas
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> You need to unindent the raw_input like so:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> print "Game Over"
>>>>>>>>> raw_input("\n\nPress Enter Key to Exit")
>>>>>>>>>
>>>>>>>>> In python you indent code blocks (like for loops, if statements,
>>>>>>>>> function blocks, etc.).  You can't just indent from one line to the next in
>>>>>>>>> sequential code or you will be told its a syntax error
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Joel Goldstick
>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicholas J. Piotrowski
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Joel Goldstick
>>>>>>> http://joelgoldstick.com
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Nicholas J. Piotrowski
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Joel Goldstick
>>>>> http://joelgoldstick.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Joel Goldstick
>>>> http://joelgoldstick.com
>>>>
>>>
>>>
>>>
>>> --
>>> Nicholas J. Piotrowski
>>>
>>
>>
>>
>> --
>> Joel Goldstick
>> http://joelgoldstick.com
>>
>> _______________________________________________
>> 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/20130216/8f4a76f6/attachment-0001.html>

From breamoreboy at yahoo.co.uk  Sat Feb 16 00:28:23 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Fri, 15 Feb 2013 23:28:23 +0000
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
	<CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
Message-ID: <kfmg8g$7d4$1@ger.gmane.org>

On 15/02/2013 22:31, Joel Goldstick wrote:
>
> Sorry, you said above python 3.  In python 3 raw_input was changed to
> input.  so change that and it will work for you.
> There are some differences between 2 and 3 that you will need to look
> out for.  Go to the python.org <http://python.org> site to learn about
> them.  Your book was written for python 2 it seems
>

In Python 3 the syntax error is caused by print not having brackets, not 
the as it happens the incorrect call to raw_input.

-- 
Cheers.

Mark Lawrence


From joskerc at gmail.com  Sat Feb 16 02:03:22 2013
From: joskerc at gmail.com (Jos Kerc)
Date: Sat, 16 Feb 2013 02:03:22 +0100
Subject: [Tutor] New User-Need-Help
In-Reply-To: <CAJshyRmGC=ahdx7rK5q983cuHZxBczq9eV7vmc2GFr5Bkg2tiQ@mail.gmail.com>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
	<CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
	<CAJshyRmbJA+marZ13EHHdR9FQ43qHGGGfHF49w8PECOsNMYJBQ@mail.gmail.com>
	<CAPM-O+x0444bNA_CXKwLGH3_LKOEJ9qKSRDdNbERbcnpJC9-mQ@mail.gmail.com>
	<CAKs9EssmW2dx=H76Xn_ZTL-Z_xDvZ1s-ma3VJ3V4W9wL4v=CYA@mail.gmail.com>
	<CAKs9Esvxuu1n7HXZu7xtswxTDXLdZzOFjocbOL_fziZ83yNFkw@mail.gmail.com>
	<CAJshyRmGC=ahdx7rK5q983cuHZxBczq9eV7vmc2GFr5Bkg2tiQ@mail.gmail.com>
Message-ID: <CAKs9EsuoPF1tK3mq5a-RP0a+9951v6Q=D-PnXu0xOMtXQ2yx7g@mail.gmail.com>

On Sat, Feb 16, 2013 at 12:20 AM, Deborah Piotrowski <spiceninja4u at gmail.com
> wrote:

> It works, but it doesn't open a window. It just says that stuff under the
> code. How do you open a window?





Depends...
How do you run the script? From Idle, command prompt?

>
>
> On Fri, Feb 15, 2013 at 4:14 PM, Jos Kerc <joskerc at gmail.com> wrote:
>
>> Sorry, sent before finishing...
>>
>> If you changed raw_input, as asked.
>> Now, it complains about print 'Game Over'
>> Should become print('Game Over')
>>
>>
>> On Sat, Feb 16, 2013 at 12:10 AM, Jos Kerc <joskerc at gmail.com> wrote:
>>
>>> No, not same. At lea
>>>
>>>
>>> On Fri, Feb 15, 2013 at 11:44 PM, Joel Goldstick <
>>> joel.goldstick at gmail.com> wrote:
>>>
>>>> so copy the code and the error message here
>>>>
>>>>
>>>> On Fri, Feb 15, 2013 at 5:42 PM, Deborah Piotrowski <
>>>> spiceninja4u at gmail.com> wrote:
>>>>
>>>>> I did what you said, nothing changed.
>>>>> same errors, same syntax message.
>>>>> I suggest you run it on your IDLE to see if it works.
>>>>>
>>>>>
>>>>> On Fri, Feb 15, 2013 at 3:31 PM, Joel Goldstick <
>>>>> joel.goldstick at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Feb 15, 2013 at 5:29 PM, Joel Goldstick <
>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>
>>>>>>> Are you using python 2 or python 3?
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski <
>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>
>>>>>>>> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New
>>>>>>>> Window" and type in the code:
>>>>>>>> print "Game Over"
>>>>>>>> raw_input("\n\nPress Enter Key to exit")
>>>>>>>> and save the file on my desktop.
>>>>>>>> I double-click it and it opens a black window with gray text for a
>>>>>>>> split second and if you look quickly enough then you can see "Invalid
>>>>>>>> Sytnax".
>>>>>>>> If I do the same code in the Interactive Window then it highlights
>>>>>>>> "raw_input" and says "Invalid Syntax"
>>>>>>>>
>>>>>>>> Are you using python 2 or python 3?
>>>>>>>
>>>>>>
>>>>>> Sorry, you said above python 3.  In python 3 raw_input was changed to
>>>>>> input.  so change that and it will work for you.
>>>>>> There are some differences between 2 and 3 that you will need to look
>>>>>> out for.  Go to the python.org site to learn about them.  Your book
>>>>>> was written for python 2 it seems
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <
>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> It Didn't work.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> First of all, reply to all.  You are sending messages to me only,
>>>>>>>>> not to the group.  Other's may be able to help you better than I can.
>>>>>>>>>
>>>>>>>>> Second.  "It didn't work" is not a useful answer.
>>>>>>>>>
>>>>>>>>> So you have a file with two lines in it.  The first has a print
>>>>>>>>> statement.  The second has a raw_input statement.  When you run it, what
>>>>>>>>> happens exactly? Do you get a traceback message telling you what the error
>>>>>>>>> is, and on what line?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
>>>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
>>>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
>>>>>>>>>>>> joel.goldstick at gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
>>>>>>>>>>>>> spiceninja4u at gmail.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am very new to Python, I am using the e-book "Python
>>>>>>>>>>>>>> Programming for the Absolute Beginner" and am starting with a simple "Game
>>>>>>>>>>>>>> Over" Program.  This is the code:which is extremely simple!
>>>>>>>>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> welcome Nicholas
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> One important thing about python is indentation is important.
>>>>>>>>>>>>> You have presented your code in a way that can't be.  Can you actually copy
>>>>>>>>>>>>> your program and paste it into an email message.  Also, Windows, Linux, Mac?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> That's it. It is supposed to bring up a window that says
>>>>>>>>>>>>>> "Game Over" and at the bottom say "Press enter Key to exit" and when you
>>>>>>>>>>>>>> press the enter key it is supposed to exit(big suprise).
>>>>>>>>>>>>>> But all it does is highlight "raw_input" and says "invalid
>>>>>>>>>>>>>> syntax" Now, if I just put "print "Game Over"" then it says Game Over
>>>>>>>>>>>>>> UNDERNEATH the code I just printed!
>>>>>>>>>>>>>> now I am following the book to the *pixel* and that is not
>>>>>>>>>>>>>> what is supposed to happen!
>>>>>>>>>>>>>> Please email me back as soon as you get this...(if you are
>>>>>>>>>>>>>> not to busy).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks,Nicholas
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> http://mail.python.org/mailman/listinfo/python-list
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Joel Goldstick
>>>>>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
>>>>>>>>>>>> Here is the code in exact form
>>>>>>>>>>>> print "Game Over"
>>>>>>>>>>>>      raw_input("\n\nPress Enter Key to Exit")
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Nicholas
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> You need to unindent the raw_input like so:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> print "Game Over"
>>>>>>>>>>> raw_input("\n\nPress Enter Key to Exit")
>>>>>>>>>>>
>>>>>>>>>>> In python you indent code blocks (like for loops, if statements,
>>>>>>>>>>> function blocks, etc.).  You can't just indent from one line to the next in
>>>>>>>>>>> sequential code or you will be told its a syntax error
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Joel Goldstick
>>>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Nicholas J. Piotrowski
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Joel Goldstick
>>>>>>>>> http://joelgoldstick.com
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Nicholas J. Piotrowski
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Joel Goldstick
>>>>>>> http://joelgoldstick.com
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Joel Goldstick
>>>>>> http://joelgoldstick.com
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Nicholas J. Piotrowski
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Joel Goldstick
>>>> http://joelgoldstick.com
>>>>
>>>> _______________________________________________
>>>> Tutor maillist  -  Tutor at python.org
>>>> To unsubscribe or change subscription options:
>>>> http://mail.python.org/mailman/listinfo/tutor
>>>>
>>>>
>>>
>>
>
>
> --
> Nicholas J. Piotrowski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130216/c5f049b8/attachment-0001.html>

From davea at davea.name  Sat Feb 16 03:29:34 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 15 Feb 2013 21:29:34 -0500
Subject: [Tutor] New User-Need-Help
In-Reply-To: <kfmg8g$7d4$1@ger.gmane.org>
References: <CAJshyR=+eJCJ9XOSVGwrStZ12TNJGPHgoJm4g5W2KXMVfHye6A@mail.gmail.com>
	<CAPM-O+x45WHyR+8FfeEAstQE+DzKLJn1r1QZRmghyFeRbTpWyw@mail.gmail.com>
	<CAJshyRn7wCQTyxY-itxwaTX_1AhcmG0c5CPMgnSG9h+G+p6xiQ@mail.gmail.com>
	<CAPM-O+znc22f4EFV1YVCunzV_9LGJ5jLoeLW4qwdMRG0gjDFOg@mail.gmail.com>
	<CAJshyR=FErSE4DaE=5JLDrWzfzVXk-SP4JeF+w53hSaOM9kUrg@mail.gmail.com>
	<CAPM-O+xHAGPYEaTNZwxANMVTtDbAF8frRXmYLDoCxV9i_thbHg@mail.gmail.com>
	<CAJshyRmq954L3gc-wtWt7rXqgwjod+qGNWWvSOQUuU3noQfPtg@mail.gmail.com>
	<CAPM-O+wzoTiQ_74J+h9U8TtY8LOCn1sVV5-gVttX3U7LA452pA@mail.gmail.com>
	<CAPM-O+zq2kimQsL3ZGE0uP3tqXjT1Aw3W_yZQAZboH3TWUzpuQ@mail.gmail.com>
	<kfmg8g$7d4$1@ger.gmane.org>
Message-ID: <511EEF0E.60203@davea.name>

On 02/15/2013 06:28 PM, Mark Lawrence wrote:
> On 15/02/2013 22:31, Joel Goldstick wrote:
>>
>> Sorry, you said above python 3.  In python 3 raw_input was changed to
>> input.  so change that and it will work for you.
>> There are some differences between 2 and 3 that you will need to look
>> out for.  Go to the python.org <http://python.org> site to learn about
>> them.  Your book was written for python 2 it seems
>>
>
> In Python 3 the syntax error is caused by print not having brackets, not
> the as it happens the incorrect call to raw_input.
>

Can we please kill this thread?  Somehow it got transported from 
python-list to tutor, but all the OP posts are on python-list.  That 
combined with top-posting and the OP using a different name in their 
signature than in the email address makes the whole thing very confusing.

Besides, three hours ago, the OP (Nicholas/Deborah) posted a "Solved" 
message:

 > WAIT!! It works now, I just needed to save it in script.
 > Thank you guys so much!!
 > My best regards, Nicholas


-- 
DaveA

From waveclaira at gmail.com  Sat Feb 16 04:09:44 2013
From: waveclaira at gmail.com (Claira)
Date: Fri, 15 Feb 2013 21:09:44 -0600
Subject: [Tutor] Tutor Digest, Vol 108, Issue 58
In-Reply-To: <mailman.10259.1360976610.2938.tutor@python.org>
References: <mailman.10259.1360976610.2938.tutor@python.org>
Message-ID: <CABPV-FRmfRsLGJENxyCOf8fE7sj177ExQARYOagbohGaqVW1rw@mail.gmail.com>

Hi, I signed up a while ago, but I didn't really understand anything. I
have a basic question that maybe someone can help with. I'll like to
integrate yelp data -- http://www.programmableweb.com/api/yelp -- onto
google maps -- http://www.programmableweb.com/api/google-maps -- like how
http://www.trulia.com/real_estate/New_York-New_York has it under
"Amenities". But I want it on maps.google.com because I have no idea how to
put the map on a separate webpage.

I'll like to know if I need python for this :)




On Fri, Feb 15, 2013 at 7:03 PM, <tutor-request at python.org> wrote:

> Send Tutor mailing list submissions to
>         tutor at python.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         http://mail.python.org/mailman/listinfo/tutor
> or, via email, send a message with subject or body 'help' to
>         tutor-request at python.org
>
> You can reach the person managing the list at
>         tutor-owner at python.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Tutor digest..."
>
>
> Today's Topics:
>
>    1. Re: New User-Need-Help (Mark Lawrence)
>    2. Re: New User-Need-Help (Jos Kerc)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Fri, 15 Feb 2013 23:28:23 +0000
> From: Mark Lawrence <breamoreboy at yahoo.co.uk>
> To: tutor at python.org
> Subject: Re: [Tutor] New User-Need-Help
> Message-ID: <kfmg8g$7d4$1 at ger.gmane.org>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> On 15/02/2013 22:31, Joel Goldstick wrote:
> >
> > Sorry, you said above python 3.  In python 3 raw_input was changed to
> > input.  so change that and it will work for you.
> > There are some differences between 2 and 3 that you will need to look
> > out for.  Go to the python.org <http://python.org> site to learn about
> > them.  Your book was written for python 2 it seems
> >
>
> In Python 3 the syntax error is caused by print not having brackets, not
> the as it happens the incorrect call to raw_input.
>
> --
> Cheers.
>
> Mark Lawrence
>
>
>
> ------------------------------
>
> Message: 2
> Date: Sat, 16 Feb 2013 02:03:22 +0100
> From: Jos Kerc <joskerc at gmail.com>
> To: Deborah Piotrowski <spiceninja4u at gmail.com>
> Cc: "tutor at python.org" <tutor at python.org>
> Subject: Re: [Tutor] New User-Need-Help
> Message-ID:
>         <CAKs9EsuoPF1tK3mq5a-RP0a+9951v6Q=
> D-PnXu0xOMtXQ2yx7g at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> On Sat, Feb 16, 2013 at 12:20 AM, Deborah Piotrowski <
> spiceninja4u at gmail.com
> > wrote:
>
> > It works, but it doesn't open a window. It just says that stuff under the
> > code. How do you open a window?
>
>
>
>
>
> Depends...
> How do you run the script? From Idle, command prompt?
>
> >
> >
> > On Fri, Feb 15, 2013 at 4:14 PM, Jos Kerc <joskerc at gmail.com> wrote:
> >
> >> Sorry, sent before finishing...
> >>
> >> If you changed raw_input, as asked.
> >> Now, it complains about print 'Game Over'
> >> Should become print('Game Over')
> >>
> >>
> >> On Sat, Feb 16, 2013 at 12:10 AM, Jos Kerc <joskerc at gmail.com> wrote:
> >>
> >>> No, not same. At lea
> >>>
> >>>
> >>> On Fri, Feb 15, 2013 at 11:44 PM, Joel Goldstick <
> >>> joel.goldstick at gmail.com> wrote:
> >>>
> >>>> so copy the code and the error message here
> >>>>
> >>>>
> >>>> On Fri, Feb 15, 2013 at 5:42 PM, Deborah Piotrowski <
> >>>> spiceninja4u at gmail.com> wrote:
> >>>>
> >>>>> I did what you said, nothing changed.
> >>>>> same errors, same syntax message.
> >>>>> I suggest you run it on your IDLE to see if it works.
> >>>>>
> >>>>>
> >>>>> On Fri, Feb 15, 2013 at 3:31 PM, Joel Goldstick <
> >>>>> joel.goldstick at gmail.com> wrote:
> >>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On Fri, Feb 15, 2013 at 5:29 PM, Joel Goldstick <
> >>>>>> joel.goldstick at gmail.com> wrote:
> >>>>>>
> >>>>>>> Are you using python 2 or python 3?
> >>>>>>>
> >>>>>>>
> >>>>>>> On Fri, Feb 15, 2013 at 5:28 PM, Deborah Piotrowski <
> >>>>>>> spiceninja4u at gmail.com> wrote:
> >>>>>>>
> >>>>>>>> Ok, so I made a shortcut to IDLE(GUI) and I open it up. click "New
> >>>>>>>> Window" and type in the code:
> >>>>>>>> print "Game Over"
> >>>>>>>> raw_input("\n\nPress Enter Key to exit")
> >>>>>>>> and save the file on my desktop.
> >>>>>>>> I double-click it and it opens a black window with gray text for a
> >>>>>>>> split second and if you look quickly enough then you can see
> "Invalid
> >>>>>>>> Sytnax".
> >>>>>>>> If I do the same code in the Interactive Window then it highlights
> >>>>>>>> "raw_input" and says "Invalid Syntax"
> >>>>>>>>
> >>>>>>>> Are you using python 2 or python 3?
> >>>>>>>
> >>>>>>
> >>>>>> Sorry, you said above python 3.  In python 3 raw_input was changed
> to
> >>>>>> input.  so change that and it will work for you.
> >>>>>> There are some differences between 2 and 3 that you will need to
> look
> >>>>>> out for.  Go to the python.org site to learn about them.  Your book
> >>>>>> was written for python 2 it seems
> >>>>>>
> >>>>>>
> >>>>>>>
> >>>>>>>> On Fri, Feb 15, 2013 at 3:12 PM, Joel Goldstick <
> >>>>>>>> joel.goldstick at gmail.com> wrote:
> >>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Fri, Feb 15, 2013 at 5:09 PM, Deborah Piotrowski <
> >>>>>>>>> spiceninja4u at gmail.com> wrote:
> >>>>>>>>>
> >>>>>>>>>> It Didn't work.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> First of all, reply to all.  You are sending messages to me only,
> >>>>>>>>> not to the group.  Other's may be able to help you better than I
> can.
> >>>>>>>>>
> >>>>>>>>> Second.  "It didn't work" is not a useful answer.
> >>>>>>>>>
> >>>>>>>>> So you have a file with two lines in it.  The first has a print
> >>>>>>>>> statement.  The second has a raw_input statement.  When you run
> it, what
> >>>>>>>>> happens exactly? Do you get a traceback message telling you what
> the error
> >>>>>>>>> is, and on what line?
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Fri, Feb 15, 2013 at 3:05 PM, Joel Goldstick <
> >>>>>>>>>> joel.goldstick at gmail.com> wrote:
> >>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Fri, Feb 15, 2013 at 5:03 PM, Deborah Piotrowski <
> >>>>>>>>>>> spiceninja4u at gmail.com> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Fri, Feb 15, 2013 at 2:58 PM, Joel Goldstick <
> >>>>>>>>>>>> joel.goldstick at gmail.com> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Fri, Feb 15, 2013 at 4:45 PM, Deborah Piotrowski <
> >>>>>>>>>>>>> spiceninja4u at gmail.com> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I am very new to Python, I am using the e-book "Python
> >>>>>>>>>>>>>> Programming for the Absolute Beginner" and am starting with
> a simple "Game
> >>>>>>>>>>>>>> Over" Program.  This is the code:which is extremely simple!
> >>>>>>>>>>>>>> print"Game Over" raw_input("\n\nPress Enter Key to exit")
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> welcome Nicholas
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> One important thing about python is indentation is important.
> >>>>>>>>>>>>> You have presented your code in a way that can't be.  Can
> you actually copy
> >>>>>>>>>>>>> your program and paste it into an email message.  Also,
> Windows, Linux, Mac?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> That's it. It is supposed to bring up a window that says
> >>>>>>>>>>>>>> "Game Over" and at the bottom say "Press enter Key to exit"
> and when you
> >>>>>>>>>>>>>> press the enter key it is supposed to exit(big suprise).
> >>>>>>>>>>>>>> But all it does is highlight "raw_input" and says "invalid
> >>>>>>>>>>>>>> syntax" Now, if I just put "print "Game Over"" then it says
> Game Over
> >>>>>>>>>>>>>> UNDERNEATH the code I just printed!
> >>>>>>>>>>>>>> now I am following the book to the *pixel* and that is not
> >>>>>>>>>>>>>> what is supposed to happen!
> >>>>>>>>>>>>>> Please email me back as soon as you get this...(if you are
> >>>>>>>>>>>>>> not to busy).
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thanks,Nicholas
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> --
> >>>>>>>>>>>>>> http://mail.python.org/mailman/listinfo/python-list
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>> Joel Goldstick
> >>>>>>>>>>>>> http://joelgoldstick.com
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Sorry, I am using Windows 7 Ultimate 32-bit with Python 3.3
> >>>>>>>>>>>> Here is the code in exact form
> >>>>>>>>>>>> print "Game Over"
> >>>>>>>>>>>>      raw_input("\n\nPress Enter Key to Exit")
> >>>>>>>>>>>> Thanks,
> >>>>>>>>>>>> Nicholas
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> You need to unindent the raw_input like so:
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> print "Game Over"
> >>>>>>>>>>> raw_input("\n\nPress Enter Key to Exit")
> >>>>>>>>>>>
> >>>>>>>>>>> In python you indent code blocks (like for loops, if
> statements,
> >>>>>>>>>>> function blocks, etc.).  You can't just indent from one line
> to the next in
> >>>>>>>>>>> sequential code or you will be told its a syntax error
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>> Joel Goldstick
> >>>>>>>>>>> http://joelgoldstick.com
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> Nicholas J. Piotrowski
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Joel Goldstick
> >>>>>>>>> http://joelgoldstick.com
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Nicholas J. Piotrowski
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Joel Goldstick
> >>>>>>> http://joelgoldstick.com
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Joel Goldstick
> >>>>>> http://joelgoldstick.com
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Nicholas J. Piotrowski
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Joel Goldstick
> >>>> http://joelgoldstick.com
> >>>>
> >>>> _______________________________________________
> >>>> Tutor maillist  -  Tutor at python.org
> >>>> To unsubscribe or change subscription options:
> >>>> http://mail.python.org/mailman/listinfo/tutor
> >>>>
> >>>>
> >>>
> >>
> >
> >
> > --
> > Nicholas J. Piotrowski
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> http://mail.python.org/pipermail/tutor/attachments/20130216/c5f049b8/attachment.html
> >
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
>
> ------------------------------
>
> End of Tutor Digest, Vol 108, Issue 58
> **************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130215/7b6a19de/attachment-0001.html>

From steve at pearwood.info  Sat Feb 16 07:21:52 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 16 Feb 2013 17:21:52 +1100
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CACL+1as09jRMFrUu4-tY2LjCrUTJf4P-hNNzXNeMdQtzvA11Ng@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
	<CACL+1as09jRMFrUu4-tY2LjCrUTJf4P-hNNzXNeMdQtzvA11Ng@mail.gmail.com>
Message-ID: <511F2580.5090707@pearwood.info>

On 15/02/13 16:38, eryksun wrote:
> On Thu, Feb 14, 2013 at 4:33 PM, Prasad, Ramit
> <ramit.prasad at jpmorgan.com>  wrote:
>> My knee jerk response is a try/finally block, but I am sure there
>> are better ways.
>
> The atexit.register decorator hooks sys.exitfunc:
>
> http://docs.python.org/2/library/atexit


I find a try...finally block more readable and obvious than a hidden
atexit function. At least the try...finally block is explicit:


try:
     main()
finally:
     do_stuff()


while atexit can be set anywhere and isn't obvious. It's also somewhat
risky, since you never know when some library you import will silently
replace it with their own hook.

Also, keep in mind that you can't rely on atexit hooks to run. Or the
finally block for that matter. They can fail to run when:


- the Python process is killed from the outside, say using "kill -9"
   under Linux;

- or the entire computer goes down, say after a power failure;

- or the operating system crashes and takes everything else down;

- or something calls os._exit() while your code is running, say some
   external library.


So if you're serious about saving data, you cannot afford to wait until
the program quits before saving the user's work. You should be saving
whenever the user makes some change.



-- 
Steven

From eryksun at gmail.com  Sat Feb 16 09:32:29 2013
From: eryksun at gmail.com (eryksun)
Date: Sat, 16 Feb 2013 03:32:29 -0500
Subject: [Tutor] associating two objects without ORM and processing a
	text file
In-Reply-To: <511F2580.5090707@pearwood.info>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
	<CACL+1as09jRMFrUu4-tY2LjCrUTJf4P-hNNzXNeMdQtzvA11Ng@mail.gmail.com>
	<511F2580.5090707@pearwood.info>
Message-ID: <CACL+1atBXcQRL-1dyzUjTh8oEHOrA1a9EBL6f8UWz=VvViJYRA@mail.gmail.com>

On Sat, Feb 16, 2013 at 1:21 AM, Steven D'Aprano <steve at pearwood.info> wrote:
> while atexit can be set anywhere and isn't obvious. It's also somewhat
> risky, since you never know when some library you import will silently
> replace it with their own hook.

Use try/finally if the task is clearer that way. atexit is better
suited to libraries. logging uses atexit (flushing/closing handlers)
as does multiprocessing (terminating/joining active child processes).

As to the risk, atexit was added in 2.0 and directly using
sys.exitfunc was deprecated in 2.4.

From alan.gauld at btinternet.com  Sat Feb 16 10:12:18 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 16 Feb 2013 09:12:18 +0000
Subject: [Tutor] Web programming question: Re: Tutor Digest, Vol 108,
	Issue 58
In-Reply-To: <CABPV-FRmfRsLGJENxyCOf8fE7sj177ExQARYOagbohGaqVW1rw@mail.gmail.com>
References: <mailman.10259.1360976610.2938.tutor@python.org>
	<CABPV-FRmfRsLGJENxyCOf8fE7sj177ExQARYOagbohGaqVW1rw@mail.gmail.com>
Message-ID: <kfnihf$6b5$1@ger.gmane.org>

Please start new topics with a new post
(ie a fresh mail to tutor at python.org)

Please do not reply to digests without trimming out all irrelevant 
content - some people pay by the byte.

Please choose a sensible subject line not "Tutor Digest..."

On 16/02/13 03:09, Claira wrote:
> Hi, I signed up a while ago, but I didn't really understand anything. I
> have a basic question that maybe someone can help with. I'll like to
> integrate yelp data -- http://www.programmableweb.com/api/yelp -- onto
> google maps -- http://www.programmableweb.com/api/google-maps -- like
> how http://www.trulia.com/real_estate/New_York-New_York has it under
> "Amenities".

Lots of web sites do this and Google provide an API to support it.

> But I want it on maps.google.com

Then you will need to persuade Google to do it for you. They own that 
web site and you cannot modify it, only they can do that. I should think 
its highly unlikely they would agree.

> because I have no idea how to put the map on a separate webpage.

That's no excuse, you just need to learn how.

> I'll like to know if I need python for this :)

No, you could use pretty much any programming language you
choose from Ada to ZPL... But python would certainly be a
contender.

Start reading about how to build websites in Python and
then study the Google maps API.

http://docs.python.org/2/howto/webservers.html

http://econym.org.uk/gmap/


HTH

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From steve at pearwood.info  Sat Feb 16 11:21:36 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 16 Feb 2013 21:21:36 +1100
Subject: [Tutor] associating two objects without ORM and processing a
 text file
In-Reply-To: <CACL+1atBXcQRL-1dyzUjTh8oEHOrA1a9EBL6f8UWz=VvViJYRA@mail.gmail.com>
References: <CALFxCvyUGqnqGUSsMDBF_RXBzbk7G4gCrs47HfGf-3gwgbe_3Q@mail.gmail.com>
	<kfbcn4$scj$1@ger.gmane.org> <51193A3A.2080907@davea.name>
	<CALFxCvwoYBJs4WXgKy+6Oa6vNvqbY2HhV7Kc3y=JEdmX93JYWw@mail.gmail.com>
	<kfbu4l$46p$1@ger.gmane.org> <51199C24.1060708@pearwood.info>
	<CALFxCvzNNR63Wr9H6G5_GWLef6fXjgS_hFbOVA79Bvz_PP975Q@mail.gmail.com>
	<511AC8B8.80207@pearwood.info>
	<CALFxCvyCCDT3jEfo9=M4YVXXv5CRwmR1w-AgmztkeNum19-seA@mail.gmail.com>
	<5B80DD153D7D744689F57F4FB69AF4741819C9B2@SCACMX008.exchad.jpmchase.net>
	<511D4973.7040308@davea.name>
	<5B80DD153D7D744689F57F4FB69AF4741819D3C0@SCACMX008.exchad.jpmchase.net>
	<CACL+1as09jRMFrUu4-tY2LjCrUTJf4P-hNNzXNeMdQtzvA11Ng@mail.gmail.com>
	<511F2580.5090707@pearwood.info>
	<CACL+1atBXcQRL-1dyzUjTh8oEHOrA1a9EBL6f8UWz=VvViJYRA@mail.gmail.com>
Message-ID: <511F5DB0.4000005@pearwood.info>

On 16/02/13 19:32, eryksun wrote:
> On Sat, Feb 16, 2013 at 1:21 AM, Steven D'Aprano<steve at pearwood.info>  wrote:
>> while atexit can be set anywhere and isn't obvious. It's also somewhat
>> risky, since you never know when some library you import will silently
>> replace it with their own hook.
>
> Use try/finally if the task is clearer that way. atexit is better
> suited to libraries. logging uses atexit (flushing/closing handlers)
> as does multiprocessing (terminating/joining active child processes).
>
> As to the risk, atexit was added in 2.0 and directly using
> sys.exitfunc was deprecated in 2.4.


Ah yes, atexit doesn't *replace* the hook, it allows multiple hooks.
Correction noted.



-- 
Steven

From dyoo at hashcollision.org  Sat Feb 16 20:31:44 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Sat, 16 Feb 2013 12:31:44 -0700
Subject: [Tutor] Web programming question: Re: Tutor Digest, Vol 108,
 Issue 58
In-Reply-To: <kfnihf$6b5$1@ger.gmane.org>
References: <mailman.10259.1360976610.2938.tutor@python.org>
	<CABPV-FRmfRsLGJENxyCOf8fE7sj177ExQARYOagbohGaqVW1rw@mail.gmail.com>
	<kfnihf$6b5$1@ger.gmane.org>
Message-ID: <CAGZAPF78nYS7smWNMvKm3TFJNDY1nEj_BB5p=C9rkmOy4541uQ@mail.gmail.com>

>> Hi, I signed up a while ago, but I didn't really understand anything. I
>> have a basic question that maybe someone can help with. I'll like to
>> integrate yelp data -- http://www.programmableweb.com/api/yelp -- onto
>> google maps -- http://www.programmableweb.com/api/google-maps -- like
>> how http://www.trulia.com/real_estate/New_York-New_York has it under
>> "Amenities".
>
>
> Lots of web sites do this and Google provide an API to support it.
>
>> But I want it on maps.google.com


For a web mashup like this, doing it in JavaScript would probably be
the most direct approach.  Google provides access to the Google Maps
API, and it's documented:

    https://developers.google.com/maps/

You'd use this API to bring up a Google Maps page, and drive its
display with other sources of data.


Yelp provides an accessible API for query:

    http://www.yelp.com/developers/documentation/v2/overview


JavaScript is not Python, but that doesn't make it a bad thing.  If I
were to do a web mashup, I'd look into JavaScript-ing it rather than
try to make the web tools through Python alone.



That being said, if Python is a hard requirement here, you can look
into a project like pymaps:

    http://code.google.com/p/pymaps/

From waveclaira at gmail.com  Sun Feb 17 01:11:12 2013
From: waveclaira at gmail.com (Claira)
Date: Sat, 16 Feb 2013 18:11:12 -0600
Subject: [Tutor] Python API
Message-ID: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>

I dont know how this mailing list thing works, first time on it, they
should have something that makes sense like quora.com

For the question I asked, I didn't know you had to do all that just to get
a map. What happens if I use http://mapbox.com + Python + Yelp API ?

I thought that google maps lets you add stuff, and I just want that stuff
to be stuff accessible from the yelp api -- since google won't enable you
to do that, then if I continue with this, will I be able to do this
on mapbox without having to make a website?


------------------------------
>
> Message: 3
> Date: Sat, 16 Feb 2013 09:12:18 +0000
> From: Alan Gauld <alan.gauld at btinternet.com>
> To: tutor at python.org
> Subject: [Tutor] Web programming question: Re: Tutor Digest, Vol 108,
>         Issue 58
> Message-ID: <kfnihf$6b5$1 at ger.gmane.org>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Please start new topics with a new post
> (ie a fresh mail to tutor at python.org)
>
> Please do not reply to digests without trimming out all irrelevant
> content - some people pay by the byte.
>
> Please choose a sensible subject line not "Tutor Digest..."
>
> On 16/02/13 03:09, Claira wrote:
> > Hi, I signed up a while ago, but I didn't really understand anything. I
> > have a basic question that maybe someone can help with. I'll like to
> > integrate yelp data -- http://www.programmableweb.com/api/yelp -- onto
> > google maps -- http://www.programmableweb.com/api/google-maps -- like
> > how http://www.trulia.com/real_estate/New_York-New_York has it under
> > "Amenities".
>
> Lots of web sites do this and Google provide an API to support it.
>
> > But I want it on maps.google.com
>
> Then you will need to persuade Google to do it for you. They own that
> web site and you cannot modify it, only they can do that. I should think
> its highly unlikely they would agree.
>
> > because I have no idea how to put the map on a separate webpage.
>
> That's no excuse, you just need to learn how.
>
> > I'll like to know if I need python for this :)
>
> No, you could use pretty much any programming language you
> choose from Ada to ZPL... But python would certainly be a
> contender.
>
> Start reading about how to build websites in Python and
> then study the Google maps API.
>
> http://docs.python.org/2/howto/webservers.html
>
> http://econym.org.uk/gmap/
>
>
> HTH
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130216/504e0b54/attachment.html>

From dyoo at hashcollision.org  Sun Feb 17 01:35:01 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Sat, 16 Feb 2013 17:35:01 -0700
Subject: [Tutor] Python API
In-Reply-To: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
References: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
Message-ID: <CAGZAPF7_MLusHGb6s5Xi0MQz+te1swAYq4A+zkWTV42LLdahJQ@mail.gmail.com>

On Sat, Feb 16, 2013 at 5:11 PM, Claira <waveclaira at gmail.com> wrote:

> I dont know how this mailing list thing works, first time on it, they
> should have something that makes sense like quora.com
>
>
Be aware that mailing lists have a pretty long history, at least in
computing terms.  You might be interested in reading:

    http://www.gweep.ca/~edmonds/usenet/ml-etiquette.html

sometime.  When you say that mailing lists don't make sense, it's analogous
to a traveler who says that the foreign country they visit doesn't make
sense.  Sure, it might be true, but it does have echoes of the "ugly
American" stereotype.

And there is a difference between mailing lists like Python Tutor vs. sites
like Quora: the mailing list has a public-access archive.
http://mail.python.org/pipermail/tutor/  In contrast, Quora requires that
you get an account from them to even _look_ at their database.



For the question I asked, I didn't know you had to do all that just to get
> a map. What happens if I use http://mapbox.com + Python + Yelp API ?
>
> I thought that google maps lets you add stuff, and I just want that stuff
> to be stuff accessible from the yelp api -- since google won't enable you
> to do that, then if I continue with this, will I be able to do this
> on mapbox without having to make a website?
>

Hmmm... Does mapbox provide a programmable API?  It looks like it may:

    http://mapbox.com/developers/api/

but if I'm reading it correctly, it's a JavaScript API that depends on a
web browser, not one that's natively accessible from Python.  I don't think
it's accessible without a website, so I see no advantage over using Google
Maps.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130216/6579be77/attachment.html>

From waveclaira at gmail.com  Sun Feb 17 01:58:45 2013
From: waveclaira at gmail.com (Claira)
Date: Sat, 16 Feb 2013 18:58:45 -0600
Subject: [Tutor] Python API
In-Reply-To: <CAGZAPF7_MLusHGb6s5Xi0MQz+te1swAYq4A+zkWTV42LLdahJQ@mail.gmail.com>
References: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
	<CAGZAPF7_MLusHGb6s5Xi0MQz+te1swAYq4A+zkWTV42LLdahJQ@mail.gmail.com>
Message-ID: <CABPV-FSX6tFrse_1ynod-oRUz6EZaZwA=SL1rBjXVYaYve5r9Q@mail.gmail.com>

On Sat, Feb 16, 2013 at 6:35 PM, Danny Yoo <dyoo at hashcollision.org> wrote:

>
>
> On Sat, Feb 16, 2013 at 5:11 PM, Claira <waveclaira at gmail.com> wrote:
>
>> I dont know how this mailing list thing works, first time on it, they
>> should have something that makes sense like quora.com
>>
>>
> Be aware that mailing lists have a pretty long history, at least in
> computing terms.  You might be interested in reading:
>
>     http://www.gweep.ca/~edmonds/usenet/ml-etiquette.html
>
> sometime.  When you say that mailing lists don't make sense, it's
> analogous to a traveler who says that the foreign country they visit
> doesn't make sense.  Sure, it might be true, but it does have echoes of the
> "ugly American" stereotype.
>
> And there is a difference between mailing lists like Python Tutor vs.
> sites like Quora: the mailing list has a public-access archive.
> http://mail.python.org/pipermail/tutor/  In contrast, Quora requires that
> you get an account from them to even _look_ at their database.
>
> :) But when I google, google never takes me to the open python.org -- and
> I don't know any of sterotypes since you're the one in America.
>
> For the question I asked, I didn't know you had to do all that just to get
>> a map. What happens if I use http://mapbox.com + Python + Yelp API ?
>>
>> I thought that google maps lets you add stuff, and I just want that stuff
>> to be stuff accessible from the yelp api -- since google won't enable you
>> to do that, then if I continue with this, will I be able to do this
>> on mapbox without having to make a website?
>>
>
> Hmmm... Does mapbox provide a programmable API?  It looks like it may:
>
>     http://mapbox.com/developers/api/
>
> but if I'm reading it correctly, it's a JavaScript API that depends on a
> web browser, not one that's natively accessible from Python.  I don't think
> it's accessible without a website, so I see no advantage over using Google
> Maps.
>

:) Ok I'll ask those on the mapbox site about this and see how to go about
this. Thanks!!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130216/01e4fc4f/attachment-0001.html>

From alan.gauld at btinternet.com  Sun Feb 17 02:34:15 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sun, 17 Feb 2013 01:34:15 +0000
Subject: [Tutor] Python API
In-Reply-To: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
References: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
Message-ID: <kfpc2k$q20$1@ger.gmane.org>

On 17/02/13 00:11, Claira wrote:
> I don't know how this mailing list thing works,

Most mailing lists work the same way. You sign up and any mails that get 
sent to the server get relayed to all of the members. That's about all 
there is to it. But there are some social conventions in the
way people behave, mostly designed for the convenience of all - like 
adding good subject lines, not sending unnecessary data etc

> For the question I asked, I didn't know you had to do all that just to
> get a map. What happens if I use http://mapbox.com + Python + Yelp API ?

All what?
You need a web site - even if its only on your local PC. That's how web 
pages get displayed (unless its just static html/Javascript). You can 
certainly build a web site with mapbox+Python+Yelp.

> I thought that google maps lets you add stuff,

It does but not on the Googlemaps web site. You have to use their 
interface to fetch the information and display their maps on your 
website. You can use layers and iFrames to display the maps on
one layer and superimpose another layer with your data on top,
but frankly that's harder than using the API...

> stuff to be stuff accessible from the yelp api

An API is a programmers interface. You can use the yelp api to
interact with the yelp site, but I don;t think it will let you
do anything with the Google website. You need to do that with
the Google API.

>  -- since google won't enable you to do that, then if I continue
 > with this, will I be able to do this on mapbox

No idea. I've never heard of mapbox. A quick Google later and it seems 
to enable you to create custom maps and publish them  *to your website*.
So you still need to create a web site, the only difference from Google 
is that you get to design your own maps instead of using Google style.

> without having to make a website?

It's unusual for any website to allow other people to change it. It 
would have horrendous security ramifications and could get their site 
closed down. But, a web site doesn't need to be public or big, it can 
run on your own PC. You just need to install/configure the web server 
software. It's probably already available in your OS.

It might help if we had some background info:
1) Can you already program in any language or are you a
    complete beginner?
2) Have you ever created a web site of any kind before?
3) Have you ever created web pages using HTML before?

That will give us some idea of where to pitch our responses/explanations.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From steve at pearwood.info  Sun Feb 17 04:21:22 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sun, 17 Feb 2013 14:21:22 +1100
Subject: [Tutor] Python API
In-Reply-To: <kfpc2k$q20$1@ger.gmane.org>
References: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
	<kfpc2k$q20$1@ger.gmane.org>
Message-ID: <51204CB2.4030801@pearwood.info>

On 17/02/13 12:34, Alan Gauld wrote:

> It's unusual for any website to allow other people to change it.

*cough*

You may have heard of a little site called "Wikipedia"... ?

http://en.wikipedia.org/wiki/Main_Page


A very, very small selection of other collaborative wikis:

http://c2.com/cgi/wiki
http://www.wikispaces.com/
http://tvtropes.org/
http://rationalwiki.org/wiki/Main_Page
http://www.conservapedia.com/Main_Page
http://starwars.wikia.com/wiki/Main_Page
http://discworld.wikia.com/wiki/Main_Page
http://wiki.lspace.org/mediawiki/index.php/Main_Page
http://stackoverflow.com/


Some of these require a login account, but since there are few or no restrictions on who can get an account, that is not a big deal.



-- 
Steven

From alan.gauld at btinternet.com  Sun Feb 17 10:01:59 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sun, 17 Feb 2013 09:01:59 +0000
Subject: [Tutor] Python API
In-Reply-To: <51204CB2.4030801@pearwood.info>
References: <CABPV-FRc8q7Df3iW5WaFqiyFDMwFPPUrwY2yDA7p6TLm0omSBg@mail.gmail.com>
	<kfpc2k$q20$1@ger.gmane.org> <51204CB2.4030801@pearwood.info>
Message-ID: <kfq6a4$edm$1@ger.gmane.org>

On 17/02/13 03:21, Steven D'Aprano wrote:
> On 17/02/13 12:34, Alan Gauld wrote:
>
>> It's unusual for any website to allow other people to change it.
>
> *cough*
>
> You may have heard of a little site called "Wikipedia"... ?

Yep, that's why I said 'unusual' not 'unknown'. :-)

But wiki's are a very special type of web site. You could argue the same 
for Facebook etc although they work more like collections of web sites.

> Some of these require a login account, but since there are few or no
> restrictions on who can get an account, that is not a big deal.

There are few restrictions on access but there are often restrictions on 
what you can do to them. You can't go onto wikipedia and change
the style or layout  of the pages. Also many are moderated before posts 
show up. I doubt very much if you could just go in and overlay a 
wikipedia page with an iFrame containing an Encyclopedia Britannica 
article on the same subject.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From brajesh_pant at hotmail.com  Sun Feb 17 10:14:14 2013
From: brajesh_pant at hotmail.com (Brajesh pant)
Date: Sun, 17 Feb 2013 14:44:14 +0530
Subject: [Tutor] Invoking python script
Message-ID: <BLU403-EAS533157B1CABEAC12A701FDFE0C0@phx.gbl>

Hello there ..
I want to know is there any python module which can tell when a cut command or copy command is invoked. Actually i want to build a utility such that a when a file or folder is copied i want to automatically run my python script ..

Thanks 
Brajesh Pant

From steve at pearwood.info  Sun Feb 17 11:13:17 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sun, 17 Feb 2013 21:13:17 +1100
Subject: [Tutor] Invoking python script
In-Reply-To: <BLU403-EAS533157B1CABEAC12A701FDFE0C0@phx.gbl>
References: <BLU403-EAS533157B1CABEAC12A701FDFE0C0@phx.gbl>
Message-ID: <5120AD3D.9050909@pearwood.info>

On 17/02/13 20:14, Brajesh pant wrote:
> Hello there ..
> I want to know is there any python module which can tell when a cut
>command or copy command is invoked.

Invoked by what? What program is doing the copy or cut?


> Actually i want to build a utility such that a when a file or folder
>is copied i want to automatically run my python script ..

That depends on what facilities your desktop environment is running. You
may not even have a desktop environment. What are you running?

Irix Interactive Desktop
Apple Finder
TDE/KDE 3
KDE 4
Gnome
CDE
XFCE
LXDE
ROX
IceWM
Sugar
Cinnamon
Mezzo

to mention only a few.



-- 
Steven

From alan.gauld at btinternet.com  Sun Feb 17 16:57:39 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sun, 17 Feb 2013 15:57:39 +0000
Subject: [Tutor] Invoking python script
In-Reply-To: <BLU403-EAS533157B1CABEAC12A701FDFE0C0@phx.gbl>
References: <BLU403-EAS533157B1CABEAC12A701FDFE0C0@phx.gbl>
Message-ID: <kfqulg$ter$1@ger.gmane.org>

On 17/02/13 09:14, Brajesh pant wrote:
> Hello there ..
> I want to know is there any python module which can tell
 > when a cut command or copy command is invoked.

There are but probably not trivially. but you need to understand what 
you are asking for. A cut/copy command is a desktop environment thing 
that is specific to the GUI and the application you are using. It would 
include any cut/copy action including manipulating text in a word 
processor or numbers in a spreadsheet. These are commands to an 
application to do something to its underlying data model. In the case of 
a File explorer that model is the file system, in a web browser its the 
screen artifacts being displayed (actually the DOM).

So just because you detected cut/paste commands in the GUI that would 
not necessarily be the commands you are interested in, and there ay be 
other ways of modifying the files (eg via command line) that cut/copy 
would not detect.

In fact if you used a different file explorer (eg a KDE v a Gnome based 
one) you probably wouldn't detect those events. Unless you are doing 
something atbthe GUI level that is almost certainly the wrong starting 
point!

> Actually i want to  build a utility such that a when a file or folder
 > is copied i want to automatically run my python script ..
>

And this is a far different thing because you specifically want to 
monitor the file-system regardless of how the files get moved.
This is very dependent on the OS and even the file-system. For example 
with a journalling file-system it will be much easier to do this than 
with the old DOS FAT based system or even older Unix systems like ext2.
And I don;t know of any Python modules that would help directly, I 
suspect you need to get down 'n dirty with the OS itself.

I'll be interested to see what other folks suggest on this one.
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From jf_byrnes at comcast.net  Sun Feb 17 17:50:11 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Sun, 17 Feb 2013 10:50:11 -0600
Subject: [Tutor] Need help with sqlite3 in python
Message-ID: <kfr1o1$nvu$1@ger.gmane.org>

I am writing a small database CRUD app using python 2.7, pythoncard, 
sqlite3 on Ubuntu 12.04.  So far I can retrieve data fine but I cannot 
do inserts. In my first attempt I used parameter substitution. When that 
did not work I thought I didn't understand it and decided to try a 
simple insert.  I modeled the code after the example on the python 
sqlite3 page.  Here is the code that does not work.  Note: Don't mind 
the title, the delete button had no code yet and seemed to be the 
easiest place to run this simple test.

def on_buttonDelete_mouseClick(self, event):
	conn = sqlite3.connect("/home/jfb/MyProgs/Pwds/passwords")
	cur = conn.cursor()
	cur.execute("INSERT INTO pwds VALUES ('WebSites', 'xMe', 'me', 'you', 
'here', 'there')")
	conn.commit()
	conn.close()
	print 'done'


When this code is run, done prints in the terminal, there is no error 
message, the row is not inserted and the file modified time is not 
changed.  The permissions set on the file are -rw -rw -rw. Sqlite3 is 
imported and if I mangle the path or execute line it complains. If I run 
the same sql in Sqliteman the row is inserted as expected.

Appreciate it if someone could give me an idea of what I am doing wrong.

Thanks,  Jim


From alan.gauld at btinternet.com  Sun Feb 17 19:31:52 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sun, 17 Feb 2013 18:31:52 +0000
Subject: [Tutor] Need help with sqlite3 in python
In-Reply-To: <kfr1o1$nvu$1@ger.gmane.org>
References: <kfr1o1$nvu$1@ger.gmane.org>
Message-ID: <kfr7ml$cor$1@ger.gmane.org>

On 17/02/13 16:50, Jim Byrnes wrote:

>      cur.execute("INSERT INTO pwds VALUES ('WebSites', 'xMe', 'me',
> 'you', 'here', 'there')")
>
> When this code is run, done prints in the terminal, there is no error

Can you do selects properly?
Can you extract data put in manually? That would prove the connection 
from Python to SQLite was working...

Usually when I get errors like that its because the values do not match 
the number of fields/types in the table definition, but if the manual 
sql works with the same query that shouldn't be the issue so I'd suspect 
the connection...

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From jf_byrnes at comcast.net  Sun Feb 17 20:47:04 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Sun, 17 Feb 2013 13:47:04 -0600
Subject: [Tutor] Need help with sqlite3 in python
In-Reply-To: <kfr7ml$cor$1@ger.gmane.org>
References: <kfr1o1$nvu$1@ger.gmane.org> <kfr7ml$cor$1@ger.gmane.org>
Message-ID: <kfrc3l$m4e$1@ger.gmane.org>

On 02/17/2013 12:31 PM, Alan Gauld wrote:
> On 17/02/13 16:50, Jim Byrnes wrote:
>
>>      cur.execute("INSERT INTO pwds VALUES ('WebSites', 'xMe', 'me',
>> 'you', 'here', 'there')")
>>
>> When this code is run, done prints in the terminal, there is no error
>
> Can you do selects properly?
> Can you extract data put in manually? That would prove the connection
> from Python to SQLite was working...

Thank you Alan.  Your question led me to the solution. So many times it 
is dumb little mistakes that trip you up. I had moved a copy of the db 
into the directory I was developing in but was inserting in  the working 
copy.  The insertions were there I was just looking at the wrong db with 
Sqliteman.

> Usually when I get errors like that its because the values do not match
> the number of fields/types in the table definition, but if the manual
> sql works with the same query that shouldn't be the issue so I'd suspect
> the connection...
>

Regards,  Jim


From oscar.j.benjamin at gmail.com  Mon Feb 18 00:27:33 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Sun, 17 Feb 2013 23:27:33 +0000
Subject: [Tutor] Invoking python script
In-Reply-To: <kfqulg$ter$1@ger.gmane.org>
References: <BLU403-EAS533157B1CABEAC12A701FDFE0C0@phx.gbl>
	<kfqulg$ter$1@ger.gmane.org>
Message-ID: <CAHVvXxTo74rcZd9gJZkJ3+v0MWbCcyutEXcn-x7XiFxg=FRteQ@mail.gmail.com>

On 17 February 2013 15:57, Alan Gauld <alan.gauld at btinternet.com> wrote:
> On 17/02/13 09:14, Brajesh pant wrote:
>>
>> Actually i want to  build a utility such that a when a file or folder
>
>> is copied i want to automatically run my python script ..
>>
>
> And this is a far different thing because you specifically want to monitor
> the file-system regardless of how the files get moved.
> This is very dependent on the OS and even the file-system. For example with
> a journalling file-system it will be much easier to do this than with the
> old DOS FAT based system or even older Unix systems like ext2.
> And I don;t know of any Python modules that would help directly, I suspect
> you need to get down 'n dirty with the OS itself.
>
> I'll be interested to see what other folks suggest on this one.

I would suggest watchdog:
http://pypi.python.org/pypi/watchdog
There are other packages that do this but watchdog is the only one
that I have used.

This is a Python package that enables you to watch for changes in a
directory. I've used it on Linux but it claims to work on Windows, OSX
and BSD as well. Using this you can run any Python code you like when
a change occurs.

The way it works is that you have a script that imports and uses the
watchdog module. You run that script telling it to watch a particular
folder and while it is running it will be notified of any changes and
will run the code that you specify for each event.


Oscar

From michael at seomoz.org  Mon Feb 18 08:36:25 2013
From: michael at seomoz.org (Michael O'Leary)
Date: Sun, 17 Feb 2013 23:36:25 -0800
Subject: [Tutor] Class-based generator
Message-ID: <CAFp7J1Y7sFtGG6hNfN96R2On7+-13kF13x94w9uBo6ci_k7TLw@mail.gmail.com>

I wrote some code to create tasks to be run in a queue based system last
week. It consisted of a big monolithic function that consisted of two parts:
1) read data from a file and create dictionaries and lists to iterate
through
2) iterate through the lists creating a job data file and a task for the
queue one at a time until all of the data is dealt with

My boss reviewed my code and said that it would be more reusable and
Pythonic if I refactored it as a generator that created job data files and
iterated by calling the generator and putting a task on the queue for each
job data file that was obtained.

This made sense to me, and since the code does a bunch of conversion of the
data in the input file(s) to make it easier and faster to iterate through
the data, I decided to create a class for the generator and put that
conversion code into its __init__ function. So the class looked like this:

class JobFileGenerator:
    def __init__(self, filedata, output_file_prefix, job_size):
        <convert filedata to a more usable form>

    def next(self):
        while <there is more data>:
            <yield a job data file>

The problem is that the generator object is not created until you call
next(), so the calling code has to look like this:

gen = JobFileGenerator(data, "output_", 20).next()
for datafile in gen.next():
    <put a job that uses datafile into the queue>

This code works OK, but I don't like that it needs to call next() once to
get a generator and then call next() again repeatedly to get the data for
the jobs. If I were to write this without a class as a single generator
function, it would not have to do this, but it would have the monolithic
structure that my boss objected to.

Would it work to do this:

for datafile in JobFileGenerator(data, "output_", 20).next():
    <put a job that uses datafile into the queue>

or would that cause the JobFileGenerator's __init__ function to be called
more than once? Are there examples I could look at of generator functions
defined on classes similar to this, or is it considered a bad idea to mix
the two paradigms?
Thanks,
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130217/cef81f7c/attachment-0001.html>

From oscar.j.benjamin at gmail.com  Mon Feb 18 09:58:35 2013
From: oscar.j.benjamin at gmail.com (Oscar Benjamin)
Date: Mon, 18 Feb 2013 08:58:35 +0000
Subject: [Tutor] Class-based generator
In-Reply-To: <CAFp7J1Y7sFtGG6hNfN96R2On7+-13kF13x94w9uBo6ci_k7TLw@mail.gmail.com>
References: <CAFp7J1Y7sFtGG6hNfN96R2On7+-13kF13x94w9uBo6ci_k7TLw@mail.gmail.com>
Message-ID: <CAHVvXxRpjnafmH+QZ0Jhp0WgNn6oAfFBi=+NRThcnybU=y7NoQ@mail.gmail.com>

On 18 February 2013 07:36, Michael O'Leary <michael at seomoz.org> wrote:
> I wrote some code to create tasks to be run in a queue based system last
> week. It consisted of a big monolithic function that consisted of two parts:
> 1) read data from a file and create dictionaries and lists to iterate
> through
> 2) iterate through the lists creating a job data file and a task for the
> queue one at a time until all of the data is dealt with
>
> My boss reviewed my code and said that it would be more reusable and
> Pythonic if I refactored it as a generator that created job data files and
> iterated by calling the generator and putting a task on the queue for each
> job data file that was obtained.
>
> This made sense to me, and since the code does a bunch of conversion of the
> data in the input file(s) to make it easier and faster to iterate through
> the data, I decided to create a class for the generator and put that
> conversion code into its __init__ function. So the class looked like this:

It's not a "generator" if you create a class for it. Your class is
(trying to be) an iterator.

> class JobFileGenerator:
>     def __init__(self, filedata, output_file_prefix, job_size):
>         <convert filedata to a more usable form>
>
>     def next(self):
>         while <there is more data>:
>             <yield a job data file>

next() should return a single item not a generator that yields items.
If you perhaps rename the next function as __iter__ then it will be a
proper iterator.

I suspect however that your boss just wants you to write a single
generator function rather than an iterator class. For example:

def generate_jobs():
    <prepare>
    while <data>:
        yield <job>

for job in generate_jobs():
    <queue job>

From __peter__ at web.de  Mon Feb 18 10:00:47 2013
From: __peter__ at web.de (Peter Otten)
Date: Mon, 18 Feb 2013 10:00:47 +0100
Subject: [Tutor] Class-based generator
References: <CAFp7J1Y7sFtGG6hNfN96R2On7+-13kF13x94w9uBo6ci_k7TLw@mail.gmail.com>
Message-ID: <kfsqjf$i1h$1@ger.gmane.org>

Michael O'Leary wrote:

> I wrote some code to create tasks to be run in a queue based system last
> week. It consisted of a big monolithic function that consisted of two
> parts: 1) read data from a file and create dictionaries and lists to
> iterate through
> 2) iterate through the lists creating a job data file and a task for the
> queue one at a time until all of the data is dealt with
> 
> My boss reviewed my code and said that it would be more reusable and
> Pythonic if I refactored it as a generator that created job data files and
> iterated by calling the generator and putting a task on the queue for each
> job data file that was obtained.
> 
> This made sense to me, and since the code does a bunch of conversion of
> the data in the input file(s) to make it easier and faster to iterate
> through the data, I decided to create a class for the generator and put
> that conversion code into its __init__ function. So the class looked like
> this:
> 
> class JobFileGenerator:
>     def __init__(self, filedata, output_file_prefix, job_size):
>         <convert filedata to a more usable form>
> 
>     def next(self):
>         while <there is more data>:
>             <yield a job data file>
> 
> The problem is that the generator object is not created until you call
> next(), so the calling code has to look like this:
> 
> gen = JobFileGenerator(data, "output_", 20).next()
> for datafile in gen.next():
>     <put a job that uses datafile into the queue>
> 
> This code works OK, but I don't like that it needs to call next() once to
> get a generator and then call next() again repeatedly to get the data for
> the jobs. If I were to write this without a class as a single generator
> function, it would not have to do this, but it would have the monolithic
> structure that my boss objected to.
> 
> Would it work to do this:
> 
> for datafile in JobFileGenerator(data, "output_", 20).next():
>     <put a job that uses datafile into the queue>
> 
> or would that cause the JobFileGenerator's __init__ function to be called
> more than once? Are there examples I could look at of generator functions
> defined on classes similar to this, or is it considered a bad idea to mix
> the two paradigms?
> Thanks,
> Mike


You are abusing the next method; it is called once to build a generator. The 
convention for that is to use either a descriptive name (jobs() or somesuch) 
or __iter__():

class JobFile:
    def __init__(self, filedata, output_file_prefix, job_size):
        <convert filedata to a more usable form>
    def __iter__(self):
        while <there is more data>:
            <yield a job data file>


for job in JobFile(data, "output_", 20):
    <put a job that uses datafile into the queue>

Here the generator is created by the implicit call to JobFile.__iter__() at 
the start of the for loop. Subsequent iterations call next() on the 
generator returned by that call.

If you want the class itself to generate items you need a different 
approach:

class JobFileIter:
    def __init__(self, filedata, output_file_prefix, job_size):
        <convert filedata to a more usable form>
        self._done = False
    def __iter__(self):
        return self
    def next(self):
        if self._done or <no more data>:
            self._done = True
            raise StopIteration
        return <a job data file>


for job in JobFileIter(data, "output_", 20):
    <put a job that uses datafile into the queue>

Here __iter__() returns the JobFileIter instance, so for every iteration of 
the for loop JobFileIter.next() will be called -- until a StopIteration is 
raised.

That said, it is often sufficient to refactor complex code into a few 
dedicated functions -- Python is not Java, after all.

PS I'm assuming Python 2 -- for Python 3 the next() method must be replaced 
by __next__().


From chigga101 at gmail.com  Mon Feb 18 18:30:58 2013
From: chigga101 at gmail.com (Matthew Ngaha)
Date: Mon, 18 Feb 2013 17:30:58 +0000
Subject: [Tutor] following on
Message-ID: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>

hey guys ive been learning programming/python for less than a year. i
feel very comfortable with it now. After the initial beginners guide i
asked on here what to learn next. I started learning a GUI library and
also pygame. i decided to learn more about OOP also. My problem is yes
i can attempt to use these libraries/frameworks/modules provided but
how can i build or get better at creating/building my own tools? i do
ok in programming conversations until they start talking about "the
standard etc wasnt good enough so i built my own! i did this, i this
and i did that!" or hey i built my own engine, my own language!!
etc... i become absolutely lost and thought i would like to do that!
The extra OOP has given me hints on what i need to do, but i was
wondering if anyone could point me out to some good books or online
tutorials that can teach me how to create my own modules, libraries
that others could use. This is what is called software engineering
right? or is that something else?

I decided not to sit around and ponder so i decided on a project (when
im bored) that could help. i wanted to code a custom class that will
create custom instances and have these instances behave like normal
python objects. I want my program to basically do EVETYTHING that
python already does but in my own way. On the objects i'd like to
perform stuff like __add__ or __cmp__ on them, but without actually
using __add__ or __cmp__, get it?. ill attempt my own built-ins also,
like summed() instead of sum()... is this a constructive exercise or a
waste of time? i honestly dont know, i guess i'd just like a better
understanding of how everything works. like how can i make my own
custom container and not have it subclass list(), and still act like a
list()? would i need to use stuff like __next__ and __iter__ or could
i create my own that acts the same way

ill drop the project if its a bad idea but if it isnt, its simply a
work in progress(barely started). my __init__ sp far only accepts ints
right now but ill attempt to make the class accept any type of python
object, and offer custom behaviour for that specific object type.

so please point me out to some good books or online tutorials that can
teach me how to create my own software that others could use. Also
what is the correct term for this type of programming? Also if you
have any personal advice you could offer me, please do.. Thanks

From alan.gauld at btinternet.com  Mon Feb 18 19:22:42 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 18 Feb 2013 18:22:42 +0000
Subject: [Tutor] following on
In-Reply-To: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
Message-ID: <kftrhf$l9n$1@ger.gmane.org>

On 18/02/13 17:30, Matthew Ngaha wrote:

> i can attempt to use these libraries/frameworks/modules provided but
> how can i build or get better at creating/building my own tools?

practice.
Just build a lot of stuff. Its the only way.

> and i did that!" or hey i built my own engine, my own language!!

That doesn't happen all that often, usually people just extend
the existing language.

> etc... i become absolutely lost and thought i would like to do that!

What? Get absolutely lost?! :-)

> wondering if anyone could point me out to some good books or online
> tutorials that can teach me how to create my own modules, libraries
> that others could use.

In python this is almost trivial. Just create a Python script that has 
functions or classes in it. That's it. Make it available for import by 
putting it somewhere in your import path. job done.

There is a little bit more to creating a package rather than a module 
but its easy once you've  got the hang  of making modules.

> This is what is called software engineering

No, its a part of software engineering. Software engineering is an 
attempt to apply traditional engineering discipline to software 
development in the hope that it will make the development process more 
predictable, reliable and consistent. So far it's pretty much failed 
because most "software engineers" don't really like doing hard math when 
they could be writing code, and doing hard math before building anything 
is pretty much what makes it engineering... (This is why some US states 
refuse to acknowledge software engineering as 'real' engineering.)

But it also includes things like creating modular designs and performing 
comprehensive tests and documenting the design in standard formats etc. 
Those aspects have caught on in varying degrees.

>
> create custom instances and have these instances behave like normal
> python objects.

Thats good.


> I want my program to basically do EVETYTHING that
> python already does but in my own way. On the objects i'd like to
> perform stuff like __add__ or __cmp__ on them, but without actually
> using __add__ or __cmp__, get it?.

No, that's probably not good.

> I'll attempt my own built-ins also,

And that's almost certainly even worse.


> like summed() instead of sum()... is this a constructive exercise or a
> waste of time?

Its a waste of time given where you are on your learning journey. Maybe 
some day you will have a valid need to create your own language but this 
is almost certainly not it!

> understanding of how everything works.

Use it., Experiment with it. Break it.
Thats the best way. Read the source code its all available in
Python or C.

> like how can i make my own custom container and not have it
 > subclass list(), and still act like a list()?

That's a more sensible option especially if you make it a type of 
container that Python doesn't already have. Maybe a bag or a stack
or even a circular list. But there is no shame in inheriting from
list if that makes sense. That would be good software engineering - 
don't reinvent the wheel!

> would i need to use stuff like __next__ and __iter__ or could
> i create my own that acts the same way

You need to implement all the special methods that give Python objects 
their built-in behaviour. Or at least all the ones that matter, or make 
sense, for your data type.

> ill drop the project if its a bad idea but if it isnt, its simply a
> work in progress(barely started).

I'd forget trying to rewrite Python in python. Even as a learning 
project it has limited value and as a practical proposition no value at 
all. Better to build something meaningful that pushes the envelope with 
python.

> so please point me out to some good books or online tutorials that can
> teach me how to create my own software that others could use. Also
> what is the correct term for this type of programming?

Just programming. Its what we should all be doing all the time!

> have any personal advice you could offer me, please do.. Thanks

When building  reusable code start from the perspective of the user. 
Write some tests that use the new creation even though it doesn't exist 
yet. Make the code as easy to use as possible. Once you know how to use 
it, start building the thing so that it can be used the way you want it 
to work. The hard effort should be in building the reusable code not in 
using it.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From n.rautenhaus at gmx.de  Mon Feb 18 19:22:54 2013
From: n.rautenhaus at gmx.de (Niclas Rautenhaus)
Date: Mon, 18 Feb 2013 19:22:54 +0100
Subject: [Tutor] if/else option for making a choice
Message-ID: <002101ce0e04$f90a4160$eb1ec420$@rautenhaus@gmx.de>

Hello folks,

 

I would be very pleased if someone is able to help me.

I wrote a small programm, to calculate the grand total for a car.

A basic price can be entered. Given that basic price, a tax peercentage is
calculated and added tot he grand total.


But unfortunately I am stuck with giving the user the choice to select an
additional option!
The extra items have got set values, but at the moment they all get
summarized, but i want to choose.

 

AFAIK I already tried:

 

Print  raw_input ((?Would you like to have leather??) ? then yes or no

If raw_input == yes

      Print Leather (Leather) ? displaying the variables value

 

Plus adding the item at the end to concatenate it with the basic value.

 

I hope it is clear where my problem is.

 

Regards,

 

Niclas

 

My code I already wrote:

-----------------------------

 

 

#Car price calculator

 

# Set variables for additional items

Leather = (500)

int (Leather)

Clima = (1500)

int (Clima)

Hifi = (250)

int (Hifi)

Electrics = (750)

int (Electrics)

Comfort = (2500)

int (Comfort)

 

 

print "\t\t\tWelcome to the car price calculator!"

print "\t\t\tCredits belong to Niclas Rautenhaus"

print "\n\nPlease enter the basic price: "

basic = int (raw_input())

# Tax is a percentage of the basic car price

Tax = basic * 5 / 100

int (Tax)

 

print "\nAdded items:"

# Here the user should have the possibility to pick either yes or no

print "\n\nLeather",(Leather)

print "Clima",(Clima)

print "Hifi", (Hifi)

print "Electrics", (Electrics)

print "Comfort", (Comfort)

print "Tax", (Tax)

 

# Last step: the picked items shall be summarized

 

print "\n\nTotal grand:", basic + Leather + Clima + Hifi \

      + Electrics + Comfort + Tax

 

raw_input ("\nPress the enter key to exit!")

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130218/0b242906/attachment.html>

From chigga101 at gmail.com  Mon Feb 18 20:01:02 2013
From: chigga101 at gmail.com (Matthew Ngaha)
Date: Mon, 18 Feb 2013 19:01:02 +0000
Subject: [Tutor] following on
In-Reply-To: <kftrhf$l9n$1@ger.gmane.org>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
Message-ID: <CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>

>> understanding of how everything works.
>
> Use it., Experiment with it. Break it.
> Thats the best way. Read the source code its all available in
> Python or C.
>

Hey can you please tell me which source code youre referring too? The
initial files that come with Python? also the C code, where can i
locate this? is C something worth learning? why is Python code
available in C?

>
>> like how can i make my own custom container and not have it
>> subclass list(), and still act like a list()?
>
> That's a more sensible option especially if you make it a type of container
> that Python doesn't already have. Maybe a bag or a stack
> or even a circular list. But there is no shame in inheriting from
> list if that makes sense. That would be good software engineering - don't
> reinvent the wheel!
> When building  reusable code start from the perspective of the user. Write

yes i will try not to reinvent the wheel, a lot of tutorials ive read
seem to always point this out. Just out of curiousity what is a bag,
stack or circular list? what is needed to create something like this?
i sort of heard about a stack its a C/C++ thing i think?

From steve at alchemy.com  Mon Feb 18 20:22:22 2013
From: steve at alchemy.com (Steve Willoughby)
Date: Mon, 18 Feb 2013 11:22:22 -0800
Subject: [Tutor] following on
In-Reply-To: <CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
Message-ID: <20130218192222.GB38727@dragon.alchemy.com>

On Mon, Feb 18, 2013 at 07:01:02PM +0000, Matthew Ngaha wrote:
> >> understanding of how everything works.
> >
> > Use it., Experiment with it. Break it.
> > Thats the best way. Read the source code its all available in
> > Python or C.
> >
> 
> Hey can you please tell me which source code youre referring too? The
> initial files that come with Python? also the C code, where can i
> locate this? is C something worth learning? why is Python code
> available in C?

C is definitely worth learning.  So is LISP.  And a handful of other
languages we could enumerate.  It's worth learning if it adds something
useful to your understanding of how computers operate on the instructions you
give them, or if it changes your approach to creating software in a fundamental
way.  Actually using those languages in daily life is not the point.

C, however, is still very useful in a number of situations.  Python programmers
can get leverage from its strengths by--for example--writing performance-critical
modules in C and then calling them from their Python programs.

Python itself (well, the standard implementation of it anyway) is written in C.
It has to be written in something that ultimately compiles down to the machine
language which the computer actually uses.  That C code interprets your Python
code so you have a much nicer, high-level programming environment to work with.
But the computer itself doesn't directly understand Python.

> yes i will try not to reinvent the wheel, a lot of tutorials ive read
> seem to always point this out. Just out of curiousity what is a bag,
> stack or circular list? what is needed to create something like this?
> i sort of heard about a stack its a C/C++ thing i think?

None of these are C/C++ things.  They are basic building-blocks of Computer
Science and data structures you'll use regardless of language.  I'd really
recommend investing some time reading up on these and other fundamental
data structures.
-- 
Steve Willoughby    |  Using billion-dollar satellites
steve at alchemy.com   |  to hunt for Tupperware.

From steve at alchemy.com  Mon Feb 18 20:15:23 2013
From: steve at alchemy.com (Steve Willoughby)
Date: Mon, 18 Feb 2013 11:15:23 -0800
Subject: [Tutor] if/else option for making a choice
In-Reply-To: <002101ce0e04$f90a4160$eb1ec420$@rautenhaus@gmx.de>
References: <002101ce0e04$f90a4160$eb1ec420$@rautenhaus@gmx.de>
Message-ID: <20130218191523.GA38727@dragon.alchemy.com>

On Mon, Feb 18, 2013 at 07:22:54PM +0100, Niclas Rautenhaus wrote:
> Hello folks,
> I hope it is clear where my problem is.

Not completely, but let's take a look at what you have so far.

> # Set variables for additional items
> Leather = (500)
> int (Leather)
> Clima = (1500)
> int (Clima)
...

You don't need to put parens around the values, but more importantly
note that the "int" lines don't do anything here.  When you say:

> Hifi = (250)
> int (Hifi)

You set Hifi to the value 250 in the first line, which is fine, but
then you call int() to turn the integer 250 into the integer 250, and
then promptly discard that value.  If you had, for example, a string
"250" and wanted to turn it into an integer, you could do something
like

Hifi = int("250")

But simply saying

int(250)

accomplishes nothing.  Do you see why?

> print "\n\nPlease enter the basic price: "
> 
> basic = int (raw_input())

I'm curious why the price of the car has to be an integer.
Couldn't it be something like 15999.95?

> # Tax is a percentage of the basic car price
> 
> Tax = basic * 5 / 100

You would be better off using floats here if you want a real number
as the answer.  You're working in integers.

> int (Tax)

Or maybe you really want integers only to keep the numbers easier
or something.  Fair enough, but again this line does absolutely
nothing.  You truncate Tax to an integer but then discard that integer
value as soon as it's created.

> print "\nAdded items:"
> # Here the user should have the possibility to pick either yes or no
> print "\n\nLeather",(Leather)

The parentheses are unnecessary here.

To have them choose, you need some kind of "if" statement.  Maybe something
like

choice = raw_input("Would you like windows?")
if choice == 'yes':
    windows = 150

There are certainly more sophisticated ways to do this as well, when you get
past the basics of how conditionals (if statements) work.  For example, making
a function that asks each question and handles all the different ways the user
might answer other than typing precisely "yes".  Or putting the choices in a
list instead of repeating the choice-asking code over and over.

-- 
Steve Willoughby    |  Using billion-dollar satellites
steve at alchemy.com   |  to hunt for Tupperware.

From alan.gauld at btinternet.com  Mon Feb 18 20:49:22 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 18 Feb 2013 19:49:22 +0000
Subject: [Tutor] following on
In-Reply-To: <CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
Message-ID: <kfu0jv$6tl$1@ger.gmane.org>

On 18/02/13 19:01, Matthew Ngaha wrote:

> initial files that come with Python? also the C code, where can i
> locate this?

Look in the python.org download page and you will find a link to the 
source for that release. For 3.3 it's here:

http://www.python.org/download/releases/3.3.0/

Look at the first 3 bullets item under the Download header.

> is C something worth learning? why is Python code
> available in C?

Because the core Python language is written in C. And many of the 
library modules have been written in C for performance reasons.
Its worth getting a basic understanding of C, enough to read
it if not enough to write it(much harder).

> seem to always point this out. Just out of curiousity what is a bag,
> stack or circular list?

Use Wikipedia, it will explain what these standard computer science 
containers are and how they work. Wikipedia is a fantastic learning tool 
for would be programmers.

> what is needed to create something like this?

Any general purpose programming language, such as Python.

> i sort of heard about a stack its a C/C++ thing i think?

No, its a computing thing. It can be done in any common
programming language.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Mon Feb 18 21:08:14 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Mon, 18 Feb 2013 20:08:14 +0000
Subject: [Tutor] if/else option for making a choice
In-Reply-To: <13859.4154421755$1361213413@news.gmane.org>
References: <13859.4154421755$1361213413@news.gmane.org>
Message-ID: <kfu1nb$h7g$1@ger.gmane.org>

On 18/02/13 18:22, Niclas Rautenhaus wrote:

> But unfortunately I am stuck with giving the user the choice to select
> an additional option!
> The extra items have got set values, but at the moment they all get
> summarized, but i want to choose.
>
> AFAIK I already tried:
>
> Print  raw_input ((?Would you like to have leather??) ? then yes or no
>
> If raw_input == yes
>
>        Print Leather (Leather) ? displaying the variables value
>

This isn't Python code and nothing like it appears in the code you 
posted below. There are several problems with the code above:

- print does not start with uppercase P.
- You have two (( at the raw_input
- if starts lower case i
- raw_input is a function so you shouldn't compare it to yes
- you don't assign the input value to a variable(although you
   do in the code below so you know you should...)
- you compare to yes but it probably should be "yes" - a string.
- The Print Leather line makes no sense at all.

If you are going to post code post real code.
Or else make it clear its pseudo code.

Now on to the code you did post...

> I hope it is clear where my problem is.

Not really.
Did you try running it? Did you get an error?
If so what?

> #Car price calculator
>
> # Set variables for additional items
> Leather = (500)

Why in ()? you don;t need them

> int (Leather)

And this does nothing - its already an int - and you ignore the result.

> Clima = (1500)
> int (Clima)
> Hifi = (250)
> int (Hifi)
> Electrics = (750)
> int (Electrics)
> Comfort = (2500)
> int (Comfort)

See above for all of these.

> print "\t\t\tWelcome to the car price calculator!"
> print "\t\t\tCredits belong to Niclas Rautenhaus"
> print "\n\nPlease enter the basic price: "
> basic = int (raw_input())

Now the last line is what your code above should have looked like.

> # Tax is a percentage of the basic car price
> Tax = basic * 5 / 100
> int (Tax)

The int() gets thrown away but thats probably good because you
don't want to lose the fractional part of the tax value, which
is what int() would do.

> print "\nAdded items:"
> # Here the user should have the possibility to pick either yes or no
> print "\n\nLeather",(Leather)
> print "Clima",(Clima)
> print "Hifi", (Hifi)
> print "Electrics", (Electrics)
 > print "Comfort", (Comfort)
 > print "Tax", (Tax)

Again you don't need those parentheses

> # Last step: the picked items shall be summarized
> print "\n\nTotal grand:", basic + Leather + Clima + Hifi \
>        + Electrics + Comfort + Tax
>
> raw_input ("\nPress the enter key to exit!")

Personally I'd have split it at the comma:

print "\n\nTotal grand:", \
        basic + Leather + Clima + Hifi + Electrics + Comfort + Tax

But that's a minor quibble.

Ironically I might also have used parentheses to group the additions, 
like so:

print "\n\nTotal grand:", (basic + Leather +
                            Clima + Hifi +
                            Electrics + Comfort +
                            Tax)

Or perhaps better still put them in a list and used sum()

items = [basic, Leather, Clima, Hifi, Electrics, Comfort, Tax]
print "\n\nTotal grand:", sum(items)

HTH

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Mon Feb 18 23:58:59 2013
From: alan.gauld at btinternet.com (ALAN GAULD)
Date: Mon, 18 Feb 2013 22:58:59 +0000 (GMT)
Subject: [Tutor] Fw:  if/else option for making a choice
In-Reply-To: <001b01ce0e1c$2e766fb0$8b634f10$@rautenhaus@gmx.de>
References: <13859.4154421755$1361213413@news.gmane.org>
	<kfu1nb$h7g$1@ger.gmane.org>
	<001b01ce0e1c$2e766fb0$8b634f10$@rautenhaus@gmx.de>
Message-ID: <1361228339.78636.YahooMailNeo@web186002.mail.ir2.yahoo.com>

forwarding to the group.
please use reply all to respond to list messages.
?
Alan Gauld
Author of the Learn To Program website
http://www.alan-g.me.uk/


----- Forwarded Message -----
>From: Niclas Rautenhaus <n.rautenhaus at gmx.de>
>To: 'Alan Gauld' <alan.gauld at btinternet.com> 
>Sent: Monday, 18 February 2013, 21:09
>Subject: Re: [Tutor] if/else option for making a choice
> 
>Thanks for your corrections :)
>
>Well, first at all I sticked to my book, minor mistakes are my bad, I tried
>to write it on my own.
>
>>This isn't Python code and nothing like it appears in the code you posted
>below. There are several problems with the code above:
>
>
>The typos are a result of my e-mail program, I do know, that these commands
>do not start with a capital letter.
>
>>- You have two (( at the raw_input
>Thanks.
>
>> raw_input is a function so you shouldn't compare it to yes
>That is not the point. I do know so. The result oft he user input (yes or
>no) shall trigger a 'yes' or a 'no" event.
>
>> you don't assign the input value to a variable(although you
>?  do in the code below so you know you should...)
>The input value is clearly working. I can type in different amounts.
>
>> The Print Leather line makes no sense at all.
>The programm should give me a hint that the 'yes' input has been recogniced.
>
>>Did you try running it? Did you get an error?
>I did'nt get any errors. The programm runs fine.
>
>Trying to clarify what I want to do:
>The programm runs fine. The items (leather, hifi and so on) have set values.
>I
>Think of customizing a car for your needs. What do you want, interior, hifi,
>engine; at each step the configurator asks you what you want to pick.
>So to put it in a nutshell, the programm should ask, whether an option is
>chosen, or not.
>
>Each optional feature (the ones with the set values) shall print a line: "Do
>you want this item?" "Yes or no" and demanding an user input.
>Referring to this user input, the programm adds (ore take it easy, prints
>the item) or skips it.
>
>I appreciate your help,
>
>Niclas
>
>
>
>
>-----Urspr?ngliche Nachricht-----
>Von: Tutor [mailto:tutor-bounces+n.rautenhaus=gmx.de at python.org] Im Auftrag
>von Alan Gauld
>Gesendet: Montag, 18. Februar 2013 21:08
>An: tutor at python.org
>Betreff: Re: [Tutor] if/else option for making a choice
>
>
>This isn't Python code and nothing like it appears in the code you posted
>below. There are several problems with the code above:
>
>- print does not start with uppercase P.
>- You have two (( at the raw_input
>- if starts lower case i
>- raw_input is a function so you shouldn't compare it to yes
>- you don't assign the input value to a variable(although you
>?  do in the code below so you know you should...)
>- you compare to yes but it probably should be "yes" - a string.
>- The Print Leather line makes no sense at all.
>
>If you are going to post code post real code.
>Or else make it clear its pseudo code.
>
>Now on to the code you did post...
>
>> I hope it is clear where my problem is.
>
>Not really.
>Did you try running it? Did you get an error?
>If so what?
>
>> #Car price calculator
>>
>> # Set variables for additional items
>> Leather = (500)
>
>Why in ()? you don;t need them
>
>> int (Leather)
>
>And this does nothing - its already an int - and you ignore the result.
>
>> Clima = (1500)
>> int (Clima)
>> Hifi = (250)
>> int (Hifi)
>> Electrics = (750)
>> int (Electrics)
>> Comfort = (2500)
>> int (Comfort)
>
>See above for all of these.
>
>> print "\t\t\tWelcome to the car price calculator!"
>> print "\t\t\tCredits belong to Niclas Rautenhaus"
>> print "\n\nPlease enter the basic price: "
>> basic = int (raw_input())
>
>Now the last line is what your code above should have looked like.
>
>> # Tax is a percentage of the basic car price Tax = basic * 5 / 100 int 
>> (Tax)
>
>The int() gets thrown away but thats probably good because you don't want to
>lose the fractional part of the tax value, which is what int() would do.
>
>> print "\nAdded items:"
>> # Here the user should have the possibility to pick either yes or no 
>> print "\n\nLeather",(Leather) print "Clima",(Clima) print "Hifi", 
>> (Hifi) print "Electrics", (Electrics)
>> print "Comfort", (Comfort)
>> print "Tax", (Tax)
>
>Again you don't need those parentheses
>
>> # Last step: the picked items shall be summarized print "\n\nTotal 
>> grand:", basic + Leather + Clima + Hifi \
>>? ? ? ? + Electrics + Comfort + Tax
>>
>> raw_input ("\nPress the enter key to exit!")
>
>Personally I'd have split it at the comma:
>
>print "\n\nTotal grand:", \
>? ? ? ? basic + Leather + Clima + Hifi + Electrics + Comfort + Tax
>
>But that's a minor quibble.
>
>Ironically I might also have used parentheses to group the additions, like
>so:
>
>print "\n\nTotal grand:", (basic + Leather +
>? ? ? ? ? ? ? ? ? ? ? ? ? ? Clima + Hifi +
>? ? ? ? ? ? ? ? ? ? ? ? ? ? Electrics + Comfort +
>? ? ? ? ? ? ? ? ? ? ? ? ? ? Tax)
>
>Or perhaps better still put them in a list and used sum()
>
>items = [basic, Leather, Clima, Hifi, Electrics, Comfort, Tax] print
>"\n\nTotal grand:", sum(items)
>
>HTH
>
>--
>Alan G
>Author of the Learn to Program web site
>http://www.alan-g.me.uk/
>
>_______________________________________________
>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/20130218/abf88e8b/attachment-0001.html>

From wescpy at gmail.com  Tue Feb 19 00:48:08 2013
From: wescpy at gmail.com (wesley chun)
Date: Mon, 18 Feb 2013 15:48:08 -0800
Subject: [Tutor] if/else option for making a choice
In-Reply-To: <512277d4.68acc20a.6047.5061SMTPIN_ADDED_BROKEN@mx.google.com>
References: <512277d4.68acc20a.6047.5061SMTPIN_ADDED_BROKEN@mx.google.com>
Message-ID: <CAB6eaA4qiwDKhnYZ=971pxbd-8FqFLyyyO4wBr9enAYBodUPCA@mail.gmail.com>

On Mon, Feb 18, 2013 at 10:22 AM, Niclas Rautenhaus <n.rautenhaus at gmx.de>wrote:

> Hello folks,****
>
> ** **
>
> I would be very pleased if someone is able to help me.****
>
> I wrote a small programm, to calculate the grand total for a car.****
>
> A basic price can be entered. Given that basic price, a tax peercentage is
> calculated and added tot he grand total.****
>
>
> But unfortunately I am stuck with giving the user the choice to select an
> additional option!
> The extra items have got set values, but at the moment they all get
> summarized, but i want to choose.
>
> **
>


greetings Niclas, and welcome to Python! while i'll let the others comment
on your code specifically, i can give some overall suggestions/guidance.

you're trying to create an overall price calculator correct? while it's
straightforward providing a base price, the complexity in your app (and
real life) is the set of options that customers can choose from.

in your situation, i think it would be more "Pythonic" to maintain the
extras as a vector of options and prices. you then loop through those,
prompting the user to enter Yes or No, and add either the cost or zero,
respectively. that will help keep your code less complex as well. you would
just be maintaining a running total until the user is done with all their
selections.

good luck!
-- wesley
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"A computer never does what you want... only what you tell it."
    +wesley chun : wescpy at gmail : @wescpy
    Python training & consulting : http://CyberwebConsulting.com
    "Core Python" books : http://CorePython.com
    Python blog: http://wescpy.blogspot.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130218/da2151ab/attachment.html>

From akleider at sonic.net  Tue Feb 19 01:01:02 2013
From: akleider at sonic.net (akleider at sonic.net)
Date: Mon, 18 Feb 2013 16:01:02 -0800
Subject: [Tutor] if/else option for making a choice
In-Reply-To: <CAB6eaA4qiwDKhnYZ=971pxbd-8FqFLyyyO4wBr9enAYBodUPCA@mail.gmail.com>
References: <512277d4.68acc20a.6047.5061SMTPIN_ADDED_BROKEN@mx.google.com>
	<CAB6eaA4qiwDKhnYZ=971pxbd-8FqFLyyyO4wBr9enAYBodUPCA@mail.gmail.com>
Message-ID: <b374de4f8a6b05ccbb8126d89f0f97d8.squirrel@webmail.sonic.net>

> On Mon, Feb 18, 2013 at 10:22 AM, Niclas Rautenhaus
> <n.rautenhaus at gmx.de>wrote:
>
>> Hello folks,****
>>
>> ** **
>>
>> I would be very pleased if someone is able to help me.****
>>
>> I wrote a small programm, to calculate the grand total for a car.****
>>
>> A basic price can be entered. Given that basic price, a tax peercentage
>> is
>> calculated and added tot he grand total.****
>>
>>
>> But unfortunately I am stuck with giving the user the choice to select
>> an
>> additional option!
>> The extra items have got set values, but at the moment they all get
>> summarized, but i want to choose.
>>
>> **
>>
>
>
> greetings Niclas, and welcome to Python! while i'll let the others comment
> on your code specifically, i can give some overall suggestions/guidance.
>
> you're trying to create an overall price calculator correct? while it's
> straightforward providing a base price, the complexity in your app (and
> real life) is the set of options that customers can choose from.
>
> in your situation, i think it would be more "Pythonic" to maintain the
> extras as a vector of options and prices. you then loop through those,
> prompting the user to enter Yes or No, and add either the cost or zero,
> respectively. that will help keep your code less complex as well. you
> would
> just be maintaining a running total until the user is done with all their
> selections.
>
> good luck!
> -- wesley

I'd be interested in knowing exactly what you mean by the term "vector" in
the above discussion.  When I saw the problem I thought dict would serve
as in

options = { "leather" : 1600, "alloy_wheels" : 1200,
# and so on
}

Comments?



From wescpy at gmail.com  Tue Feb 19 01:34:47 2013
From: wescpy at gmail.com (wesley chun)
Date: Mon, 18 Feb 2013 16:34:47 -0800
Subject: [Tutor] if/else option for making a choice
In-Reply-To: <b374de4f8a6b05ccbb8126d89f0f97d8.squirrel@webmail.sonic.net>
References: <512277d4.68acc20a.6047.5061SMTPIN_ADDED_BROKEN@mx.google.com>
	<CAB6eaA4qiwDKhnYZ=971pxbd-8FqFLyyyO4wBr9enAYBodUPCA@mail.gmail.com>
	<b374de4f8a6b05ccbb8126d89f0f97d8.squirrel@webmail.sonic.net>
Message-ID: <CAB6eaA7erZARe1u5DDRKe4aF=4_NO4L0BCHivTYhkzqmpO4=nA@mail.gmail.com>

> in your situation, i think it would be more "Pythonic" to maintain the

> > extras as a vector of options and prices. you then loop through those,
> > prompting the user to enter Yes or No, and add either the cost or zero,
> > respectively. that will help keep your code less complex as well. you
> > would
> > just be maintaining a running total until the user is done with all their
> > selections.
> >
> > good luck!
> > -- wesley
>
> I'd be interested in knowing exactly what you mean by the term "vector" in
> the above discussion.  When I saw the problem I thought dict would serve
> as in
>
> options = { "leather" : 1600, "alloy_wheels" : 1200,
> # and so on
> }



perfectly fine if order doesn't matter. if it does, then a tuple will serve
a similar purposes however, it's easy to move back-n-forth between either
via dict(), dict.items(), iter/zip(), etc.

cheers,
-- wesley

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"A computer never does what you want... only what you tell it."
    +wesley chun : wescpy at gmail : @wescpy
    Python training & consulting : http://CyberwebConsulting.com
    "Core Python" books : http://CorePython.com
    Python blog: http://wescpy.blogspot.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130218/624475ad/attachment.html>

From davea at davea.name  Tue Feb 19 02:10:12 2013
From: davea at davea.name (Dave Angel)
Date: Mon, 18 Feb 2013 20:10:12 -0500
Subject: [Tutor] following on
In-Reply-To: <CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
Message-ID: <5122D0F4.5000305@davea.name>

On 02/18/2013 02:01 PM, Matthew Ngaha wrote:
>>>    <snip>
>>
> i sort of heard about a stack its a C/C++ thing i think?
>

A stack is fundamental to modern programming languages.  The only two 
machines I've used that didn't have a stack implemented at the machine 
level were the CDC 6000 series, and the IBM 360.  Both products of the 60's.

Processors like the Intel Pentium series have a stack microcoded into 
their lowest level instruction set.  When the processor itself is 
calling a subroutine, the current address is pushed onto the stack, and 
the return instruction pops it back off and jumps there.  Other 
instructions for manipulating it exist at the same level.  Typically all 
local variables in a function are stored in the current stack frame. 
The stack makes recursive functions practical, at a minimum.  Having 
multiple stacks makes multithreading practical as well.

Recursion and multithreading was very tricky on the CDC, since it stored 
return addresses right into the running code.

Usually a programming language will provide a stack-like data structure, 
for manipulating data that needs similar behavior.


-- 
DaveA

From robert.sjoblom at gmail.com  Tue Feb 19 02:46:42 2013
From: robert.sjoblom at gmail.com (Robert Sjoblom)
Date: Tue, 19 Feb 2013 02:46:42 +0100
Subject: [Tutor] following on
In-Reply-To: <5122D0F4.5000305@davea.name>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
	<5122D0F4.5000305@davea.name>
Message-ID: <CAJKU7g3hm0OHDF6n1Q6u3aZG2N+=RmZ9XLDPXQOSqqsU866piw@mail.gmail.com>

>> i sort of heard about a stack its a C/C++ thing i think?
>
> A stack is fundamental to modern programming languages.  The only two
> machines I've used that didn't have a stack implemented at the machine level
> were the CDC 6000 series, and the IBM 360.  Both products of the 60's.

A while back, while researching something else entirely, I came upon a
useful article explaining recursion. In it he briefly touches on how a
stack functions, and the explanation is well worth reading (as is the
article!). You can find it here:
http://inventwithpython.com/blog/2011/08/11/recursion-explained-with-the-flood-fill-algorithm-and-zombies-and-cats/
If you just want to read the stack explanation, scroll down to
"Recursion is Just a Fancy Way of Using a Stack"

-- 
best regards,
Robert S.

From steve at pearwood.info  Tue Feb 19 03:15:00 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Tue, 19 Feb 2013 13:15:00 +1100
Subject: [Tutor] following on
In-Reply-To: <CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
Message-ID: <5122E024.3080404@pearwood.info>

On 19/02/13 06:01, Matthew Ngaha wrote:
>>> understanding of how everything works.
>>
>> Use it., Experiment with it. Break it.
>> Thats the best way. Read the source code its all available in
>> Python or C.
>>
>
> Hey can you please tell me which source code youre referring too? The
> initial files that come with Python? also the C code, where can i
> locate this? is C something worth learning? why is Python code
> available in C?


If you want to learn Python programming, read other Python programs.

You will find many Python programs, of greatly variable quality, here:

http://code.activestate.com/recipes/langs/python/

You might also like to read this book:

http://shop.oreilly.com/product/9780596007973.do

You can see the source code used by Python modules by searching for them on your computer, then opening them in a text editor. But beware that you don't accidentally modify them, because you may break your Python installation.

Another alternative is to read the source on-line. Many pages in the Python docs link directly to the source code. E.g. this page:

http://docs.python.org/2/library/string.html

links directly to the source code:

http://hg.python.org/cpython/file/2.7/Lib/string.py

You can learn a lot from the source code of Python modules.


The source code of the Python interpreter, on the other hand, is much, much more complicated. You will probably have a lot of trouble with it, since you are unfamiliar with C, and unfamiliar with the internal C libraries used in the interpreter. But if you are feeling masochistic and want to give it a go, you will find the source code here:

http://hg.python.org/cpython

Click the "Browse" link to get to the latest version.

Many people will advise that learning C is a good idea. I understand their arguments, but as an old curmudgeon I can say I don't like C and I think the world would be much better without it :-)

The Python interpreter may be written in many different languages. C is only the most common language. The "Big Four" Python interpreters are written in four different languages:

CPython (what you probably think of when you say "Python"): C
Jython: Java
IronPython: Microsoft .Net CLR
PyPy: RPython ("Restricted Python")

but there are others:

CLPython: Common Lisp
Burp and Hope: Haskell
Nuitka: C++
Pynie: Parrot
Vyper: Ocaml
Skulpt: Javascript

although some of these may be experimental, obsolete or abandoned.



> yes i will try not to reinvent the wheel, a lot of tutorials ive read
> seem to always point this out. Just out of curiousity what is a bag,
> stack or circular list? what is needed to create something like this?
> i sort of heard about a stack its a C/C++ thing i think?


You can read about data structures like stack, bag (multiset) and circular list here:

http://en.wikipedia.org/wiki/List_of_data_structures



-- 
Steven

From chigga101 at gmail.com  Tue Feb 19 03:54:29 2013
From: chigga101 at gmail.com (Matthew Ngaha)
Date: Tue, 19 Feb 2013 02:54:29 +0000
Subject: [Tutor] following on
In-Reply-To: <5122E024.3080404@pearwood.info>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
	<5122E024.3080404@pearwood.info>
Message-ID: <CACzNyA3kCR-Th-8bngtZgk7C4drPeCBm0=KvvZ4pfUSb_EPmtg@mail.gmail.com>

Hey, a Big thanks to everyone that has offered their input. I really
appreciate it. Also thanks for all the additional links, i will
definately start to read up on data structures , source code and
everything else that was suggested

From sunil.techspk at gmail.com  Tue Feb 19 08:30:40 2013
From: sunil.techspk at gmail.com (Sunil Tech)
Date: Tue, 19 Feb 2013 13:00:40 +0530
Subject: [Tutor] Query String
Message-ID: <CAExJxTOBv1fNp4U=9mex5RB6sM7HMXsb7zPBQt6RK6A5xR3Lzg@mail.gmail.com>

Hi All,

I thank you all, for all the responses.
& teaching us to learn Python.

Here i request, can you tell me what is Query String with some examples?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130219/10b418e2/attachment.html>

From alan.gauld at btinternet.com  Tue Feb 19 10:14:45 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 19 Feb 2013 09:14:45 +0000
Subject: [Tutor] Query String
In-Reply-To: <CAExJxTOBv1fNp4U=9mex5RB6sM7HMXsb7zPBQt6RK6A5xR3Lzg@mail.gmail.com>
References: <CAExJxTOBv1fNp4U=9mex5RB6sM7HMXsb7zPBQt6RK6A5xR3Lzg@mail.gmail.com>
Message-ID: <kfvfq2$gfb$1@ger.gmane.org>

On 19/02/13 07:30, Sunil Tech wrote:
>
> Here i request, can you tell me what is Query String with some examples?

It depends on the context but I suspect you mean in the context of a web 
app? In that case a query string is the bit at the end of a URL that 
includes the search parameters etc. Thus if I do a search on Google for 
"query string" the url used is:

https://www.google.co.uk/#hl=en&sugexp=les%3B&gs_rn=3&gs_ri=psy-
ab&tok=XeR8I7yoZ93k_zpsfFWQeg&cp=8&gs_id=i7&xhr=t&q=query+string&
es_nrs=true&pf=p&tbo=d&biw=1375&bih=897&sclient=psy-ab&oq=query+st&
gs_l=&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bvm=bv.42553238,d.d2k&
fp=e58955d3a8f3f3a1

And everything after the uk/ is the query string.

That particular search brings back lots of links about query strings.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From sunil.techspk at gmail.com  Tue Feb 19 11:53:37 2013
From: sunil.techspk at gmail.com (Sunil Tech)
Date: Tue, 19 Feb 2013 16:23:37 +0530
Subject: [Tutor] Query String
In-Reply-To: <kfvfq2$gfb$1@ger.gmane.org>
References: <CAExJxTOBv1fNp4U=9mex5RB6sM7HMXsb7zPBQt6RK6A5xR3Lzg@mail.gmail.com>
	<kfvfq2$gfb$1@ger.gmane.org>
Message-ID: <CAExJxTMADGATL+vmwkas+M=tPBaFaUbYHrjS63cTFTEXMS8B1Q@mail.gmail.com>

Thank you Alan.





On Tue, Feb 19, 2013 at 2:44 PM, Alan Gauld <alan.gauld at btinternet.com>wrote:

> On 19/02/13 07:30, Sunil Tech wrote:
>
>>
>> Here i request, can you tell me what is Query String with some examples?
>>
>
> It depends on the context but I suspect you mean in the context of a web
> app? In that case a query string is the bit at the end of a URL that
> includes the search parameters etc. Thus if I do a search on Google for
> "query string" the url used is:
>
> https://www.google.co.uk/#hl=**en&sugexp=les%3B&gs_rn=3&gs_**ri=psy-<https://www.google.co.uk/#hl=en&sugexp=les%3B&gs_rn=3&gs_ri=psy->
> ab&tok=XeR8I7yoZ93k_zpsfFWQeg&**cp=8&gs_id=i7&xhr=t&q=query+**string&
> es_nrs=true&pf=p&tbo=d&biw=**1375&bih=897&sclient=psy-ab&**oq=query+st&
> gs_l=&pbx=1&bav=on.2,or.r_gc.**r_pw.r_cp.r_qf.&bvm=bv.**42553238,d.d2k&
> fp=e58955d3a8f3f3a1
>
> And everything after the uk/ is the query string.
>
> That particular search brings back lots of links about query strings.
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130219/4205dcb8/attachment.html>

From eryksun at gmail.com  Tue Feb 19 12:35:24 2013
From: eryksun at gmail.com (eryksun)
Date: Tue, 19 Feb 2013 06:35:24 -0500
Subject: [Tutor] Query String
In-Reply-To: <kfvfq2$gfb$1@ger.gmane.org>
References: <CAExJxTOBv1fNp4U=9mex5RB6sM7HMXsb7zPBQt6RK6A5xR3Lzg@mail.gmail.com>
	<kfvfq2$gfb$1@ger.gmane.org>
Message-ID: <CACL+1asKLy1z-khsAg97JXp-gP5-ZriyY8srK0em7XCijjCLjg@mail.gmail.com>

On Tue, Feb 19, 2013 at 4:14 AM, Alan Gauld <alan.gauld at btinternet.com> wrote:
>
> https://www.google.co.uk/#hl=en

Just to clarify, using a fragment (#) like that isn't a standard
query. It's a JavaScript trick for manipulating browser history based
on location.hash, so one can do AJAX page refreshes without breaking
the back button. You can see the actual query URL ('.../search?hl=en')
if you view the background GET (e.g. in the Firefox web console).

urlparse.urlsplit parses 'hl=en' as the fragment in this case:

    >>> urlparse.urlsplit('https://www.google.co.uk/#hl=en')
    SplitResult(scheme='https', netloc='www.google.co.uk', path='/', query='',
    fragment='hl=en')

From sydney.shall at kcl.ac.uk  Tue Feb 19 12:27:43 2013
From: sydney.shall at kcl.ac.uk (Shall, Sydney)
Date: Tue, 19 Feb 2013 11:27:43 +0000
Subject: [Tutor] following on
In-Reply-To: <5122E024.3080404@pearwood.info>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
	<5122E024.3080404@pearwood.info>
Message-ID: <512361AF.6010408@kcl.ac.uk>

On 19/02/2013 02:15, Steven D'Aprano wrote:hon modules.
>
>
> Many people will advise that learning C is a good idea. I understand 
> their arguments, but as an old curmudgeon I can say I don't like C and 
> I think the world would be much better without it :-)
>

Does this comment extend to C++? :-)

Could the experts, please, recommend a beginner's book to learn the 
principles of good programming?

Ta muchly,

Sydney

-- 
Professor Sydney Shall,
Department of Haematological Medicine,
King's College London,
Medical School,
123 Coldharbour Lane,
LONDON SE5 9NU,
Tel & Fax: +44 (0)207 848 5902,
E-Mail: sydney.shall,
[correspondents outside the College should add; @kcl.ac.uk]
www.kcl.ac.uk



From ghasemmg01 at leedslearning.net  Tue Feb 19 13:36:55 2013
From: ghasemmg01 at leedslearning.net (Ghadir Ghasemi)
Date: Tue, 19 Feb 2013 12:36:55 +0000
Subject: [Tutor] help with storing money variable
Message-ID: <010FB2F3C55002408EE1404538D1B6AE034F3C7E126F@LLN-SPP-ES-04.user01.lln.local>

Hi guys, Iam halfway through my vending machine program that I started earlier. I ran into a problem. When the user inserts some money, The money variable is not stored for until the user buys an item. So what happens is when the users inserts some coins and then trys to buy an item the money they inserted is not stored till they buy item.Can you tell me how this can be overcome, so that when the user trys to buy an item,the vending machine correctly looks at the amount of money they have and vends the item depending on the amound of money they have.  Here is the code:



def printMenu():
    print ("|__________________________|")
    print ("|Menu:                     |")
    print ("|--------------------------|")
    print ("|  1. Display all Items    |")
    print ("|  2. Insert 10p           |")
    print ("|  3. Insert 20p           |")
    print ("|  4. Insert 50p           |")
    print ("|  5. Insert ?1            |")
    print ("|  6. Buy an item          |")
    print ("|  7. Print Current Amount |")
    print ("|  8. Exit                 |")
    print ("|__________________________|")

while True:
    printMenu()
    choice = input("enter an option from the menu: ")



    if choice == '1':
        print("========================================")
        print("         A          B            C    ")
        print("  1.[ Vimtos ] [ Chewits ] [ Mars Bar ]")
        print("    [  50p   ] [  40p    ] [  50p     ]")
        print("========================================")
        print("  2.[ Doritos ] [ Mentos ]")
        print("    [  60p    ] [  50p   ]")
        print("========================================")



    elif choice == '2':
        money = 0
        number = int(input("how many 10p: "))
        money += number * 1/10
        print("your newly updated credit is ?" + str(money) + "0")


    elif choice == '3':
        money = 0
        number2  = int(input("how many 20p: "))
        money += number2 * 2/10
        print("your newly updated credit is ?" + str(money) + "0")


    elif choice == '4':
        money = 0
        number3 = int(input("how many 50p: "))
        money += number3 * 5/10
        print("your newly updated credit is ?" + str(money) + "0")


    elif choice == '5':
        money = 0
        number4 = int(input("how many ?1: "))
        money += number4 * 1
        print("your newly updated credit is ?" + str(money))
    


    elif choice == '6':
        code = input("Enter the code of item you want to buy e.g. for Vimtos = a1: ")
        money = 0
        pricea1 = 0.50
        pricea2 = 0.60
        priceb1 = 0.40
        priceb2 = 0.50
        pricec1 = 0.50

    if code == 'a1':
        
        if money > pricea1:
            print("you have bought a packet of Vimtos and your newly updated balance is " + str(money - pricea1))
            money -= pricea1
        else:
            print("you can't buy that item as your credit is too low")

    if code == 'a2':
        if money > pricea2:
            print("you have bought a packet of Doritos and your newly updated balance is" + str(money - pricea2))
            money -= pricea2
        else:
            print("you can't buy that item as your credit is too low")

    if code == 'b1':
        if money > priceb1:
            print("you have bought a packet of Chewits and your newly updated balance is" + str(money - priceb1))
            money -= priceb1
        else:
            print("you can't buy that item as your credit is too low")

    if code == 'b2':
        if money > priceb2:
            print("you have bought a packet of Mentos and your newly updated balance is" + str(money - pricea2))
            money -= priceb2
        else:
            print("you can't buy that item as your credit is too low")

    if code == 'c1':
        if money > pricec1:
            print("you have bought a Mars Bar and your newly updated balance is" + str(money - pricea2))
            money -= priceb2
        else:
            print("you can't buy that item as your credit is too low")

From davea at davea.name  Tue Feb 19 13:51:28 2013
From: davea at davea.name (Dave Angel)
Date: Tue, 19 Feb 2013 07:51:28 -0500
Subject: [Tutor] help with storing money variable
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE034F3C7E126F@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE034F3C7E126F@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <51237550.8050001@davea.name>

On 02/19/2013 07:36 AM, Ghadir Ghasemi wrote:
> Hi guys, Iam halfway through my vending machine program that I started earlier. I ran into a problem. When the user inserts some money, The money variable is not stored for until the user buys an item. So what happens is when the users inserts some coins and then trys to buy an item the money they inserted is not stored till they buy item.Can you tell me how this can be overcome, so that when the user trys to buy an item,the vending machine correctly looks at the amount of money they have and vends the item depending on the amound of money they have.  Here is the code:
>
>
>
> def printMenu():
>      print ("|__________________________|")
>      print ("|Menu:                     |")
>      print ("|--------------------------|")
>      print ("|  1. Display all Items    |")
>      print ("|  2. Insert 10p           |")
>      print ("|  3. Insert 20p           |")
>      print ("|  4. Insert 50p           |")
>      print ("|  5. Insert ?1            |")
>      print ("|  6. Buy an item          |")
>      print ("|  7. Print Current Amount |")
>      print ("|  8. Exit                 |")
>      print ("|__________________________|")
>
> while True:
>      printMenu()
>      choice = input("enter an option from the menu: ")
>
>
>
>      if choice == '1':
>          print("========================================")
>          print("         A          B            C    ")
>          print("  1.[ Vimtos ] [ Chewits ] [ Mars Bar ]")
>          print("    [  50p   ] [  40p    ] [  50p     ]")
>          print("========================================")
>          print("  2.[ Doritos ] [ Mentos ]")
>          print("    [  60p    ] [  50p   ]")
>          print("========================================")
>
>
>
>      elif choice == '2':
>          money = 0
>          number = int(input("how many 10p: "))
>          money += number * 1/10
>          print("your newly updated credit is ?" + str(money) + "0")
>
>
>      elif choice == '3':
>          money = 0
>          number2  = int(input("how many 20p: "))
>          money += number2 * 2/10
>          print("your newly updated credit is ?" + str(money) + "0")
>
>
>      elif choice == '4':
>          money = 0
>          number3 = int(input("how many 50p: "))
>          money += number3 * 5/10
>          print("your newly updated credit is ?" + str(money) + "0")
>
>
>      elif choice == '5':
>          money = 0
>          number4 = int(input("how many ?1: "))
>          money += number4 * 1
>          print("your newly updated credit is ?" + str(money))
>
>
>
>      elif choice == '6':
>          code = input("Enter the code of item you want to buy e.g. for Vimtos = a1: ")
>          money = 0
>          pricea1 = 0.50
>          pricea2 = 0.60
>          priceb1 = 0.40
>          priceb2 = 0.50
>          pricec1 = 0.50
>
>      if code == 'a1':
>
>          if money > pricea1:
>              print("you have bought a packet of Vimtos and your newly updated balance is " + str(money - pricea1))
>              money -= pricea1
>          else:
>              print("you can't buy that item as your credit is too low")
>
>      if code == 'a2':
>          if money > pricea2:
>              print("you have bought a packet of Doritos and your newly updated balance is" + str(money - pricea2))
>              money -= pricea2
>          else:
>              print("you can't buy that item as your credit is too low")
>
>      if code == 'b1':
>          if money > priceb1:
>              print("you have bought a packet of Chewits and your newly updated balance is" + str(money - priceb1))
>              money -= priceb1
>          else:
>              print("you can't buy that item as your credit is too low")
>
>      if code == 'b2':
>          if money > priceb2:
>              print("you have bought a packet of Mentos and your newly updated balance is" + str(money - pricea2))
>              money -= priceb2
>          else:
>              print("you can't buy that item as your credit is too low")
>
>      if code == 'c1':
>          if money > pricec1:
>              print("you have bought a Mars Bar and your newly updated balance is" + str(money - pricea2))
>              money -= priceb2
>          else:
>              print("you can't buy that item as your credit is too low")

How did you conclude that the money they deposit isn't "stored" till 
they try to buy something?  Are you really saying it isn't visible to 
the user?  Could it be because you forgot the
         elif code == "7"

case?  (And the "8" one as well.)

The other problem I see is that many of those choices zero the value 
bound to "money".  That should be zeroed before the while loop, not 
inside any place somebody deposits something.


-- 
DaveA

From robert.sjoblom at gmail.com  Tue Feb 19 14:01:43 2013
From: robert.sjoblom at gmail.com (Robert Sjoblom)
Date: Tue, 19 Feb 2013 14:01:43 +0100
Subject: [Tutor] following on
In-Reply-To: <512361AF.6010408@kcl.ac.uk>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
	<5122E024.3080404@pearwood.info> <512361AF.6010408@kcl.ac.uk>
Message-ID: <CAJKU7g3EFvJG-25Bn7XJr0eLpw+-_qvweoDzy0j-gVua5oByPg@mail.gmail.com>

> Could the experts, please, recommend a beginner's book to learn the
> principles of good programming?

I don't know about expert, but I found the Head First Lab's approach
to be really good. The Python book is structured like so:
-Lists introduction
-(PyPi)/creating modules -- this I hope has been changed in future
editions of the book, because PyPi now has a test server for those
learning to use it, instead of people uploading to the official PyPi
server (if you've ever wondered why there are so many modules for
printing lists within lists (nester.py)).
-Error handling
-Saving data
-Work on data
-OOP
-Web development
-Mobile App development
-Handling input
-Scaling your webapp (which you built in the web development chapter)
-Handling complexity

Each chapter consists of a challenge that you'll work; the work on
data one has a "Coach Kelly" giving you his files on runner times,
wanting it formatted. So first you'll learn to read it in, sanitize it
and everything, and after that you move on to OOP design, where you
create a new class (let's see if I recall it):
class Athlete:
    def __init__(self, name, dob=None, times=[]):
        self.name = name
        self.dob = dob
        self.times = times

    def add_time(self, time):
        self.times.append(time)

    def add_times(self, times):
        self.times.extend(times)

After you've designed the class yourself they go on to mention that
instead of building functionality that already exists --
self.times.extend(times) -- it's probably better to create a class
that inherits from list, like so:
class AthleteList(list):
    def __init__(self, name, dob=None, times=[]):
        list.__init__([])
        self.name = name
        self.dob = dob
        self.extend(times)

In each chapter they go through various approaches on things that crop
up; for error handling it's the add extra logic/ask forgiveness, for
classes it's custom class or inherited class, for saving data it's
custom code vs off the shelf solutions, why you want to create
functions instead of duplicate code and so on. It's well structured,
readable, and have quite enjoyable challenges (compared to the usual
"Hello World" approach that many other books do). So yes, they teach
you Python, but they also teach you the principles of good
programming. I recommend it to anyone who wants to learn Python, but
there are probably better books for *specifically* programming
principles -- this book is more of a bundled deal.

-- 
best regards,
Robert S.

From alan.gauld at btinternet.com  Tue Feb 19 19:55:23 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 19 Feb 2013 18:55:23 +0000
Subject: [Tutor] Query String
In-Reply-To: <CACL+1asKLy1z-khsAg97JXp-gP5-ZriyY8srK0em7XCijjCLjg@mail.gmail.com>
References: <CAExJxTOBv1fNp4U=9mex5RB6sM7HMXsb7zPBQt6RK6A5xR3Lzg@mail.gmail.com>
	<kfvfq2$gfb$1@ger.gmane.org>
	<CACL+1asKLy1z-khsAg97JXp-gP5-ZriyY8srK0em7XCijjCLjg@mail.gmail.com>
Message-ID: <kg0hqo$bcl$1@ger.gmane.org>

On 19/02/13 11:35, eryksun wrote:
> On Tue, Feb 19, 2013 at 4:14 AM, Alan Gauld <alan.gauld at btinternet.com> wrote:
>>
>> https://www.google.co.uk/#hl=en
>
> Just to clarify, using a fragment (#) like that isn't a standard
> query.

Yes I noticed the anomaly but I chose that particular query for a reason :-)


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Tue Feb 19 19:58:56 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 19 Feb 2013 18:58:56 +0000
Subject: [Tutor] help with storing money variable
In-Reply-To: <010FB2F3C55002408EE1404538D1B6AE034F3C7E126F@LLN-SPP-ES-04.user01.lln.local>
References: <010FB2F3C55002408EE1404538D1B6AE034F3C7E126F@LLN-SPP-ES-04.user01.lln.local>
Message-ID: <kg0i1d$e1e$1@ger.gmane.org>

On 19/02/13 12:36, Ghadir Ghasemi wrote:

> def printMenu():
>      print ("|__________________________|")
>      print ("|  2. Insert 10p           |")
>      print ("|  3. Insert 20p           |")
>      print ("|  4. Insert 50p           |")
>      print ("|__________________________|")
>
> while True:
>      elif choice == '2':
>          money = 0
>          number = int(input("how many 10p: "))
>          money += number * 1/10
>      elif choice == '3':
>          money = 0
>          number2  = int(input("how many 20p: "))
>          money += number2 * 2/10
>      elif choice == '4':
>          money = 0
>          number3 = int(input("how many 50p: "))
>          money += number3 * 5/10

In each case you start by zeroing money thus losing any credit they
had built up. If a real machine did that to me I'd me mighty annoyed.

Just a thought...

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From alan.gauld at btinternet.com  Tue Feb 19 20:03:06 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 19 Feb 2013 19:03:06 +0000
Subject: [Tutor] following on
In-Reply-To: <512361AF.6010408@kcl.ac.uk>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
	<5122E024.3080404@pearwood.info> <512361AF.6010408@kcl.ac.uk>
Message-ID: <kg0i97$gf2$1@ger.gmane.org>

On 19/02/13 11:27, Shall, Sydney wrote:

> Could the experts, please, recommend a beginner's book to learn the
> principles of good programming?

Thats exactly what my book tries to do although it focuses on Python. 
But its really more about the general principles than learning the 
idioms of the language.

The bad news is that it's now 12 years old and the language has moved 
on, although most (all?) of the code will still work in Python 2.7. 
Should be available through your local library or cheap on Amazon 
marketplace...

The good news is that an updated and extended version is on the
web (see the.sig) and is free! :-)

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From dyoo at hashcollision.org  Tue Feb 19 22:18:59 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Tue, 19 Feb 2013 14:18:59 -0700
Subject: [Tutor] following on
In-Reply-To: <512361AF.6010408@kcl.ac.uk>
References: <CACzNyA0OV1jz4EeFuZeujnJBfRngd+iG4gS_2GTwZu5P6H_rNg@mail.gmail.com>
	<kftrhf$l9n$1@ger.gmane.org>
	<CACzNyA1UErKsMd7vPiB2B1Mn4vxNAn9=nhwu+Fny1qW=DV7xzw@mail.gmail.com>
	<5122E024.3080404@pearwood.info> <512361AF.6010408@kcl.ac.uk>
Message-ID: <CAGZAPF6zrQOUOa2XAMCAqWuJWv2GQnwvMJP9cy3Ar9baA38Kag@mail.gmail.com>

> Does this comment extend to C++? :-)
>
> Could the experts, please, recommend a beginner's book to learn the
> principles of good programming?


I'm partial to How to Design Programs as a beginner's textbook:

    http://www.ccs.neu.edu/home/matthias/HtDP2e/

because it emphasizes a systematic approach to designing programs.
Basically, it's a Polya's "How to Solve It" for programmers, with an
expanded treatment on how data structures inform the shape of the
functions that work on that data.

From fomcl at yahoo.com  Wed Feb 20 11:53:58 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Wed, 20 Feb 2013 02:53:58 -0800 (PST)
Subject: [Tutor] locale.set/getlocale asymmetry
Message-ID: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>

Hi,
?
There?is an?asymmetry in getlocale and setlocale. What is returned by getlocale cannot be used
as argument for setlocale. It is important to mention that this is on Windows 7.? Setlocale appears 
to use a Linux/Posix locale specification (yaay, harmony!), but, disappointingly, getlocale still returns 
the windows-specific locale specification.?Why is this? Is this some historical anomaly?
?
Background: I occasionally need to use a french locale because that locale uses a space as a thousand separator.
So I'd like to temporarily change that,?then fire up Excel, which hopefully ensures the numbers are displayed
as desired.
?
#Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
>>> import platform
>>> platform.platform()?
'Windows-7-6.1.7601-SP1'
>>> import locale
>>> locale.getlocale()
('Dutch_Netherlands', '1252')
>>> locale.setlocale(locale.LC_ALL, "French_France")
'French_France.1252'>>> locale.getlocale()
('fr_FR', 'cp1252')
>>> locale.setlocale(locale.LC_ALL, ('fr_FR', 'cp1252'))
Traceback (most recent call last):
? File "<pyshell#10>", line 1, in <module>
??? locale.setlocale(locale.LC_ALL, ('fr_FR', 'cp1252'))
? File "C:\Python27\lib\locale.py", line 531, in setlocale
??? return _setlocale(category, locale)
Error: unsupported locale setting

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 fomcl at yahoo.com  Wed Feb 20 11:55:59 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Wed, 20 Feb 2013 02:55:59 -0800 (PST)
Subject: [Tutor] Python needs your help -- trademark under attack -->
	PUT THIS ON FB, LINKEDIN!!
References: <511D5E02.7090105@pearwood.info> 
Message-ID: <1361357759.40683.YahooMailNeo@web163804.mail.gq1.yahoo.com>

> The Python Software Foundation is the organisation which protects and manages 
> the "boring" bits of keeping a big open source project alive: the 
> legal and contractual parts, funding for projects, trademarks and copyrights.
> 
> If you are based in Europe, or know somebody who uses Python in Europe, the PSF 
> needs your help.
> 
> There is a company in the UK who has applied to trademark the name 
> "Python" and are claiming the *exclusive* right to use the word 
> "Python" for software, servers, and web services over the entire 
> European Union.
> 
> You can read more about this here:
> 
> http://pyfound.blogspot.com/2013/02/python-trademark-at-risk-in-europe-we.html
> 
> If you have documentation of European user groups, trade associations, books, 
> conferences, scans of job advertisements for Python programmers, software that 
> uses some variation of "Python" in the name, etc. your evidence will 
> be helpful in defeating this attempted grab of the Python name.
> 
> You can also testify to the fact that when you read or hear of the name 
> "Python" in relation to computers and the Internet, you think of 
> Python the programming language.

Thanks for posting this. $@#@, first the attack on PyPi, now this!
Would also be good to disseminate this message through Facebook, LinkedIn etc.
I'll try and get a letter from my company. This sucks.
?
Albert-Jan


From eryksun at gmail.com  Wed Feb 20 13:37:14 2013
From: eryksun at gmail.com (eryksun)
Date: Wed, 20 Feb 2013 07:37:14 -0500
Subject: [Tutor] locale.set/getlocale asymmetry
In-Reply-To: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>
References: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>
Message-ID: <CACL+1aty1XiCfWnX+7k3R-Lx=xo-B5Emk2g7cBCe7LM4OPP_Tw@mail.gmail.com>

On Wed, Feb 20, 2013 at 5:53 AM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
> There is an asymmetry in getlocale and setlocale. What is returned by
> getlocale cannot be used as argument for setlocale.

getlocale executes localename = _setlocale(category), where _setlocale
wraps the C runtime setlocale. Then it transforms the return string to
a tuple using _parse_localename, which calls locale.normalize. The
latter changes the language and encoding incorrectly on Windows.
Instead, you could save the unparsed locale string: old_locale =
setlocale(LC_ALL).

From fomcl at yahoo.com  Wed Feb 20 14:14:15 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Wed, 20 Feb 2013 05:14:15 -0800 (PST)
Subject: [Tutor] locale.set/getlocale asymmetry
In-Reply-To: <CACL+1aty1XiCfWnX+7k3R-Lx=xo-B5Emk2g7cBCe7LM4OPP_Tw@mail.gmail.com>
References: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1aty1XiCfWnX+7k3R-Lx=xo-B5Emk2g7cBCe7LM4OPP_Tw@mail.gmail.com>
Message-ID: <1361366055.28245.YahooMailNeo@web163801.mail.gq1.yahoo.com>



----- Original Message -----
> From: eryksun <eryksun at gmail.com>
> To: Albert-Jan Roskam <fomcl at yahoo.com>
> Cc: Python Mailing List <tutor at python.org>
> Sent: Wednesday, February 20, 2013 1:37 PM
> Subject: Re: [Tutor] locale.set/getlocale asymmetry
> 
> On Wed, Feb 20, 2013 at 5:53 AM, Albert-Jan Roskam <fomcl at yahoo.com> 
> wrote:
>> There is an asymmetry in getlocale and setlocale. What is returned by
>> getlocale cannot be used as argument for setlocale.
> 
> getlocale executes localename = _setlocale(category), where _setlocale
> wraps the C runtime setlocale. Then it transforms the return string to
> a tuple using _parse_localename, which calls locale.normalize. The
> latter changes the language and encoding incorrectly on Windows.
> Instead, you could save the unparsed locale string: old_locale =
> setlocale(LC_ALL).

Hi Eryksun,

Thank you. So can I simply use the function below to replace locale.getlocale()?
Will this never cause problems? The thing I remember about setlocale is that 
"thou shalt never call setlocale anywhere else but in the beginning of a script".
Or am I wrong here? I am always a little reluctant to mess with the host locale.
?
def getlocale(category=locale.LC_ALL):
?? ?return locale.setlocale(category)

From eryksun at gmail.com  Wed Feb 20 17:16:17 2013
From: eryksun at gmail.com (eryksun)
Date: Wed, 20 Feb 2013 11:16:17 -0500
Subject: [Tutor] locale.set/getlocale asymmetry
In-Reply-To: <1361366055.28245.YahooMailNeo@web163801.mail.gq1.yahoo.com>
References: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1aty1XiCfWnX+7k3R-Lx=xo-B5Emk2g7cBCe7LM4OPP_Tw@mail.gmail.com>
	<1361366055.28245.YahooMailNeo@web163801.mail.gq1.yahoo.com>
Message-ID: <CACL+1avgQyq71QWf0CsVHUNDmOCBSm-pR-UyGUDipVCVihpXxg@mail.gmail.com>

On Wed, Feb 20, 2013 at 8:14 AM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
> Thank you. So can I simply use the function below to replace locale.getlocale()?
> Will this never cause problems? The thing I remember about setlocale is that
> "thou shalt never call setlocale anywhere else but in the beginning of a script".
> Or am I wrong here? I am always a little reluctant to mess with the host locale.
>
> def getlocale(category=locale.LC_ALL):
>     return locale.setlocale(category)

That's fine. If you only pass in the category it's just a query.

locale.getlocale defaults to a single category (LC_CTYPE) because of
the parsing it does to create the tuple. The issue is that an LC_ALL
query returns all of the categories, delimited by semicolons, if
they're not all the same. In this case locale.getlocale(LC_ALL) raises
a TypeError. But there's no problem using such a locale string with
setlocale LC_ALL.

Also, on Windows locale.getdefaultlocale uses win32 GetLocaleInfo, set
to return ISO 639/3166 language/country codes. These codes don't work
with the MS CRT setlocale, so locale.resetlocale fails.
setlocale(LC_ALL, '') is supported to reset to the default. More here:

setlocale
http://msdn.microsoft.com/en-us/library/x99tb11d

language strings
http://msdn.microsoft.com/en-us/library/39cwe7zf

country/region strings
http://msdn.microsoft.com/en-us/library/cdax410z

From fomcl at yahoo.com  Wed Feb 20 21:56:36 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Wed, 20 Feb 2013 12:56:36 -0800 (PST)
Subject: [Tutor] locale.set/getlocale asymmetry
In-Reply-To: <CACL+1avgQyq71QWf0CsVHUNDmOCBSm-pR-UyGUDipVCVihpXxg@mail.gmail.com>
References: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1aty1XiCfWnX+7k3R-Lx=xo-B5Emk2g7cBCe7LM4OPP_Tw@mail.gmail.com>
	<1361366055.28245.YahooMailNeo@web163801.mail.gq1.yahoo.com>
	<CACL+1avgQyq71QWf0CsVHUNDmOCBSm-pR-UyGUDipVCVihpXxg@mail.gmail.com>
Message-ID: <1361393796.15604.YahooMailNeo@web163806.mail.gq1.yahoo.com>



> locale.getlocale defaults to a single category (LC_CTYPE) because of
> the parsing it does to create the tuple. The issue is that an LC_ALL
> query returns all of the categories, delimited by semicolons, if
> they're not all the same. In this case locale.getlocale(LC_ALL) raises
> a TypeError. But there's no problem using such a locale string with
> setlocale LC_ALL.
> 
> Also, on Windows locale.getdefaultlocale uses win32 GetLocaleInfo, set
> to return ISO 639/3166 language/country codes. These codes don't work
> with the MS CRT setlocale, so locale.resetlocale fails.
> setlocale(LC_ALL, '') is supported to reset to the default. More here:

Ah, I always wondered about that. So getdefaultlocale() always returns the same as getlocale() on Linux?
Python 2.7.3 (default, Sep 26 2012, 21:53:58) [GCC 4.7.2] on linux2
>>> import locale
>>> locale.getdefaultlocale()
('en_US', 'UTF-8')
>>> locale.getlocale()
('en_US', 'UTF-8')
?
> setlocale
> http://msdn.microsoft.com/en-us/library/x99tb11d
> 
> language strings
> http://msdn.microsoft.com/en-us/library/39cwe7zf
> 
> country/region strings
> http://msdn.microsoft.com/en-us/library/cdax410z
>

This article [http://docs.moodle.org/dev/Table_of_locales]? specifies locales for windows (column: localewin) and other OS.
While this Unix article [http://osr507doc.sco.com/en/man/html.M/locale.M.html] has a table with old and new locale names (e.g. 
old Unix: english_uk.8859; new Unix: en_GB.ISO8859-1). And this Windows list is just like Unix [http://msdn.microsoft.com/en-us/library/39cwe7zf]

So basically, the locale specification may differ:
[A] between OS families (Unix, Windows, ...) 
[B] between OS versions (Windows XP, Windows 7, ...)? 
Woaaah, that's confusing! ISO, SIL, and IETF/BCP language codes...a dash of IANA. And the same variation for codepage defintions? These guys in Switzerland should put the 'S' back in ISO! ;-)

One additional question: when is it REALLY necessary to specify a locale variant modifier, e.g. en_US.cp1252 at euro, or perhaps the more eccentric nl_NL.cp874 at preeuro (dutch locale, thai/latin codepage ;-)

From eryksun at gmail.com  Thu Feb 21 07:33:14 2013
From: eryksun at gmail.com (eryksun)
Date: Thu, 21 Feb 2013 01:33:14 -0500
Subject: [Tutor] locale.set/getlocale asymmetry
In-Reply-To: <1361393796.15604.YahooMailNeo@web163806.mail.gq1.yahoo.com>
References: <1361357638.4236.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1aty1XiCfWnX+7k3R-Lx=xo-B5Emk2g7cBCe7LM4OPP_Tw@mail.gmail.com>
	<1361366055.28245.YahooMailNeo@web163801.mail.gq1.yahoo.com>
	<CACL+1avgQyq71QWf0CsVHUNDmOCBSm-pR-UyGUDipVCVihpXxg@mail.gmail.com>
	<1361393796.15604.YahooMailNeo@web163806.mail.gq1.yahoo.com>
Message-ID: <CACL+1asBwWgGrRSuRGphDECpdkM0osdhAnP4K+Q-bkq4x+-0QQ@mail.gmail.com>

On Wed, Feb 20, 2013 at 3:56 PM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
> Ah, I always wondered about that. So getdefaultlocale() always returns
> the same as getlocale() on Linux?

On Linux, getdefaultlocale looks for the locale name in environment
variables (LC_ALL, LC_CTYPE, LANG, and LANGUAGE), with a default of
'C', and parses the name with _parse_localename. It can't use
setlocale(LC_ALL, '') because that would actually set the default
state.

getlocale() returns the parsed locale for the current LC_CTYPE config,
not the system default locale.

> So basically, the locale specification may differ:
> [A] between OS families (Unix, Windows, ...)
> [B] between OS versions (Windows XP, Windows 7, ...)?

For a GUI application, your toolkit may have tools to abstract away
platform details. For example Qt QLocale:

    >>> # set API v1 QString for this example
    ... import sip; sip.setapi('QString', 1)
    >>> from PyQt4.QtCore import QLocale, QString

    >>> QLocale.setDefault(QLocale('nl_NL'))
    >>> QString('1234,56').toDouble()
    (1234.56, True)

> One additional question: when is it REALLY necessary to specify a
> locale variant modifier, e.g. en_US.cp1252 at euro, or perhaps the
> more eccentric nl_NL.cp874 at preeuro (dutch locale, thai/latin codepage ;-)

It's for clowns like me to do this:

    >>> setlocale(LC_ALL, 'en_US.UTF-8 at yadnom')
    'en_US.UTF-8 at yadnom'
    >>> calendar.day_name[0]
    'yadnoM'
    >>> calendar.day_abbr[0]
    'noM'

On Debian Linux, I copied the original en_US to
/usr/local/share/i18n/locales/en_US at yadnom, modified the LC_TIME
config, updated /etc/locale.gen, and ran the locale-gen script to
update /usr/lib/locale/locale-archive.

More seriously, a system administrator may have a good reason to
create a modified locale for LC_MESSAGES, etc, so I guess you should
ask sys admins if/how they use this.

From schooluse1992 at yahoo.com  Thu Feb 21 13:16:33 2013
From: schooluse1992 at yahoo.com (Mara Kelly)
Date: Thu, 21 Feb 2013 12:16:33 +0000 (GMT)
Subject: [Tutor] distance between cities matrix
Message-ID: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>

Hi everyone,?Here is the question I was given...Consider the (20x20) array of numbers?here(I wrote all of the numbers in my program). Lets say this represents a matrix A of distances (in kilometers) between cities. Note that A is symmetric A(i,j) = A(j,i) and all its diagonal elements are zero. Suppose Vladimir from city i and Petra from city j want to meet up in some third city k (i, j and k are all different). Conscious about their carbon footprint (!), they want k to be as near as possible: specifically the sum of the distances both has to travel should be minimum. Given i and j, write a program in PYTHON that determines what k should be. (In PYTHON you can store the matrix as a list of lists). Do not worry in your program about "reading in" A: Just hard-wire it in to the code. You should read in from the user the two cities (i and j) where Vladimir and Petra live. From your program, calculate the answer for1) i=5, j=112)i=10, j=13
I think my program is correct, but I'm not sure what they want us to do with the two conditions given above. I also don't know what to enter when I run the program to test these. I am working in Python 3. Thank you!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130221/ff5169fe/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 20x20matrix
Type: application/octet-stream
Size: 3563 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/tutor/attachments/20130221/ff5169fe/attachment.obj>

From alan.gauld at btinternet.com  Thu Feb 21 16:10:46 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Thu, 21 Feb 2013 15:10:46 +0000
Subject: [Tutor] distance between cities matrix
In-Reply-To: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>
References: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>
Message-ID: <kg5ddj$ojq$1@ger.gmane.org>

On 21/02/13 12:16, Mara Kelly wrote:
> Consider the (20x20) array of numbers here

> matrix A of distances (in kilometers) between cities. Note that A is
> symmetric A(i,j) = A(j,i) and all its diagonal elements are zero.

> Suppose Vladimir from city i and Petra from city j want to meet up in
> some third city k (i, j and k are all different). Conscious about their
> carbon footprint (!), they want k to be as near as possible:
> specifically the sum of the distances both has to travel should be
> minimum.

So you can extract a list of distances for i and another for j.
You then want to find the smallest pair of values in those lists.

Here is a smaller example:

i = [2,4,6]
j = [3,2,1]

the pairs are (2,3), (4,2), (6,1)

The sums of pairs are therefore: 5, 6, 7

So the smallest pair is the first one.

So which ever city the first one represents is the city where they 
should meet.

> where Vladimir and Petra live. From your program, calculate the answer for
>
> 1) i=5, j=11
> 2)i=10, j=13
>
>
> I think my program is correct, but I'm not sure what they want us to do
> with the two conditions given above.

You plug those into your program as the values for the two start cities.
So you should wind up with two answers.

> I also don't know what to enter
> when I run the program to test these.

You enter (depending on how you code it) either the city names 
corresponding to this numbers in your matrix or you enter
in the numbers directly (if you used a numbered menu, say).

HTH,
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From davea at davea.name  Thu Feb 21 16:42:24 2013
From: davea at davea.name (Dave Angel)
Date: Thu, 21 Feb 2013 10:42:24 -0500
Subject: [Tutor] distance between cities matrix
In-Reply-To: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>
References: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>
Message-ID: <51264060.7090900@davea.name>

On 02/21/2013 07:16 AM, Mara Kelly wrote:
> Hi everyone, Here is the question I was given...Consider the (20x20) array of numbers here(I wrote all of the numbers in my program). Lets say this represents a matrix A of distances (in kilometers) between cities. Note that A is symmetric A(i,j) = A(j,i) and all its diagonal elements are zero. Suppose Vladimir from city i and Petra from city j want to meet up in some third city k (i, j and k are all different). Conscious about their carbon footprint (!), they want k to be as near as possible: specifically the sum of the distances both has to travel should be minimum. Given i and j, write a program in PYTHON that determines what k should be. (In PYTHON you can store the matrix as a list of lists). Do not worry in your program about "reading in" A: Just hard-wire it in to the code. You should read in from the user the two cities (i and j) where Vladimir and Petra live. From your program, calculate the answer for1) i=5, j=112)i=10, j=13
> I think my program is correct, but I'm not sure what they want us to do with the two conditions given above. I also don't know what to enter when I run the program to test these. I am working in Python 3. Thank you!
>

This is a text mailing list.  By posting as html, you made it pretty 
difficult to make sense out of those two long paragraphs.  Please send 
your emails as text.

I don't know what two particular conditions you're asking about. Could 
you be explicit, instead of just saying 'given above" ?  Lots of 
conditions were given above.

Some comments on your code:
It's customary to name the file with an extension of .py

As written, the code doesn't do anything.  You define two functions, but 
never call them.  At a minimum, you need to use input() to get two 
number strings from the user, and int() to convert each to an integer. 
Then you need to call the distance() function with those two numbers. 
Then you need to test it once by having the user input the numbers 5,112 
and again with 10, 13.  The first case will get an exception of course, 
since there aren't 112 cities.

 > #Python Program to calculate the city equidistant between two given 
cities

That's not what was in the assignment, nor is it what you did.

 > #Sort the cities by arranging the distances from greatest to least
I think you're actually sorting from least to greatest, which is fine. 
But if so, the comment is wrong.

 > #Range is a pre defined 20 by 20 matrix
No, range(0,20) builds a 1 by 20 list, not any kind of matrix.  perhaps 
you meant to refer to cities, which you are building here.

 > #For entry within the matrix if that value happens to be of type 
list, then it will append a value to that list

If you're referring to the cities matrix, all the values are of type 
list, so I'm not sure what you're trying to say here.

 >    for b in cities[i]:
 >        for c in cities[j]:
 >            sums.append(b+c)

No idea what this is supposed to accomplish.  But the code works better 
without it.

 >    sums[i] = 0
 >    sums[j] = 0

By zeroing them, you make them the minimum distance.  Instead you might 
want to make them very large.  I used a million, and that worked.


It's not at all clear to me what the numbers in the original matrix 
represented, since if they were really the tallying of the shortest 
route between each pair of cities, then the answer would already be a 
direct lookup (cities[i][j]).  But if it's the shortest distance between 
two cities that doesn't go near any other city, then this program is set 
up to calculate the shortest route that goes through exactly one 
intermediate city (the 'k' city).  It still is not necessarily the 
shortest route that might go through several intermediates.



-- 
DaveA

From dyoo at hashcollision.org  Thu Feb 21 22:06:31 2013
From: dyoo at hashcollision.org (Danny Yoo)
Date: Thu, 21 Feb 2013 14:06:31 -0700
Subject: [Tutor] distance between cities matrix
In-Reply-To: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>
References: <1361448993.30483.YahooMailClassic@web171605.mail.ir2.yahoo.com>
Message-ID: <CAGZAPF6U+SSgVD1mqDTnvOVNpK02vTOJdhUi-6KVZVrFGAnxrA@mail.gmail.com>

> Consider the (20x20) array of numbers here(I wrote all of the numbers in
> my program). Lets say this represents a matrix A of distances (in
> kilometers) between cities. Note that A is symmetric A(i,j) = A(j,i) and all
> its diagonal elements are zero. Suppose Vladimir from city i and Petra from
> city j want to meet up in some third city k (i, j and k are all different).
> Conscious about their carbon footprint (!), they want k to be as near as
> possible: specifically the sum of the distances both has to travel should be
> minimum. Given i and j, write a program in PYTHON that determines what k
> should be.

This sounds like a fairly straightforward CS graph algorithms question.

Is there a unique meeting point k that satisfies these conditions, or
can there be several possibilities?

How is this problem different from a standard shortest-path search?
Ah, I think I see it.  I'm assuming the difference is that it's in the
shape of the legal solutions.  Solutions  must be in the form of only
two direct hops:

    from i to k, and
    from k to j

and not some path of arbitrary length.


You ask the question: how do I test this?  Here's one approach: create
your own simple distance matrix for a very small map that you
construct.  Make your own test data.  Have it have four cities (or
fewer!).  That way, you can know in advance what the answer is
supposed to be for any two pairs.  Then you can write test cases and
see that your algorithm is doing what you expect it to.

From michael at seomoz.org  Fri Feb 22 02:22:19 2013
From: michael at seomoz.org (Michael O'Leary)
Date: Thu, 21 Feb 2013 17:22:19 -0800
Subject: [Tutor] Setting log directory from a command line argument
Message-ID: <CAFp7J1bznJ-8+fS_gfPvcDtA648vOcKVLQk=qQL3WGZ7xHOTyA@mail.gmail.com>

I have added logging to a Python program I have been working on by putting
this in the module's __init__.py file:

##########
import logging
logger = logging.getLogger('ranking_factors')
formatter = logging.Formatter('[%(asctime)s] %(levelname)s in
%(module)s:%(funcName)s@%(lineno)s => %(message)s')
handler = logging.FileHandler('ranking_factors.log')
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
##########

I would like to provide a way for different users to specify the directory
where the log files are written, and perhaps also the log file names,
through command line arguments. Is there a way that I can do that? I can
access the logger variable in the files of the application with

from . import logger

logger.info("Some message")

Could I import logger in the file where the command line arguments are
processed and change its handler to use a different filename? If I can do
that, will that change logger globally, so that logging statements in other
files of the application also write logging to the new file location? If
this wouldn't work, is there a different way that I could accomplish this
task?
Thanks,
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130221/3bd863b0/attachment.html>

From jf_byrnes at comcast.net  Fri Feb 22 02:47:21 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Thu, 21 Feb 2013 19:47:21 -0600
Subject: [Tutor] sqlite3 does it support limit in a delete clause?
Message-ID: <kg6in5$gfs$1@ger.gmane.org>

ubuntu 12.04 python 2.7

Does sqlite3 in this version of python support a delete with a limit?

 >>> cur.execute("delete from pwds where Account='xMe' limit 1")
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "limit": syntax error
 >>>
 >>> cur.execute("delete from pwds where Account='xMe' limit=1")
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "limit": syntax error
 >>>

It seems not, but it may be me messing up the syntax so I thought I 
would check.

Thanks,  Jim


From eryksun at gmail.com  Fri Feb 22 04:41:32 2013
From: eryksun at gmail.com (eryksun)
Date: Thu, 21 Feb 2013 22:41:32 -0500
Subject: [Tutor] sqlite3 does it support limit in a delete clause?
In-Reply-To: <kg6in5$gfs$1@ger.gmane.org>
References: <kg6in5$gfs$1@ger.gmane.org>
Message-ID: <CACL+1at2FFPjrLbJFNyfr+CKBSoGEy3W4h44D30zRWFc=OjdmA@mail.gmail.com>

On Thu, Feb 21, 2013 at 8:47 PM, Jim Byrnes <jf_byrnes at comcast.net> wrote:
> ubuntu 12.04 python 2.7
>
> Does sqlite3 in this version of python support a delete with a limit?

It's enabled via the compilation option SQLITE_ENABLE_UPDATE_DELETE_LIMIT:

http://www.sqlite.org/compile.html/#enable_update_delete_limit

This is not enabled for Windows Python 2.7/3.3. However, I'm surprised
it's disabled in Ubuntu since Debian's Python 2.7.3 has it. I checked
this with a temp database in memory and also verified via the
diagnostic functions (themselves optional):

http://www.sqlite.org/c3ref/compileoption_get.html

    >>> from ctypes import *
    >>> import _sqlite3
    >>> lib = CDLL(_sqlite3.__file__)

    >>> lib.sqlite3_compileoption_used(
    ...     "ENABLE_UPDATE_DELETE_LIMIT")
    1

    >>> lib.sqlite3_compileoption_get.restype = c_char_p
    >>> i = 0
    >>> while True:
    ...   opt = lib.sqlite3_compileoption_get(i)
    ...   if not opt: break
    ...   print opt
    ...   i += 1
    ...
    CURDIR
    ENABLE_COLUMN_METADATA
    ENABLE_FTS3
    ENABLE_RTREE
    ENABLE_UNLOCK_NOTIFY
    ENABLE_UPDATE_DELETE_LIMIT
    MAX_SCHEMA_RETRY=25
    OMIT_LOOKASIDE
    SECURE_DELETE
    SOUNDEX
    TEMP_STORE=1
    THREADSAFE=1

From eryksun at gmail.com  Fri Feb 22 05:26:52 2013
From: eryksun at gmail.com (eryksun)
Date: Thu, 21 Feb 2013 23:26:52 -0500
Subject: [Tutor] sqlite3 does it support limit in a delete clause?
In-Reply-To: <CACL+1at2FFPjrLbJFNyfr+CKBSoGEy3W4h44D30zRWFc=OjdmA@mail.gmail.com>
References: <kg6in5$gfs$1@ger.gmane.org>
	<CACL+1at2FFPjrLbJFNyfr+CKBSoGEy3W4h44D30zRWFc=OjdmA@mail.gmail.com>
Message-ID: <CACL+1at57fFcRi4VUXwFgH3OEPy_YuGdgaFh5ETtHkjxuWw55A@mail.gmail.com>

On Thu, Feb 21, 2013 at 10:41 PM, eryksun <eryksun at gmail.com> wrote:
>     >>> from ctypes import *
>     >>> import _sqlite3
>     >>> lib = CDLL(_sqlite3.__file__)
>
>     >>> lib.sqlite3_compileoption_used(
>     ...     "ENABLE_UPDATE_DELETE_LIMIT")
>     1

A simpler way using a SQL function:

http://www.sqlite.org/lang_corefunc.html#sqlite_compileoption_used

Windows, Python 2.7.3:

>>> cur.execute('''
...   select sqlite_compileoption_used(
...     'ENABLE_UPDATE_DELETE_LIMIT')''').fetchone()
(0,)

Debian, Python 2.7.3:

>>> cur.execute('''
...   select sqlite_compileoption_used(
...     'ENABLE_UPDATE_DELETE_LIMIT')''').fetchone()
(1,)

From eryksun at gmail.com  Fri Feb 22 06:10:52 2013
From: eryksun at gmail.com (eryksun)
Date: Fri, 22 Feb 2013 00:10:52 -0500
Subject: [Tutor] sqlite3 does it support limit in a delete clause?
In-Reply-To: <kg6in5$gfs$1@ger.gmane.org>
References: <kg6in5$gfs$1@ger.gmane.org>
Message-ID: <CACL+1au6Lqfj-N_4CNVqnuCTvnBR7ghCyFBAOVZrjm_Lf_We6A@mail.gmail.com>

On Thu, Feb 21, 2013 at 8:47 PM, Jim Byrnes <jf_byrnes at comcast.net> wrote:
>
>>>> cur.execute("delete from pwds where Account='xMe' limit 1")

If you need a alternate way to limit the delete, try the following,
for which the limit is on a select query:

    cur.execute('''
      delete from pwds where rowid in (
        select rowid from pwds where Account='xMe' limit 1)
    ''')

From eryksun at gmail.com  Fri Feb 22 10:33:10 2013
From: eryksun at gmail.com (eryksun)
Date: Fri, 22 Feb 2013 04:33:10 -0500
Subject: [Tutor] sqlite3 does it support limit in a delete clause?
In-Reply-To: <CACL+1at2FFPjrLbJFNyfr+CKBSoGEy3W4h44D30zRWFc=OjdmA@mail.gmail.com>
References: <kg6in5$gfs$1@ger.gmane.org>
	<CACL+1at2FFPjrLbJFNyfr+CKBSoGEy3W4h44D30zRWFc=OjdmA@mail.gmail.com>
Message-ID: <CACL+1auT_z3sMsi4nRGYm51JXPtu7sGFQJg4rRAO_YpJNmFjmg@mail.gmail.com>

On Thu, Feb 21, 2013 at 10:41 PM, eryksun <eryksun at gmail.com> wrote:
> However, I'm surprised it's disabled in Ubuntu since Debian's
> Python 2.7.3 has it.

I took a moment to look at the changelogs. The option to use LIMIT
with DELETE was added in SQLite 3.6.4 (Oct 2008):

http://www.sqlite.org/changes.html#version_3_6_4

  * Add option support for LIMIT and ORDER BY clauses on DELETE and
    UPDATE statements. Only works if SQLite is compiled with
    SQLITE_ENABLE_UPDATE_DELETE_LIMIT.

Windows Python 2.7.3 ships with SQLite version 3.6.21 (Dec 2009).
Windows Python 3.3 uses version 3.7.12 (May 2012), but it isn't
compiled with the above option.

Ubuntu 12.04 uses version 3.7.9 (Nov 2011) of the libsqlite3-0
package. However, it wasn't compiled with the needed option until
package version 3.7.9-3 (Jan 2012):

http://changelogs.ubuntu.com/changelogs/pool/main/s/sqlite3/sqlite3_3.7.13-1/changelog

  * Enable LIMIT support for UPDATE and DELETE commands (closes:
    #649169).

Ubuntu 12.10 (quantal) uses version 3.7.13 (Jun 2012), the same
version I have on Debian Wheezy.

http://packages.debian.org/changelogs/pool/main/s/sqlite3/sqlite3_3.7.13-1/changelog

From jf_byrnes at comcast.net  Fri Feb 22 15:57:48 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Fri, 22 Feb 2013 08:57:48 -0600
Subject: [Tutor] sqlite3 does it support limit in a delete clause?
In-Reply-To: <CACL+1au6Lqfj-N_4CNVqnuCTvnBR7ghCyFBAOVZrjm_Lf_We6A@mail.gmail.com>
References: <kg6in5$gfs$1@ger.gmane.org>
	<CACL+1au6Lqfj-N_4CNVqnuCTvnBR7ghCyFBAOVZrjm_Lf_We6A@mail.gmail.com>
Message-ID: <kg811a$eck$1@ger.gmane.org>

On 02/21/2013 11:10 PM, eryksun wrote:
> On Thu, Feb 21, 2013 at 8:47 PM, Jim Byrnes <jf_byrnes at comcast.net> wrote:
>>
>>>>> cur.execute("delete from pwds where Account='xMe' limit 1")
>
> If you need a alternate way to limit the delete, try the following,
> for which the limit is on a select query:
>
>      cur.execute('''
>        delete from pwds where rowid in (
>          select rowid from pwds where Account='xMe' limit 1)
>      ''')

Thanks for all the info.  I ran your tests and my version of sqlite3 is 
indeed not compiled to use LIMIT.  After I sent the email I was 
wondering about using rowid.  Thanks for confirming it with an example.

Regards,  Jim


From jf_byrnes at comcast.net  Fri Feb 22 22:26:39 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Fri, 22 Feb 2013 15:26:39 -0600
Subject: [Tutor] How to break long lines?
Message-ID: <kg8nqc$s6a$1@ger.gmane.org>

I am cleaning up my code and have a number of sqlite3 execute statements 
that extend far past 80 characters.

 From my reading implicit line joining with (), [] or {} seems to be the 
preferred method, but

cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
	COLLATE NOCASE', cat)

gives this error:

jfb at jims1204:~/MyProgs/passwords$ python passwords.py
   File "passwords.py", line 50
     cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
                                                                           ^
SyntaxError: EOL while scanning string literal

Using a \ seems to be out of favor but it works in this case.

cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account\
	COLLATE NOCASE', cat)
# no error.

What am I not understanding about implicit line joining?

Thanks,  Jim


From msirenef at lightbird.net  Fri Feb 22 22:51:19 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Fri, 22 Feb 2013 16:51:19 -0500
Subject: [Tutor] How to break long lines?
In-Reply-To: <kg8nqc$s6a$1@ger.gmane.org>
References: <kg8nqc$s6a$1@ger.gmane.org>
Message-ID: <5127E857.5080608@lightbird.net>

On 02/22/2013 04:26 PM, Jim Byrnes wrote:
> I am cleaning up my code and  have a number of sqlite3 execute statements that extend far past 80 
characters.
 >
 > From my reading implicit line joining with (), [] or {} seems to be 
the preferred method, but
 >
 > cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
 > COLLATE NOCASE', cat)
 >
 > gives this error:
 >
 > jfb at jims1204:~/MyProgs/passwords$ python passwords.py
 > File "passwords.py", line 50
 > cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
 > ^
 > SyntaxError: EOL while scanning string literal
 >
 > Using a \ seems to be out of favor but it works in this case.
 >
 > cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account\
 > COLLATE NOCASE', cat)
 > # no error.
 >
 > What am I not understanding about implicit line joining?
 >
 > Thanks, Jim
 >
 > _______________________________________________
 > Tutor maillist - Tutor at python.org
 > To unsubscribe or change subscription options:
 > http://mail.python.org/mailman/listinfo/tutor
 >

There are a few ways:

"abc \
xyz"

("abc " \
"xyz")

("abc "
"xyz")


The last ones work because two string literals next to each other
are combined:

'abc' 'xyz' == 'abcxyz'

  -m


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

The press, the machine, the railway, the telegraph are premises whose
thousand-year conclusion no one has yet dared to draw.  Friedrich Nietzsche


From malaclypse2 at gmail.com  Fri Feb 22 22:59:00 2013
From: malaclypse2 at gmail.com (Jerry Hill)
Date: Fri, 22 Feb 2013 16:59:00 -0500
Subject: [Tutor] How to break long lines?
In-Reply-To: <kg8nqc$s6a$1@ger.gmane.org>
References: <kg8nqc$s6a$1@ger.gmane.org>
Message-ID: <CADwdpybYX=GE5GVNFb87hXRNxN0BfoLjZGdYpL9PhUBN7tV-Sg@mail.gmail.com>

On Fri, Feb 22, 2013 at 4:26 PM, Jim Byrnes <jf_byrnes at comcast.net> wrote:
> I am cleaning up my code and have a number of sqlite3 execute statements
> that extend far past 80 characters.
>
> From my reading implicit line joining with (), [] or {} seems to be the
> preferred method, but
>
> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>         COLLATE NOCASE', cat)
>
> gives this error:
>
> jfb at jims1204:~/MyProgs/passwords$ python passwords.py
>   File "passwords.py", line 50
>     cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>                                                                           ^
> SyntaxError: EOL while scanning string literal

Single quoted strings aren't allowed to have line breaks in them.  If
you have two string literals separated only by whitespace, though,
they get joined together, so you could do this:

cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account'
        'COLLATE NOCASE', cat)

You can also use triple quoted strings instead, which is my
preference.  Triple quoted strings are allowed to have line breaks,
and the whitespace doesn't matter in your SQL query.  So I'd do
something like this:

cur.execute ('''select account
                from pwds
                where category = ?
                order by account
                collate nocase''', cat)

You can break the query up over however many lines it needs to be
readable, of course.

-- 
Jerry

From ramit.prasad at jpmorgan.com  Fri Feb 22 22:54:47 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Fri, 22 Feb 2013 21:54:47 +0000
Subject: [Tutor] How to break long lines?
In-Reply-To: <kg8nqc$s6a$1@ger.gmane.org>
References: <kg8nqc$s6a$1@ger.gmane.org>
Message-ID: <5B80DD153D7D744689F57F4FB69AF474181B84D8@SCACMX008.exchad.jpmchase.net>

Jim Byrnes wrote:
> I am cleaning up my code and have a number of sqlite3 execute statements
> that extend far past 80 characters.
> 
>  From my reading implicit line joining with (), [] or {} seems to be the
> preferred method, but
> 
> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
> 	COLLATE NOCASE', cat)
> 
> gives this error:
> 
> jfb at jims1204:~/MyProgs/passwords$ python passwords.py
>    File "passwords.py", line 50
>      cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>                                                                            ^
> SyntaxError: EOL while scanning string literal
> 
> Using a \ seems to be out of favor but it works in this case.
> 
> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account\
> 	COLLATE NOCASE', cat)
> # no error.
> 
> What am I not understanding about implicit line joining?

The problem is the line break. Single delimited (quote or double quote) strings
can only stay on one line (unless using the \ hack). You can easily solve this 
problem in your case by using triple delimited strings. 

cur.execute('''SELECT Account FROM pwds WHERE Category=? ORDER BY Account
 	COLLATE NOCASE''', cat)


~Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From jf_byrnes at comcast.net  Fri Feb 22 23:54:59 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Fri, 22 Feb 2013 16:54:59 -0600
Subject: [Tutor] How to break long lines?
In-Reply-To: <5B80DD153D7D744689F57F4FB69AF474181B84D8@SCACMX008.exchad.jpmchase.net>
References: <kg8nqc$s6a$1@ger.gmane.org>
	<5B80DD153D7D744689F57F4FB69AF474181B84D8@SCACMX008.exchad.jpmchase.net>
Message-ID: <kg8t00$bh7$1@ger.gmane.org>

On 02/22/2013 03:54 PM, Prasad, Ramit wrote:
> Jim Byrnes wrote:
>> I am cleaning up my code and have a number of sqlite3 execute statements
>> that extend far past 80 characters.
>>
>>   From my reading implicit line joining with (), [] or {} seems to be the
>> preferred method, but
>>
>> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>> 	COLLATE NOCASE', cat)
>>
>> gives this error:
>>
>> jfb at jims1204:~/MyProgs/passwords$ python passwords.py
>>     File "passwords.py", line 50
>>       cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>>                                                                             ^
>> SyntaxError: EOL while scanning string literal
>>
>> Using a \ seems to be out of favor but it works in this case.
>>
>> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account\
>> 	COLLATE NOCASE', cat)
>> # no error.
>>
>> What am I not understanding about implicit line joining?
>
> The problem is the line break. Single delimited (quote or double quote) strings
> can only stay on one line (unless using the \ hack). You can easily solve this
> problem in your case by using triple delimited strings.
>
> cur.execute('''SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>   	COLLATE NOCASE''', cat)
>
>
> ~Ramit
>

So it was the quotes that tripped me up.  The triple quoted ones worked 
great.

Thanks,  Jim



From jf_byrnes at comcast.net  Fri Feb 22 23:57:49 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Fri, 22 Feb 2013 16:57:49 -0600
Subject: [Tutor] How to break long lines?
In-Reply-To: <CADwdpybYX=GE5GVNFb87hXRNxN0BfoLjZGdYpL9PhUBN7tV-Sg@mail.gmail.com>
References: <kg8nqc$s6a$1@ger.gmane.org>
	<CADwdpybYX=GE5GVNFb87hXRNxN0BfoLjZGdYpL9PhUBN7tV-Sg@mail.gmail.com>
Message-ID: <kg8t5a$bh7$2@ger.gmane.org>

On 02/22/2013 03:59 PM, Jerry Hill wrote:
> On Fri, Feb 22, 2013 at 4:26 PM, Jim Byrnes <jf_byrnes at comcast.net> wrote:
>> I am cleaning up my code and have a number of sqlite3 execute statements
>> that extend far past 80 characters.
>>
>>  From my reading implicit line joining with (), [] or {} seems to be the
>> preferred method, but
>>
>> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>>          COLLATE NOCASE', cat)
>>
>> gives this error:
>>
>> jfb at jims1204:~/MyProgs/passwords$ python passwords.py
>>    File "passwords.py", line 50
>>      cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>>                                                                            ^
>> SyntaxError: EOL while scanning string literal
>
> Single quoted strings aren't allowed to have line breaks in them.  If
> you have two string literals separated only by whitespace, though,
> they get joined together, so you could do this:
>
> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account'
>          'COLLATE NOCASE', cat)
>
> You can also use triple quoted strings instead, which is my
> preference.  Triple quoted strings are allowed to have line breaks,
> and the whitespace doesn't matter in your SQL query.  So I'd do
> something like this:
>
> cur.execute ('''select account
>                  from pwds
>                  where category = ?
>                  order by account
>                  collate nocase''', cat)
>
> You can break the query up over however many lines it needs to be
> readable, of course.
>

Thanks, the triple quoted method worked great.  I guess I always think 
of them in terms of docstrings or comments not in this way.

Regards,  Jim


From steve at pearwood.info  Sat Feb 23 00:46:28 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 23 Feb 2013 10:46:28 +1100
Subject: [Tutor] How to break long lines?
In-Reply-To: <kg8nqc$s6a$1@ger.gmane.org>
References: <kg8nqc$s6a$1@ger.gmane.org>
Message-ID: <51280354.5000909@pearwood.info>

On 23/02/13 08:26, Jim Byrnes wrote:

> I am cleaning up my code and have a number of sqlite3 execute statements
>  that extend far past 80 characters.
>
> From my reading implicit line joining with (), [] or {} seems to be the
>  preferred method, but
>
> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY Account
>      COLLATE NOCASE', cat)
>
> gives this error:
[...]
> SyntaxError: EOL while scanning string literal


Single quote strings are limited to a single line, regardless of any
brackets (round, square or curly) around them. In this case, the round
brackets simply allow the arguments to cur.execute() to extend over
multiple lines, but each argument still has to obey the syntax rules.

You can't expect this to work:

func(12345
      67890)  # ten digit number

just because of the parentheses. Neither do single-quote strings suddenly
gain the power to extend past the end of line.


But what you can do is use a line continuation \ as you have seen. Or you
can use a little-known feature of Python, implicit string concatenation.
The Python compiler will automatically concatenate strings at compile-time:

s = "spam " 'ham ' 'eggs'

is a more-verbose way of writing:

s = "spam ham eggs"

Now obviously this example here is useless, but when combined with
parentheses, you get a powerful way of writing long strings:


cur.execute('SELECT Account FROM pwds'
             ' WHERE Category=?'
             ' ORDER BY Account'
             ' COLLATE NOCASE', cat)


which I think is really nice to read. The best part is, because these
are string literals, the language promises to concatenate them at
compile-time, not runtime.

If implicit concatenation is too magical for you, you can use explicit
concatenation:

cur.execute('SELECT Account FROM pwds' +
             ' WHERE Category=?' +
             ' ORDER BY Account' +
             ' COLLATE NOCASE', cat)

At worst, the string concatenation + operator will apply at runtime,
which for a short string like this is not a big deal. But in practice,
I would expect Python's "keyhole optimizer" to see that it is only
string literals being concatenated, and perform constant-folding at
compile-time.

(Note: constant-folding is not a promise of the language. Not all
Python versions or implementations will do this.)


A fourth option is to use triple-quoted strings:

cur.execute('''SELECT Account FROM pwds
                WHERE Category=?
                ORDER BY Account
                COLLATE NOCASE''', cat)


but this relies on your SQL database being happy to receive commands
with embedded newlines, which it may not be.




-- 
Steven

From neubyr at gmail.com  Sat Feb 23 00:50:06 2013
From: neubyr at gmail.com (neubyr)
Date: Fri, 22 Feb 2013 17:50:06 -0600
Subject: [Tutor] object attribute validation
Message-ID: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>

I would like to validate data attributes before the object is instantiated
or any changes thereafter. For example, following is a simple Person class
with name and age attributes. I would like to validate whether age is an
integer before it is added/changed in the object's dictionary. I have taken
a simple integer validation example, but it could be something like
DateField validation or X509 certificate validation as well. Following is
my example code:


class Person(object):
  def __init__(self,name,age):
    self.name = name
    self.age = age

  def get_age(self):
    return self._age

  def set_age(self,val):
    try:
      int(val)
      self._age = val
    except ValueError:
        raise Exception('Invalid value for age')

  def del_age(self):
    del self._age

  age = property(get_age,set_age,del_age)

a = Person('John',6)
b = Person('Johny','Six')


Is this a good approach? Any suggestions for improving the code or
alternative approaches would be helpful.


-- thanks,
   neubyr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130222/b2ddd20f/attachment.html>

From jf_byrnes at comcast.net  Sat Feb 23 02:22:21 2013
From: jf_byrnes at comcast.net (Jim Byrnes)
Date: Fri, 22 Feb 2013 19:22:21 -0600
Subject: [Tutor] How to break long lines?
In-Reply-To: <51280354.5000909@pearwood.info>
References: <kg8nqc$s6a$1@ger.gmane.org> <51280354.5000909@pearwood.info>
Message-ID: <kg95ka$ko9$1@ger.gmane.org>

On 02/22/2013 05:46 PM, Steven D'Aprano wrote:
> On 23/02/13 08:26, Jim Byrnes wrote:
>
>> I am cleaning up my code and have a number of sqlite3 execute
>> statements that extend far past 80 characters.
>>
>> From my reading implicit line joining with (), [] or {} seems to be
>> the preferred method, but
>>
>> cur.execute('SELECT Account FROM pwds WHERE Category=? ORDER BY
>> Account COLLATE NOCASE', cat)
>>
>> gives this error:
> [...]
>> SyntaxError: EOL while scanning string literal
>
>
> Single quote strings are limited to a single line, regardless of any
> brackets (round, square or curly) around them. In this case, the
> round brackets simply allow the arguments to cur.execute() to extend
> over multiple lines, but each argument still has to obey the syntax
> rules.
>
> You can't expect this to work:
>
> func(12345 67890)  # ten digit number
>
> just because of the parentheses. Neither do single-quote strings
> suddenly gain the power to extend past the end of line.
>
>
> But what you can do is use a line continuation \ as you have seen. Or
> you can use a little-known feature of Python, implicit string
> concatenation. The Python compiler will automatically concatenate
> strings at compile-time:
>
> s = "spam " 'ham ' 'eggs'
>
> is a more-verbose way of writing:
>
> s = "spam ham eggs"
>
> Now obviously this example here is useless, but when combined with
> parentheses, you get a powerful way of writing long strings:
>
>
> cur.execute('SELECT Account FROM pwds' ' WHERE Category=?' ' ORDER BY
> Account' ' COLLATE NOCASE', cat)
>
>
> which I think is really nice to read. The best part is, because
> these are string literals, the language promises to concatenate them
> at compile-time, not runtime.
>
> If implicit concatenation is too magical for you, you can use
> explicit concatenation:
>
> cur.execute('SELECT Account FROM pwds' + ' WHERE Category=?' + '
> ORDER BY Account' + ' COLLATE NOCASE', cat)
>
> At worst, the string concatenation + operator will apply at runtime,
> which for a short string like this is not a big deal. But in
> practice, I would expect Python's "keyhole optimizer" to see that it
> is only string literals being concatenated, and perform
> constant-folding at compile-time.
>
> (Note: constant-folding is not a promise of the language. Not all
> Python versions or implementations will do this.)
>
>
> A fourth option is to use triple-quoted strings:
>
> cur.execute('''SELECT Account FROM pwds WHERE Category=? ORDER BY
> Account COLLATE NOCASE''', cat)
>
>
> but this relies on your SQL database being happy to receive commands
> with embedded newlines, which it may not be.


Thanks for giving me so many options to use in the future.  When reading 
I completely blew by the single quote on a single line part.  The db is 
sqlite3 and it seems happy with ''' strings.

Thanks,  Jim




From davea at davea.name  Sat Feb 23 03:03:00 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 22 Feb 2013 21:03:00 -0500
Subject: [Tutor] How to break long lines?
In-Reply-To: <kg95ka$ko9$1@ger.gmane.org>
References: <kg8nqc$s6a$1@ger.gmane.org> <51280354.5000909@pearwood.info>
	<kg95ka$ko9$1@ger.gmane.org>
Message-ID: <51282354.3030602@davea.name>

On 02/22/2013 08:22 PM, Jim Byrnes wrote:
>
>>   <snip>
>>
>
> Thanks for giving me so many options to use in the future.  When reading
> I completely blew by the single quote on a single line part.  The db is
> sqlite3 and it seems happy with ''' strings.
>

FWIW, there is absolutely no difference between a string object created 
with single quotes, one created with triple-quotes, or one created by 
calling some function, or by evaluating some expression.  sqlite3 could 
not possibly tell the difference, even if it wanted.

-- 
DaveA


From rohit_medi at hotmail.com  Sat Feb 23 03:11:19 2013
From: rohit_medi at hotmail.com (Rohit Mediratta)
Date: Fri, 22 Feb 2013 18:11:19 -0800
Subject: [Tutor] Trying to avoid using eval..
Message-ID: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>


Hi All,
   I want to reload my Module after I fix bugs and want to instantiate an object of a class contained in this module.

Heres the pseudo code of what I want to do:

def rerun(testBlock) :
    op = testBlock.split('.')
    module = op[0] ; className = op[1]
    reload(module)
    # testBlock is a string, so it needs evaluation!
    newObject = testBlock()

rerun('ModuleName.className')


Obviously, line 4 and line 6 dont work today. 
I want to know if there is any smart way to achieve this.
In my previous life (Tcl), I could use 'eval' or 'set' to achieve this.


thanks,
Rohit
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130222/b1cd8ebe/attachment-0001.html>

From robert.sjoblom at gmail.com  Sat Feb 23 03:26:54 2013
From: robert.sjoblom at gmail.com (Robert Sjoblom)
Date: Sat, 23 Feb 2013 03:26:54 +0100
Subject: [Tutor] object attribute validation
In-Reply-To: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
References: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
Message-ID: <CAJKU7g310_fhN7fKoHZxbE=BAA4y0mom3xYn6sFLySTFsu_Pkw@mail.gmail.com>

> I would like to validate data attributes before the object is instantiated
> or any changes thereafter. For example, following is a simple Person class
> with name and age attributes. [snip] Following is my
> example code:

> class Person(object):
>   def __init__(self,name,age):
>     self.name = name
>     self.age = age

You need a try/except, or some other form of validation here, otherwise:

>>> b = Person("Johnny", "Six")
>>> b.get_age()
'Six'

> Is this a good approach? Any suggestions for improving the code or
> alternative approaches would be helpful.

I can't help you with that question, since I'm still (!) wrapping my
head around objects and haven't really gotten around to looking at
data validation and when/how you should do it. I would probably use
try/except for the __init__ and the setter.
-- 
best regards,
Robert S.

From msirenef at lightbird.net  Sat Feb 23 03:28:23 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Fri, 22 Feb 2013 21:28:23 -0500
Subject: [Tutor] Trying to avoid using eval..
In-Reply-To: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
References: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
Message-ID: <51282947.3090208@lightbird.net>

On 02/22/2013 09:11 PM, Rohit Mediratta wrote:
> Hi All,
 > I want to reload my Module after I fix bugs and want to instantiate 
an object of a class contained in this module.
 >
 > Heres the pseudo code of what I want to do:
 >
 > def rerun(testBlock) :
 > op = testBlock.split('.')
 > module = op[0] ; className = op[1]
 > reload(module)
 > # testBlock is a string, so it needs evaluation!
 > newObject = testBlock()
 >
 > rerun('ModuleName.className')
 >
 >
 > Obviously, line 4 and line 6 dont work today.
 > I want to know if there is any smart way to achieve this.
 > In my previous life (Tcl), I could use 'eval' or 'set' to achieve this.
 >
 >
 > thanks,
 > Rohit
 >
 >
 > _______________________________________________
 > Tutor maillist - Tutor at python.org
 > To unsubscribe or change subscription options:
 > http://mail.python.org/mailman/listinfo/tutor


You can do:

module = __import__(module)


  -m


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

"The condition of man is already close to satiety and arrogance, and
there is danger of destruction of everything in existence."
- a Brahmin to Onesicritus, 327 BC, reported in Strabo's Geography


From davea at davea.name  Sat Feb 23 03:35:13 2013
From: davea at davea.name (Dave Angel)
Date: Fri, 22 Feb 2013 21:35:13 -0500
Subject: [Tutor] object attribute validation
In-Reply-To: <CAJKU7g310_fhN7fKoHZxbE=BAA4y0mom3xYn6sFLySTFsu_Pkw@mail.gmail.com>
References: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
	<CAJKU7g310_fhN7fKoHZxbE=BAA4y0mom3xYn6sFLySTFsu_Pkw@mail.gmail.com>
Message-ID: <51282AE1.4080608@davea.name>

On 02/22/2013 09:26 PM, Robert Sjoblom wrote:
>> I would like to validate data attributes before the object is instantiated
>> or any changes thereafter. For example, following is a simple Person class
>> with name and age attributes. [snip] Following is my
>> example code:
>
>> class Person(object):
>>    def __init__(self,name,age):
>>      self.name = name
>>      self.age = age
>

You forgot to include the rest of the class as the OP defined it. 
Therefore your conclusion is entirely wrong.

> You need a try/except, or some other form of validation here, otherwise:
>
>>>> b = Person("Johnny", "Six")
>>>> b.get_age()
> 'Six'
>
>> Is this a good approach? Any suggestions for improving the code or
>> alternative approaches would be helpful.
>
> I can't help you with that question, since I'm still (!) wrapping my
> head around objects and haven't really gotten around to looking at
> data validation and when/how you should do it. I would probably use
> try/except for the __init__ and the setter.
>

You only need it for the setter, and it's there.  The setter is called 
by the initializer, through the call to property.  Look up that mechanism.


-- 
DaveA

From dfjennings at gmail.com  Sat Feb 23 03:40:26 2013
From: dfjennings at gmail.com (Don Jennings)
Date: Fri, 22 Feb 2013 21:40:26 -0500
Subject: [Tutor] Tutor Digest, Vol 108, Issue 75
In-Reply-To: <mailman.12288.1361585548.2938.tutor@python.org>
References: <mailman.12288.1361585548.2938.tutor@python.org>
Message-ID: <C5ADC260-9D0D-401F-9807-60A81F29AC25@gmail.com>


On Feb 22, 2013, at 9:12 PM, tutor-request at python.org wrote:

> Message: 5
> Date: Fri, 22 Feb 2013 21:03:00 -0500
> From: Dave Angel <davea at davea.name>
> To: tutor at python.org
> Subject: Re: [Tutor] How to break long lines?
> Message-ID: <51282354.3030602 at davea.name>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> 
> On 02/22/2013 08:22 PM, Jim Byrnes wrote:
>> 
>>>  <snip>
>>> 
>> 
>> Thanks for giving me so many options to use in the future.  When reading
>> I completely blew by the single quote on a single line part.  The db is
>> sqlite3 and it seems happy with ''' strings.
>> 
> 
> FWIW, there is absolutely no difference between a string object created 
> with single quotes, one created with triple-quotes, or one created by 
> calling some function, or by evaluating some expression.

I beg to differ as it's bitten me on more than one occasion. As Steve pointed out, the triple quoted option embeds newlines. Maybe you mean something different than what I take your statement to mean?

Take care,
Don


From eryksun at gmail.com  Sat Feb 23 04:02:16 2013
From: eryksun at gmail.com (eryksun)
Date: Fri, 22 Feb 2013 22:02:16 -0500
Subject: [Tutor] How to break long lines?
In-Reply-To: <51280354.5000909@pearwood.info>
References: <kg8nqc$s6a$1@ger.gmane.org> <51280354.5000909@pearwood.info>
Message-ID: <CACL+1au2cBaRYQmpj1-4RNY5Wy3hwcot5C0MW60dQewxOcZrFA@mail.gmail.com>

On Fri, Feb 22, 2013 at 6:46 PM, Steven D'Aprano <steve at pearwood.info> wrote:
> At worst, the string concatenation + operator will apply at runtime,
> which for a short string like this is not a big deal. But in practice,
> I would expect Python's "keyhole optimizer" to see that it is only
> string literals being concatenated, and perform constant-folding at
> compile-time.
>
> (Note: constant-folding is not a promise of the language. Not all
> Python versions or implementations will do this.)

http://en.wikipedia.org/wiki/Peephole_optimization

A bit of trivia. The peephole optimizer (PyCode_Optimize) in CPython
3.3 was redesigned to use a stack, which allows folding even complex
expressions involving constants:


3.3:

    >>> dis.dis(lambda: ('a'*2 + 'b'*2) * 2)
      1           0 LOAD_CONST               7 ('aabbaabb')
                  3 RETURN_VALUE

3.2.3:

    >>> dis.dis(lambda: ('a'*2 + 'b'*2) * 2)
      1           0 LOAD_CONST               4 ('aa')
                  3 LOAD_CONST               5 ('bb')
                  6 BINARY_ADD
                  7 LOAD_CONST               2 (2)
                 10 BINARY_MULTIPLY
                 11 RETURN_VALUE

From steve at pearwood.info  Sat Feb 23 05:24:37 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 23 Feb 2013 15:24:37 +1100
Subject: [Tutor] Trying to avoid using eval..
In-Reply-To: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
References: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
Message-ID: <51284485.9090204@pearwood.info>

On 23/02/13 13:11, Rohit Mediratta wrote:
>
> Hi All,
>     I want to reload my Module after I fix bugs and want to instantiate an object of a class contained in this module.
>
> Heres the pseudo code of what I want to do:
>
> def rerun(testBlock) :
>      op = testBlock.split('.')
>      module = op[0] ; className = op[1]
>      reload(module)
>      # testBlock is a string, so it needs evaluation!
>      newObject = testBlock()
>
> rerun('ModuleName.className')
>
>
> Obviously, line 4 and line 6 dont work today.
> I want to know if there is any smart way to achieve this.
> In my previous life (Tcl), I could use 'eval' or 'set' to achieve this.


Untested:

def rerun(testBlock):
     modulename, classname = testBlock.split('.')
     module = __import__(modulename)
     reload(module)
     classobj = getattr(module, classname)
     return classobj()




-- 
Steven

From steve at pearwood.info  Sat Feb 23 05:31:49 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 23 Feb 2013 15:31:49 +1100
Subject: [Tutor] object attribute validation
In-Reply-To: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
References: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
Message-ID: <51284635.20702@pearwood.info>

On 23/02/13 10:50, neubyr wrote:
> I would like to validate data attributes before the object is instantiated
> or any changes thereafter. For example, following is a simple Person class
> with name and age attributes. I would like to validate whether age is an
> integer before it is added/changed in the object's dictionary. I have taken
> a simple integer validation example, but it could be something like
> DateField validation or X509 certificate validation as well. Following is
> my example code:
>
>
> class Person(object):
>    def __init__(self,name,age):
>      self.name = name
>      self.age = age
>
>    def get_age(self):
>      return self._age
>
>    def set_age(self,val):
>      try:
>        int(val)
>        self._age = val
>      except ValueError:
>          raise Exception('Invalid value for age')

The setter is unnecessarily complicated. Just let the ValueError, or TypeError, or any other error, propagate:

     def set_age(self,val):
         self._age = int(val)


This will allow the user to pass ages as strings, which I assume you want because that's what your code above does. instance.age = "6" will set the age to the int 6. If all you want to accept are ints, and nothing else:


     def set_age(self,val):
         if isinstance(val, int):
             self._age = val
         else:
             raise TypeError('expected an int, but got %r' % val)



>    def del_age(self):
>      del self._age
>
>    age = property(get_age,set_age,del_age)


In general, you would leave out the property deleter. I find that in general if you're validating attributes, you want them to be present and valid, so deleting should be an error.


-- 
Steven

From eryksun at gmail.com  Sat Feb 23 05:35:54 2013
From: eryksun at gmail.com (eryksun)
Date: Fri, 22 Feb 2013 23:35:54 -0500
Subject: [Tutor] Trying to avoid using eval..
In-Reply-To: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
References: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
Message-ID: <CACL+1aubhV976PVQ7o0+FCtShHeneyRRtQzWTqPQCgHszH2A2g@mail.gmail.com>

On Fri, Feb 22, 2013 at 9:11 PM, Rohit Mediratta <rohit_medi at hotmail.com> wrote:
> Heres the pseudo code of what I want to do:
>
> def rerun(testBlock) :
>     op = testBlock.split('.')
>     module = op[0] ; className = op[1]
>     reload(module)
>     # testBlock is a string, so it needs evaluation!
>     newObject = testBlock()
>
> rerun('ModuleName.className')

You can use __import__, and extend it to handle packages:

try:
    reload
except NameError:
    from imp import reload  # 3.x

def rerun(clsPath, *args):
    modPath, clsName = clsPath.rsplit('.', 1)
    mod = __import__(modPath, fromlist='not empty')
    reload(mod)
    cls = getattr(mod, clsName)
    return cls(*args)

The fromlist option only cares whether or not the sequence is empty.
If it's not empty you get the leaf (e.g. 'xml.etree.ElementTree' =>
ElementTree). If it's empty you get the base package (e.g.
'xml.etree.ElementTree' => xml).

From davea at davea.name  Sat Feb 23 06:43:29 2013
From: davea at davea.name (Dave Angel)
Date: Sat, 23 Feb 2013 00:43:29 -0500
Subject: [Tutor] How to break long lines?
In-Reply-To: <C5ADC260-9D0D-401F-9807-60A81F29AC25@gmail.com>
References: <mailman.12288.1361585548.2938.tutor@python.org>
	<C5ADC260-9D0D-401F-9807-60A81F29AC25@gmail.com>
Message-ID: <51285701.9060807@davea.name>

On 02/22/2013 09:40 PM, Don Jennings wrote:
>
> On Feb 22, 2013, at 9:12 PM, tutor-request at python.org wrote:
>
>> Message: 5
>> Date: Fri, 22 Feb 2013 21:03:00 -0500
>> From: Dave Angel <davea at davea.name>
>> <snip>
>>>
>>

Did you read the beginning of that digest?  It said to make sure and 
rename the subect line.  Tutor Digest isn't much of a title.  In the 
future, please reply to the individual message, which you can probably 
find as an attachment to the digest.  Not only will that give you the 
correct subject line, but it won't break threading either.

>> FWIW, there is absolutely no difference between a string object created
>> with single quotes, one created with triple-quotes, or one created by
>> calling some function, or by evaluating some expression.
>
> I beg to differ as it's bitten me on more than one occasion. As Steve pointed out, the triple quoted option embeds newlines. Maybe you mean something different than what I take your statement to mean?
>
>


The triple-quoting did not add newlines, the user of them did, probably 
along with extra spaces.  And all the other methods of creating a string 
object could have newlines as well.  No difference.  Certainly if one 
does not consider the contents of the string, then one should expect 
surprises.  If you run a triple-quoted string over more than a single 
line, you're deliberately and explicitly adding newlines.

If you call readline(), the string object you get back is likely to have 
a newline in it.  But not necessarily.  A programmer that doesn't 
consider that is setting up for a surprise.

If you have a \n in a string, you're probably going to get a newline. 
Even if you did something like:

     name = "c:\my\new\directory"

So if you don't consider that, you are likely to get a surprise.

Life is full of surprises;  it's important to know what your literals 
represent.

-- 
DaveA

From jitu.icfai at gmail.com  Sat Feb 23 07:14:31 2013
From: jitu.icfai at gmail.com (jitendra gupta)
Date: Sat, 23 Feb 2013 11:44:31 +0530
Subject: [Tutor] Unit test case
Message-ID: <CAM6SjUJUts5bJWG9PhcckQeHDpRjQHkUtrmFC+t08on7pDZb9A@mail.gmail.com>

Hi,

I am working one tool, which will do compile/run the workspace (that code
is written on c/c++). on that my requirment is i need to compile subfolder
also, i have wrote code for that also.
My problem is  , i am unable to write the Unit test case for that.  Since
my method (called run_subfolder) is not retrurning any thing (this will
create one command line argument in that i  am adding subfolder condition
and passing to the another class which will do actual thing) . For this
method i need to write unit test case. Since i dont have to workspace also
, so that i can test this case . Please advise on this. what i need to do.
this is possible or not, if not why.

Some forum suggested use mox. but i dont have more idea on this . in mox
how i will get thet output of the function



Thanks
Jitendra Kumar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130223/3ea4d04d/attachment.html>

From steve at pearwood.info  Sat Feb 23 09:43:54 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sat, 23 Feb 2013 19:43:54 +1100
Subject: [Tutor] How to break long lines?
In-Reply-To: <51282354.3030602@davea.name>
References: <kg8nqc$s6a$1@ger.gmane.org> <51280354.5000909@pearwood.info>
	<kg95ka$ko9$1@ger.gmane.org> <51282354.3030602@davea.name>
Message-ID: <5128814A.70204@pearwood.info>

On 23/02/13 13:03, Dave Angel wrote:
> On 02/22/2013 08:22 PM, Jim Byrnes wrote:
>>
>>>   <snip>
>>>
>>
>> Thanks for giving me so many options to use in the future.  When reading
>> I completely blew by the single quote on a single line part.  The db is
>> sqlite3 and it seems happy with ''' strings.
>>
>
> FWIW, there is absolutely no difference between a string object created with single quotes, one created with triple-quotes, or one created by calling some function, or by evaluating some expression.  sqlite3 could not possibly tell the difference, even if it wanted.


This is true. A triple-quoted string on a single line is a single line of text:

s = """Hello world"""

But in general, it is fair to expect that most triple-quoted strings will contain at least one newline, and single-quoted strings generally won't. It might be that some databases dislikes receiving SQL queries containing newlines.

In any case, it bears repeating that strings are strings in Python, whatever delimiters you use. The only difference between single-quoted, triple-quoted, and raw strings, is the parsing rules applied at compile-time, not the object you get at the end.


-- 
Steven

From __peter__ at web.de  Sat Feb 23 09:45:39 2013
From: __peter__ at web.de (Peter Otten)
Date: Sat, 23 Feb 2013 09:45:39 +0100
Subject: [Tutor] Trying to avoid using eval..
References: <BLU159-W209A362D574CB1BDD1D5A6FDF10@phx.gbl>
Message-ID: <kg9vi9$sqf$1@ger.gmane.org>

Rohit Mediratta wrote:

>    I want to reload my Module after I fix bugs and want to instantiate an
>    object of a class contained in this module.

Just a warning about reload(), as your question was already answered: 
Reloading modules may seem convenient at first, but can lead to strange 
errors as existing objects are not updated:

>>> import module
>>> obj = module.SomeClass()
>>> reload(module)
<module 'module' from 'module.pyc'>
>>> isinstance(obj, module.SomeClass)
False

Personally I avoid reload() (and importing the main script which leads to 
similar problems).


From alan.gauld at btinternet.com  Sat Feb 23 10:32:59 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 23 Feb 2013 09:32:59 +0000
Subject: [Tutor] Unit test case
In-Reply-To: <CAM6SjUJUts5bJWG9PhcckQeHDpRjQHkUtrmFC+t08on7pDZb9A@mail.gmail.com>
References: <CAM6SjUJUts5bJWG9PhcckQeHDpRjQHkUtrmFC+t08on7pDZb9A@mail.gmail.com>
Message-ID: <kga2c8$ia9$1@ger.gmane.org>

On 23/02/13 06:14, jitendra gupta wrote:

> I am working one tool, which will do compile/run the workspace (that
> code is written on c/c++). on that my requirment is i need to compile
> subfolder also, i have wrote code for that also.

Just to clarify. You are writing a tool in Python that will compile and 
run C/C++ code? I assume that the actual compilation is being done by 
some other tool? You are not writing a C compiler in Python?

Is that right so far?

> My problem is  , i am unable to write the Unit test case for that.

I'm not sure which bit you can't write the unit test for. Can you be 
more specific? Also what unit test framework are you using?

And while we are at it which OS and which Python version?
And finally which C/C++ tools are you using to do the compilation?
make? VisualStudio? XCode? gcc?

>   Since my method (called run_subfolder) is not retrurning any thing
> (this will create one command line argument in that i  am adding
> subfolder condition and passing to the another class which will do
> actual thing) .

Nope, you lost me there. What is creating a command line argument? Which 
command line? Where is the other class? Is it defined inside run_subfolder?

> For this method i need to write unit test case. Since i
> dont have to workspace also , so that i can test this case . Please

Sorry, what do you mean by Workspace in this context?

> advise on this. what i need to do. this is possible or not, if not why.

Sorry, I don't understand enough of what you are trying
to do to comment.

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From mcooganj at gmail.com  Sat Feb 23 22:56:58 2013
From: mcooganj at gmail.com (Matthew Johnson)
Date: Sun, 24 Feb 2013 08:56:58 +1100
Subject: [Tutor] getting and using information dict objects
Message-ID: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>

Hi,

I am trying to make a move from excel to python. My main need is
economic data -- to do economic analysis.

I have found the FRED package, and appear to have connected to the St
Louis Fed's FRED and downloaded some data, but i'm not sure what to do
with the objects that are returned.

_____

> import fred

> fred.key(fredKey)

(i guessed that i should not provide my own FRED API key)

> gnp = fred.series('GNPCA')

i can see that the object returned is a dict

> type(gnp)

<type 'dict'>

but i cannot see how to access the observations, or use them in any way.

After a bit of fiddling about, i managed to find another method, which
i think also returns a dictionary of values and meta-data:

gnpObvs = fred.observations('GNPCA')

however I cannot figure out how to get the observation values out and
use them.

I may be thinking in the wrong framework -- i guess i'm expecting
something that is an intuitive as an excel table.

The end game for me is making plots of variables, combining them, and
doing regressions -- i cannot see how i might take what i'm getting
from these FRED / Python dicts to actual data analysis.

Could someone please help me take these first steps?

thanks + best regards

matt

From fomcl at yahoo.com  Sat Feb 23 23:12:04 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Sat, 23 Feb 2013 14:12:04 -0800 (PST)
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
Message-ID: <1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>



> I am trying to make a move from excel to python. My main need is

> economic data -- to do economic analysis.

If you say Python and Excel the first thing that comes to mind is the xlrd package

<snip> 

> The end game for me is making plots of variables, combining them, and
> doing regressions -- i cannot see how i might take what i'm getting
> from these FRED / Python dicts to actual data analysis.
> 
> Could someone please help me take these first steps?

I'm not familiar with the Fred package. Pandas (http://pandas.pydata.org/) seems to be perfect for what you're doing. It's an R-like layer on top of numpy. It can be used to read Excel and many other formats and it works well with matplotlib. It's a cool tool to manipulate/massage/munge data, then analyze it (though R has still more, often ueber-exotic, stats). Its origin lies in the analysis of... economic data. Best used with IPython.


From msirenef at lightbird.net  Sat Feb 23 23:28:19 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Sat, 23 Feb 2013 17:28:19 -0500
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
Message-ID: <51294283.4090702@lightbird.net>

On 02/23/2013 04:56 PM, Matthew Johnson wrote:
> Hi,
>
> I am trying to make a move from excel to python. My main need is
> economic data -- to do economic analysis.
>
> I have found the FRED package, and appear to have connected to the St
> Louis Fed's FRED and downloaded some data, but i'm not sure what to do
> with the objects that are returned.
>
> _____
>
>> import fred
>> fred.key(fredKey)
> (i guessed that i should not provide my own FRED API key)
>
>> gnp = fred.series('GNPCA')
> i can see that the object returned is a dict
>
>> type(gnp)
> <type 'dict'>
>
> but i cannot see how to access the observations, or use them in any way.
>
> After a bit of fiddling about, i managed to find another method, which
> i think also returns a dictionary of values and meta-data:
>
> gnpObvs = fred.observations('GNPCA')
>
> however I cannot figure out how to get the observation values out and
> use them.
>
> I may be thinking in the wrong framework -- i guess i'm expecting
> something that is an intuitive as an excel table.
>
> The end game for me is making plots of variables, combining them, and
> doing regressions -- i cannot see how i might take what i'm getting
> from these FRED / Python dicts to actual data analysis.
>
> Could someone please help me take these first steps?
>
> thanks + best regards
>
> matt
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

Basic use of dictionaries is:

d = dict(x=1, y=2)
for key, val in d.items():
  print(key, val)

print d['x']
print d['y']

  -m

-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/


From alan.gauld at btinternet.com  Sat Feb 23 23:44:49 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Sat, 23 Feb 2013 22:44:49 +0000
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
Message-ID: <kgbgou$p4e$1@ger.gmane.org>

On 23/02/13 21:56, Matthew Johnson wrote:

> I am trying to make a move from excel to python. My main need is
> economic data -- to do economic analysis.

Any particular reason for moving to Python? I know this is a
Python list and we are all Python fans but, frankly, it sounds
like your needs might be better met with R.

There are Python bindings for R but, honestly, I think raw R
might suit what you want better. You can read Excel data into a data 
frame and then slice and dice it any which way you want.

The right tool for the job...

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From mcooganj at gmail.com  Sat Feb 23 23:51:52 2013
From: mcooganj at gmail.com (Matthew Johnson)
Date: Sun, 24 Feb 2013 09:51:52 +1100
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
	<1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
Message-ID: <-1508751986444041054@unknownmsgid>

I can see i was being unclear: i wish to replace my analysis in excel
with analysis in python.

I am fairly sure i am querying the FRED API, but i am unsure how to
_access and use_ the dict objects that it is returning. For example,
how would i just print out values?

Thanks for your help

On 24/02/2013, at 9:12 AM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:

>
>
>> I am trying to make a move from excel to python. My main need is
>
>> economic data -- to do economic analysis.
>
> If you say Python and Excel the first thing that comes to mind is the xlrd package
>
> <snip>
>
>> The end game for me is making plots of variables, combining them, and
>> doing regressions -- i cannot see how i might take what i'm getting
>> from these FRED / Python dicts to actual data analysis.
>>
>> Could someone please help me take these first steps?
>
> I'm not familiar with the Fred package. Pandas (http://pandas.pydata.org/) seems to be perfect for what you're doing. It's an R-like layer on top of numpy. It can be used to read Excel and many other formats and it works well with matplotlib. It's a cool tool to manipulate/massage/munge data, then analyze it (though R has still more, often ueber-exotic, stats). Its origin lies in the analysis of... economic data. Best used with IPython.
>

From robert.sjoblom at gmail.com  Sun Feb 24 00:40:58 2013
From: robert.sjoblom at gmail.com (Robert Sjoblom)
Date: Sun, 24 Feb 2013 00:40:58 +0100
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <-1508751986444041054@unknownmsgid>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
	<1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
	<-1508751986444041054@unknownmsgid>
Message-ID: <CAJKU7g3PmzHW2KE8-W2b+SwZCG9=-7zTdh=kGX-mdKY8sfW3Aw@mail.gmail.com>

> I am fairly sure i am querying the FRED API, but i am unsure how to
> _access and use_ the dict objects that it is returning. For example,
> how would i just print out values?

If it's a dict object, the standard dictionary behavior and methods
should work. I've not looked closely at the FRED API, but something
like (untested):
for key in dictionary:
    print(key, dictionary[key])

could possibly get you started.

-- 
best regards,
Robert S.

From mcooganj at gmail.com  Sun Feb 24 00:51:12 2013
From: mcooganj at gmail.com (Matthew Johnson)
Date: Sun, 24 Feb 2013 10:51:12 +1100
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <CAJKU7g3PmzHW2KE8-W2b+SwZCG9=-7zTdh=kGX-mdKY8sfW3Aw@mail.gmail.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
	<1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
	<-1508751986444041054@unknownmsgid>
	<CAJKU7g3PmzHW2KE8-W2b+SwZCG9=-7zTdh=kGX-mdKY8sfW3Aw@mail.gmail.com>
Message-ID: <1403569224316556901@unknownmsgid>

Thanks very much; hopefully that's the boost i need to get rolling.

Best regards

matt

On 24/02/2013, at 10:40 AM, Robert Sjoblom <robert.sjoblom at gmail.com> wrote:

>> I am fairly sure i am querying the FRED API, but i am unsure how to
>> _access and use_ the dict objects that it is returning. For example,
>> how would i just print out values?
>
> If it's a dict object, the standard dictionary behavior and methods
> should work. I've not looked closely at the FRED API, but something
> like (untested):
> for key in dictionary:
>    print(key, dictionary[key])
>
> could possibly get you started.
>
> --
> best regards,
> Robert S.

From mcooganj at gmail.com  Sun Feb 24 03:40:42 2013
From: mcooganj at gmail.com (Matthew Johnson)
Date: Sun, 24 Feb 2013 13:40:42 +1100
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <1403569224316556901@unknownmsgid>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
	<1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
	<-1508751986444041054@unknownmsgid>
	<CAJKU7g3PmzHW2KE8-W2b+SwZCG9=-7zTdh=kGX-mdKY8sfW3Aw@mail.gmail.com>
	<1403569224316556901@unknownmsgid>
Message-ID: <CABCh89qaGoyq3C_esXPpoMSoYPr1JYum4V6Rgj4iB_S8PNYA_Q@mail.gmail.com>

For the sake of those who finds this thread -- the date / value pairs
can be printed by the following:

import fred

fred.key(fredKey)

gnpObvs = fred.observations('GNPCA')

for i in range(1, len(gnpObvs['observations']['observation'])):
    print gnpObvs['observations']['observation'][i]['date'],
gnpObvs['observations']['observation'][i]['value']

mj

On 24 February 2013 10:51, Matthew Johnson <mcooganj at gmail.com> wrote:
> Thanks very much; hopefully that's the boost i need to get rolling.
>
> Best regards
>
> matt
>
> On 24/02/2013, at 10:40 AM, Robert Sjoblom <robert.sjoblom at gmail.com> wrote:
>
>>> I am fairly sure i am querying the FRED API, but i am unsure how to
>>> _access and use_ the dict objects that it is returning. For example,
>>> how would i just print out values?
>>
>> If it's a dict object, the standard dictionary behavior and methods
>> should work. I've not looked closely at the FRED API, but something
>> like (untested):
>> for key in dictionary:
>>    print(key, dictionary[key])
>>
>> could possibly get you started.
>>
>> --
>> best regards,
>> Robert S.

From msirenef at lightbird.net  Sun Feb 24 03:55:58 2013
From: msirenef at lightbird.net (Mitya Sirenef)
Date: Sat, 23 Feb 2013 21:55:58 -0500
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <CABCh89qaGoyq3C_esXPpoMSoYPr1JYum4V6Rgj4iB_S8PNYA_Q@mail.gmail.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
	<1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
	<-1508751986444041054@unknownmsgid>
	<CAJKU7g3PmzHW2KE8-W2b+SwZCG9=-7zTdh=kGX-mdKY8sfW3Aw@mail.gmail.com>
	<1403569224316556901@unknownmsgid>
	<CABCh89qaGoyq3C_esXPpoMSoYPr1JYum4V6Rgj4iB_S8PNYA_Q@mail.gmail.com>
Message-ID: <5129813E.3010306@lightbird.net>

On 02/23/2013 09:40 PM, Matthew Johnson wrote:
> For the sake of those who finds  this thread -- the date / value pairs
 > can be printed by the following:
 >
 > import fred
 >
 > fred.key(fredKey)
 >
 > gnpObvs = fred.observations('GNPCA')
 >
 > for i in range(1, len(gnpObvs['observations']['observation'])):
 > print gnpObvs['observations']['observation'][i]['date'],
 > gnpObvs['observations']['observation'][i]['value']
 >
 > mj
 >


You can do this in a simpler way (in python 2.x):

observation = gnpObvs["observation"]["observation"]

for obsdict in observation.values()[1:]:
     print obsdict["date"]


if you need the 'i' counter, you can do:

for i, obsdict in enumerate(observation.values())[1:]:
     print obsdict["date"]

HTH, -m


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

Do whatever you will, but first be such as are able to will.
Friedrich Nietzsche


From davea at davea.name  Sun Feb 24 04:04:06 2013
From: davea at davea.name (Dave Angel)
Date: Sat, 23 Feb 2013 22:04:06 -0500
Subject: [Tutor] getting and using information dict objects
In-Reply-To: <CABCh89qaGoyq3C_esXPpoMSoYPr1JYum4V6Rgj4iB_S8PNYA_Q@mail.gmail.com>
References: <CABCh89rktv7kGKUkiBXnkpKW-8xTFJ0tPBc0jP+BDKM3BdLy7w@mail.gmail.com>
	<1361657524.42276.YahooMailNeo@web163805.mail.gq1.yahoo.com>
	<-1508751986444041054@unknownmsgid>
	<CAJKU7g3PmzHW2KE8-W2b+SwZCG9=-7zTdh=kGX-mdKY8sfW3Aw@mail.gmail.com>
	<1403569224316556901@unknownmsgid>
	<CABCh89qaGoyq3C_esXPpoMSoYPr1JYum4V6Rgj4iB_S8PNYA_Q@mail.gmail.com>
Message-ID: <51298326.9040805@davea.name>

On 02/23/2013 09:40 PM, Matthew Johnson wrote:
> For the sake of those who finds this thread -- the date / value pairs
> can be printed by the following:
>
> import fred
>
> fred.key(fredKey)
>
> gnpObvs = fred.observations('GNPCA')
>
> for i in range(1, len(gnpObvs['observations']['observation'])):
>      print gnpObvs['observations']['observation'][i]['date'],
> gnpObvs['observations']['observation'][i]['value']
>
> mj
>

So it's returning a dict of dicts of lists of dicts?

Perhaps this loop would read better (untested):

for  item in gnpObvs['observations']['observation']:
     print item['date'], item['value']





-- 
DaveA

From sudo.nohup at gmail.com  Sun Feb 24 11:56:49 2013
From: sudo.nohup at gmail.com (Sudo Nohup)
Date: Sun, 24 Feb 2013 18:56:49 +0800
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
Message-ID: <CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>

Dear all,

I want to change the value of a char in a string for Python. However, It
seems that "=" does not work.

Could you help me? Thanks!

str = "abcd"
result = [char = 'a' for char in str if char == 'c']


OR:

str = 'abcd'
for char in str:
    if char == 'a':
       char = 'c'


OR:

str = 'abcd'
for i in range(len(str)):
    if str[i] == 'a':
       str[i] = 'c'

(
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: 'str' object does not support item assignment
)


James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130224/623f9095/attachment.html>

From sudo.nohup at gmail.com  Sun Feb 24 12:42:16 2013
From: sudo.nohup at gmail.com (Sudo Nohup)
Date: Sun, 24 Feb 2013 19:42:16 +0800
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA6-a7G_xiuwsDOev6o-2bkMWuojQ7nFc0dg64rxtxP=arQ@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
	<CAF=CqftG16XDV1emefqr94MBE=WFzNLguOakcUTQ6PD0AU9E2g@mail.gmail.com>
	<CAFXiA6-a7G_xiuwsDOev6o-2bkMWuojQ7nFc0dg64rxtxP=arQ@mail.gmail.com>
Message-ID: <CAFXiA694rT+Z4tNy_0Aq=gCCqKi-zZj97sG20seGTbsnRAcMbw@mail.gmail.com>

Actually, I would like to substitute all the chars in a string with its
ascii adding 2, for cracking the naive "Caesar cipher".

So, there is a list of chars to be replaced.

If I use "replace" function, I have to replace them one by one.

Thanks all the same.

On Sun, Feb 24, 2013 at 7:32 PM, Marco Mistroni <mmistroni at gmail.com> wrote:

> You can use replace instead?
>  On 24 Feb 2013 10:59, "Sudo Nohup" <sudo.nohup at gmail.com> wrote:
>
>>  Dear all,
>>
>> I want to change the value of a char in a string for Python. However, It
>> seems that "=" does not work.
>>
>> Could you help me? Thanks!
>>
>> str = "abcd"
>> result = [char = 'a' for char in str if char == 'c']
>>
>>
>> OR:
>>
>> str = 'abcd'
>> for char in str:
>>     if char == 'a':
>>        char = 'c'
>>
>>
>> OR:
>>
>> str = 'abcd'
>> for i in range(len(str)):
>>     if str[i] == 'a':
>>        str[i] = 'c'
>>
>> (
>> Traceback (most recent call last):
>>   File "<stdin>", line 3, in <module>
>>  TypeError: 'str' object does not support item assignment
>> )
>>
>>
>> James
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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/20130224/f686b142/attachment.html>

From pasokan at talentsprint.com  Sun Feb 24 12:47:15 2013
From: pasokan at talentsprint.com (Asokan Pichai)
Date: Sun, 24 Feb 2013 17:17:15 +0530
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
Message-ID: <CAJAvg=ErR4y9nKC4sOdPOCRT4UTVrS5oHrPKEAZc9s0LiE1Tpg@mail.gmail.com>

On Feb 24, 2013 4:27 PM, "Sudo Nohup" <sudo.nohup at gmail.com> wrote:
>
> Dear all,
>
> I want to change the value of a char in a string for Python. However, It
seems that "=" does not work.
>
> Could you help me? Thanks!
>
> str = "abcd"
> result = [char = 'a' for char in str if char == 'c']
>
>
> OR:
>
> str = 'abcd'
> for char in str:
>     if char == 'a':
>        char = 'c'
>
>
> OR:
>
> str = 'abcd'
> for i in range(len(str)):
>     if str[i] == 'a':
>        str[i] = 'c'
>
> (
> Traceback (most recent call last):
>   File "<stdin>", line 3, in <module>
> TypeError: 'str' object does not support item assignment
> )

Look up string replace function.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130224/a1950d03/attachment.html>

From sudo.nohup at gmail.com  Sun Feb 24 12:57:42 2013
From: sudo.nohup at gmail.com (Sudo Nohup)
Date: Sun, 24 Feb 2013 19:57:42 +0800
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAJAvg=ErR4y9nKC4sOdPOCRT4UTVrS5oHrPKEAZc9s0LiE1Tpg@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
	<CAJAvg=ErR4y9nKC4sOdPOCRT4UTVrS5oHrPKEAZc9s0LiE1Tpg@mail.gmail.com>
Message-ID: <CAFXiA69nqX5gwb5cybA70zCWZvexV5061KoOeMdfwfZ0WBTKew@mail.gmail.com>

Thanks for your help.

I just found a webpage used for me:
http://stackoverflow.com/questions/10017147/python-replace-characters-in-string

That page provides some other solutions. Thanks!

On Sun, Feb 24, 2013 at 7:47 PM, Asokan Pichai <pasokan at talentsprint.com>wrote:

> On Feb 24, 2013 4:27 PM, "Sudo Nohup" <sudo.nohup at gmail.com> wrote:
> >
> > Dear all,
> >
> > I want to change the value of a char in a string for Python. However, It
> seems that "=" does not work.
> >
> > Could you help me? Thanks!
> >
> > str = "abcd"
> > result = [char = 'a' for char in str if char == 'c']
> >
> >
> > OR:
> >
> > str = 'abcd'
> > for char in str:
> >     if char == 'a':
> >        char = 'c'
> >
> >
> > OR:
> >
> > str = 'abcd'
> > for i in range(len(str)):
> >     if str[i] == 'a':
> >        str[i] = 'c'
> >
> > (
> > Traceback (most recent call last):
> >   File "<stdin>", line 3, in <module>
> > TypeError: 'str' object does not support item assignment
> > )
>
> Look up string replace function.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130224/c1fc6d5b/attachment.html>

From steve at pearwood.info  Sun Feb 24 13:32:54 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sun, 24 Feb 2013 23:32:54 +1100
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
Message-ID: <512A0876.1080005@pearwood.info>

On 24/02/13 21:56, Sudo Nohup wrote:
> Dear all,
>
> I want to change the value of a char in a string for Python. However, It
> seems that "=" does not work.


Strings are immutable, which means that you cannot modify them in place. You can only create a new string with the characters you want.

If you want to change one letter, the simplest way is with string slicing:

s = "Hello world!"
t = s[:6] + "W" + s[7:]
print t
=> prints "Hello World!"


If you want to change many letters, the best way is to create a new list of the characters, and then join them:

s = "Hello"
chars = [chr(ord(c) + 13) for c in s]
t = ''.join(chars)
print t
=> prints 'Uryy|'



Best still is to use the string methods, if you can, such as str.upper(), str.replace(), etc.

http://docs.python.org/2/tutorial/introduction.html#strings

http://docs.python.org/2/library/stdtypes.html#string-methods



-- 
Steven

From steve at pearwood.info  Sun Feb 24 13:35:17 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Sun, 24 Feb 2013 23:35:17 +1100
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA694rT+Z4tNy_0Aq=gCCqKi-zZj97sG20seGTbsnRAcMbw@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
	<CAF=CqftG16XDV1emefqr94MBE=WFzNLguOakcUTQ6PD0AU9E2g@mail.gmail.com>
	<CAFXiA6-a7G_xiuwsDOev6o-2bkMWuojQ7nFc0dg64rxtxP=arQ@mail.gmail.com>
	<CAFXiA694rT+Z4tNy_0Aq=gCCqKi-zZj97sG20seGTbsnRAcMbw@mail.gmail.com>
Message-ID: <512A0905.8080603@pearwood.info>

On 24/02/13 22:42, Sudo Nohup wrote:
> Actually, I would like to substitute all the chars in a string with its
> ascii adding 2, for cracking the naive "Caesar cipher".


A shameless plug:

https://pypi.python.org/pypi/obfuscate



-- 
Steven


From davea at davea.name  Sun Feb 24 13:40:31 2013
From: davea at davea.name (Dave Angel)
Date: Sun, 24 Feb 2013 07:40:31 -0500
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA69nqX5gwb5cybA70zCWZvexV5061KoOeMdfwfZ0WBTKew@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
	<CAJAvg=ErR4y9nKC4sOdPOCRT4UTVrS5oHrPKEAZc9s0LiE1Tpg@mail.gmail.com>
	<CAFXiA69nqX5gwb5cybA70zCWZvexV5061KoOeMdfwfZ0WBTKew@mail.gmail.com>
Message-ID: <512A0A3F.2030503@davea.name>

Both your later remarks are top-posted, ruining the sequence of who 
posted what.

On 02/24/2013 06:57 AM, Sudo Nohup wrote:
> Thanks for your help.
>
> I just found a webpage used for me:
> http://stackoverflow.com/questions/10017147/python-replace-characters-in-string
>
> That page provides some other solutions. Thanks!
>
> On Sun, Feb 24, 2013 at 7:47 PM, Asokan Pichai <pasokan at talentsprint.com>wrote:
>
>> On Feb 24, 2013 4:27 PM, "Sudo Nohup" <sudo.nohup at gmail.com> wrote:
>>>
>>> Dear all,
>>>
>>> I want to change the value of a char in a string for Python. However, It
>> seems that "=" does not work.

assignment works fine, when it's really assignment.  But it doesn't work 
inside an expression, and you cannot change an immutable object in place.

>>>
>>> Could you help me? Thanks!
>>>
>>> str = "abcd"
>>> result = [char = 'a' for char in str if char == 'c']

In a list comprehension, the if expression is used to skip items from 
the sequence.  So the above form, modified, might be used to remove 
selected characters from the string.

By the way, since 'str' is a builtin, it's a bad practice to take it 
over for your own use.  For example, what if you subsequently needed to 
convert an int to a string?

>>>
>>>
>>> OR:
>>>
>>> str = 'abcd'
>>> for char in str:
>>>      if char == 'a':
>>>         char = 'c'

You create a new object, and bind it to char, but then you don't do 
anything with it.

>>>
>>>
>>> OR:
>>>
>>> str = 'abcd'
>>> for i in range(len(str)):
>>>      if str[i] == 'a':
>>>         str[i] = 'c'
>>>
>>> (
>>> Traceback (most recent call last):
>>>    File "<stdin>", line 3, in <module>
>>> TypeError: 'str' object does not support item assignment
>>> )

A string object is immutable, so that you cannot use assignment to 
replace portions of it.

>>
>> Look up string replace function.
>>
>

That of course is the simplest answer to the problem as originally given.

(Here is where your amendment to the problem should have been given, 
rather than top-posting it.)

But you now say you're planning to replace all the characters in the 
string, according to a formula.

What yo should have specified in the first place is what version of 
Python you're using.  I'll assume 2.7

This amended problem would lend itself nicely to translate(), and the 
link you posted does mention that.

But there are several other approaches, similar to the ones you already 
tried, and sometimes one of them is more interesting or useful.

For example, a list comprehension very close to what you tried would 
work fine (untested):

temp = [ chr( ord(char) + 2 ) for char in mystring]
result = "".join(temp)

Likewise a loop:

result = []
for char in mystring:
     char = chr ( ord(char) + 2
     result.append(char)
result = "".join(result)


-- 
DaveA

From sudo.nohup at gmail.com  Sun Feb 24 14:26:03 2013
From: sudo.nohup at gmail.com (Sudo Nohup)
Date: Sun, 24 Feb 2013 21:26:03 +0800
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <512A0A3F.2030503@davea.name>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
	<CAJAvg=ErR4y9nKC4sOdPOCRT4UTVrS5oHrPKEAZc9s0LiE1Tpg@mail.gmail.com>
	<CAFXiA69nqX5gwb5cybA70zCWZvexV5061KoOeMdfwfZ0WBTKew@mail.gmail.com>
	<512A0A3F.2030503@davea.name>
Message-ID: <CAFXiA6-UL8i4JkHzrrA9QOpNGyhSrR25U0JZpG6ZEyTZ4UFwnw@mail.gmail.com>

Thanks very much!!

I learnt a lot from you kind reply. Not only is it about the question
itself, but also about how to ask a question in a mailing list.(Sorry that
it is the first time for me to ask questions in a mailing list).

The question comes from a riddle of the PythonChallenge website(
http://www.pythonchallenge.com/pc/def/map.html).

Now I write the code as the following,

mystring = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc
dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm
jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
temp = [ chr ( (ord(char)-ord('a')+2)%26 +ord('a'))  if
(ord(char)>=ord('a') and ord(char)<=ord('z')) else char  for char in
mystring ]
result = "".join(temp)
print result

OR

mystring = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc
dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm
jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
result = []
for char in mystring:
    if(ord(char)>=ord('a') and ord(char)<=ord('z')):
        char = chr ( (ord(char)-ord('a')+2)%26 +ord('a'))
    result.append(char)
result = "".join(result)
print result

Thanks,
James


On Sun, Feb 24, 2013 at 8:40 PM, Dave Angel <davea at davea.name> wrote:

> Both your later remarks are top-posted, ruining the sequence of who posted
> what.
>
>
> On 02/24/2013 06:57 AM, Sudo Nohup wrote:
>
>> Thanks for your help.
>>
>> I just found a webpage used for me:
>> http://stackoverflow.com/**questions/10017147/python-**
>> replace-characters-in-string<http://stackoverflow.com/questions/10017147/python-replace-characters-in-string>
>>
>> That page provides some other solutions. Thanks!
>>
>> On Sun, Feb 24, 2013 at 7:47 PM, Asokan Pichai <pasokan at talentsprint.com>
>> **wrote:
>>
>>  On Feb 24, 2013 4:27 PM, "Sudo Nohup" <sudo.nohup at gmail.com> wrote:
>>>
>>>>
>>>> Dear all,
>>>>
>>>> I want to change the value of a char in a string for Python. However, It
>>>>
>>> seems that "=" does not work.
>>>
>>
> assignment works fine, when it's really assignment.  But it doesn't work
> inside an expression, and you cannot change an immutable object in place.
>
>
>
>>>> Could you help me? Thanks!
>>>>
>>>> str = "abcd"
>>>> result = [char = 'a' for char in str if char == 'c']
>>>>
>>>
> In a list comprehension, the if expression is used to skip items from the
> sequence.  So the above form, modified, might be used to remove selected
> characters from the string.
>
> By the way, since 'str' is a builtin, it's a bad practice to take it over
> for your own use.  For example, what if you subsequently needed to convert
> an int to a string?
>
>
>
>>>>
>>>> OR:
>>>>
>>>> str = 'abcd'
>>>> for char in str:
>>>>      if char == 'a':
>>>>         char = 'c'
>>>>
>>>
> You create a new object, and bind it to char, but then you don't do
> anything with it.
>
>
>
>>>>
>>>> OR:
>>>>
>>>> str = 'abcd'
>>>> for i in range(len(str)):
>>>>      if str[i] == 'a':
>>>>         str[i] = 'c'
>>>>
>>>> (
>>>> Traceback (most recent call last):
>>>>    File "<stdin>", line 3, in <module>
>>>> TypeError: 'str' object does not support item assignment
>>>> )
>>>>
>>>
> A string object is immutable, so that you cannot use assignment to replace
> portions of it.
>
>
>
>>> Look up string replace function.
>>>
>>>
>>
> That of course is the simplest answer to the problem as originally given.
>
> (Here is where your amendment to the problem should have been given,
> rather than top-posting it.)
>
> But you now say you're planning to replace all the characters in the
> string, according to a formula.
>
> What yo should have specified in the first place is what version of Python
> you're using.  I'll assume 2.7
>
> This amended problem would lend itself nicely to translate(), and the link
> you posted does mention that.
>
> But there are several other approaches, similar to the ones you already
> tried, and sometimes one of them is more interesting or useful.
>
> For example, a list comprehension very close to what you tried would work
> fine (untested):
>
> temp = [ chr( ord(char) + 2 ) for char in mystring]
> result = "".join(temp)
>
> Likewise a loop:
>
> result = []
> for char in mystring:
>     char = chr ( ord(char) + 2
>     result.append(char)
> result = "".join(result)
>
>
> --
> DaveA
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130224/ca5e340e/attachment.html>

From joskerc at gmail.com  Sun Feb 24 15:12:23 2013
From: joskerc at gmail.com (Jos Kerc)
Date: Sun, 24 Feb 2013 15:12:23 +0100
Subject: [Tutor] How to change the char in string for Python
In-Reply-To: <CAFXiA6-UL8i4JkHzrrA9QOpNGyhSrR25U0JZpG6ZEyTZ4UFwnw@mail.gmail.com>
References: <CAFXiA6-hh0KgzD=u=OZ0L04KDgRSdJz8Zri4ux_Evhq2bftwmQ@mail.gmail.com>
	<CAFXiA69Wi0ggoOsDJocmJWthyWcLr_piEa7S6LU+M2jY7J24EQ@mail.gmail.com>
	<CAJAvg=ErR4y9nKC4sOdPOCRT4UTVrS5oHrPKEAZc9s0LiE1Tpg@mail.gmail.com>
	<CAFXiA69nqX5gwb5cybA70zCWZvexV5061KoOeMdfwfZ0WBTKew@mail.gmail.com>
	<512A0A3F.2030503@davea.name>
	<CAFXiA6-UL8i4JkHzrrA9QOpNGyhSrR25U0JZpG6ZEyTZ4UFwnw@mail.gmail.com>
Message-ID: <CAKs9Ess3FHpJZ4WGL7AA22AWbhnKUBE80h+uhmdzuJewvJCCPQ@mail.gmail.com>

On Sun, Feb 24, 2013 at 2:26 PM, Sudo Nohup <sudo.nohup at gmail.com> wrote:

> Thanks very much!!
>
> I learnt a lot from you kind reply. Not only is it about the question
> itself, but also about how to ask a question in a mailing list.(Sorry that
> it is the first time for me to ask questions in a mailing list).
>
> The question comes from a riddle of the PythonChallenge website(
> http://www.pythonchallenge.com/pc/def/map.html).
>
> Now I write the code as the following,
>
> mystring = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq
> ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm
> jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
> temp = [ chr ( (ord(char)-ord('a')+2)%26 +ord('a'))  if
> (ord(char)>=ord('a') and ord(char)<=ord('z')) else char  for char in
> mystring ]
> result = "".join(temp)
> print result
>
> OR
>
> mystring = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq
> ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm
> jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
> result = []
> for char in mystring:
>     if(ord(char)>=ord('a') and ord(char)<=ord('z')):
>         char = chr ( (ord(char)-ord('a')+2)%26 +ord('a'))
>     result.append(char)
> result = "".join(result)
> print result
>
> Thanks,
> James
>
>
>
>
Hi James,

for this riddle, look for the translate() method.


Have fun nwith the challenges.

Jos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130224/57a8f5e4/attachment.html>

From neubyr at gmail.com  Sun Feb 24 22:35:52 2013
From: neubyr at gmail.com (neubyr)
Date: Sun, 24 Feb 2013 15:35:52 -0600
Subject: [Tutor] object attribute validation
In-Reply-To: <51284635.20702@pearwood.info>
References: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
	<51284635.20702@pearwood.info>
Message-ID: <CALFxCvzeywH0z57=kzXy9LNqsQAAfnO2x7EMXD2brEvqsGcF0g@mail.gmail.com>

On Fri, Feb 22, 2013 at 10:31 PM, Steven D'Aprano <steve at pearwood.info>wrote:

> On 23/02/13 10:50, neubyr wrote:
>
>> I would like to validate data attributes before the object is instantiated
>> or any changes thereafter. For example, following is a simple Person class
>> with name and age attributes. I would like to validate whether age is an
>> integer before it is added/changed in the object's dictionary. I have
>> taken
>> a simple integer validation example, but it could be something like
>> DateField validation or X509 certificate validation as well. Following is
>> my example code:
>>
>>
>> class Person(object):
>>    def __init__(self,name,age):
>>      self.name = name
>>      self.age = age
>>
>>    def get_age(self):
>>      return self._age
>>
>>    def set_age(self,val):
>>      try:
>>        int(val)
>>        self._age = val
>>      except ValueError:
>>          raise Exception('Invalid value for age')
>>
>
> The setter is unnecessarily complicated. Just let the ValueError, or
> TypeError, or any other error, propagate:
>
>     def set_age(self,val):
>         self._age = int(val)
>
>
> This will allow the user to pass ages as strings, which I assume you want
> because that's what your code above does. instance.age = "6" will set the
> age to the int 6. If all you want to accept are ints, and nothing else:
>
>
>     def set_age(self,val):
>         if isinstance(val, int):
>             self._age = val
>         else:
>             raise TypeError('expected an int, but got %r' % val)
>
>
>
>
>     def del_age(self):
>>      del self._age
>>
>>    age = property(get_age,set_age,del_**age)
>>
>
>
> In general, you would leave out the property deleter. I find that in
> general if you're validating attributes, you want them to be present and
> valid, so deleting should be an error.
>
>
> --
> Steven
>
>

Thank you for your comments Steven.

Yes, I think I should remove property deleter in this case.

I would like to use this Person class in another class. For example, if
Person class is 'model' in a small MVC-style web application, then where
should I place my validation. A view form will be passing parameters to a
controller which will create and write Person objects/models. Should the
validation be in place at all three levels?

I am inclined towards adding integer validation in views, but I am not sure
where should I add it in a controller class. Also, it's easy to add integer
validation in view form (javascript), but what if I have a more complex
format - X509 certificate or  some other file-type related validation? Is
it OK to validate them only in property setter methods?


-- N
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130224/0f7bc6d7/attachment-0001.html>

From ramit.prasad at jpmorgan.com  Mon Feb 25 18:44:41 2013
From: ramit.prasad at jpmorgan.com (Prasad, Ramit)
Date: Mon, 25 Feb 2013 17:44:41 +0000
Subject: [Tutor] object attribute validation
In-Reply-To: <CALFxCvzeywH0z57=kzXy9LNqsQAAfnO2x7EMXD2brEvqsGcF0g@mail.gmail.com>
References: <CALFxCvzDuaWUsL0fWsgjq85dtJh7Uv+8y_mxA6LyVQMhkR-mOg@mail.gmail.com>
	<51284635.20702@pearwood.info>
	<CALFxCvzeywH0z57=kzXy9LNqsQAAfnO2x7EMXD2brEvqsGcF0g@mail.gmail.com>
Message-ID: <5B80DD153D7D744689F57F4FB69AF474181BE406@SCACMX008.exchad.jpmchase.net>

neubyr wrote:
> Thank you for your comments Steven.
> 
> Yes, I think I should remove property deleter in this case.
> 
> I would like to use this Person class in another class. For example, if Person class is 'model' in a
> small MVC-style web application, then where should I place my validation. A view form will be passing
> parameters to a controller which will create and write Person objects/models. Should the validation be
> in place at all three levels?
> 
> I am inclined towards adding integer validation in views, but I am not sure where should I add it in a
> controller class. Also, it's easy to add integer validation in view form (javascript), but what if I
> have a more complex format - X509 certificate or ?some other file-type related validation? Is it OK to
> validate them only in property setter methods?
> 

Where I would place validation depends a bit on the project. As I see it there are two types of 
validation, simple and complex. Simple validation is something like "is this an int?" or "did
they fill in all parameters?" and should be done in the form(view). Complex validation is more of
a logical/business validation like "is using a blowhole a valid operation for Animal type Giraffe?" 
This can be done where you do an action (e.g. creating Person class) or in the class/module itself 
(controller). If you instantiate Person objects from various different places in code (assuming no 
code duplication) then I would either create a validation function or add it to the class, but if you 
only have one place where Person objects are created I would add the validation there with comments on 
validation rules or reference links.

I tend to favor validation functions where I can give all parameters and it can return either bool, 
or an appropriate error message. My use case is where objects do not usually need to change once 
created (i.e. I have all input in advance). If I thought the objects would change frequently, 
then adding the validation to the setter makes sense. You can also combine the two ideas by 
adding the validation to the setters and having a wrapper validation function that creates a Person
object and then sets the params (returning either the new object or error message). 


~Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

From emailkgnow at gmail.com  Tue Feb 26 14:02:44 2013
From: emailkgnow at gmail.com (Khalid Al-Ghamdi)
Date: Tue, 26 Feb 2013 16:02:44 +0300
Subject: [Tutor] There's a Programmer in Me
Message-ID: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>

Hi All,

I'm not a programmer by profession, but I want to learn python. I've got
lots of Ideas that want to realize, but I always run into these
stupid hiccups where I follow the tutorials and something stupid
(known/unkown) is causing things not to work ... frustration ensues...

After more than 2 years (on and off) I've got the basics down and
have written some scripts, but I want some place online where a live person
can tutor me to the next level. Any good suggestions?

As always, many thanks for your great advice.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130226/36ab3154/attachment.html>

From breamoreboy at yahoo.co.uk  Tue Feb 26 14:54:49 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Tue, 26 Feb 2013 13:54:49 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
Message-ID: <kgiegs$ro8$1@ger.gmane.org>

On 26/02/2013 13:02, Khalid Al-Ghamdi wrote:
> Hi All,
>
> I'm not a programmer by profession, but I want to learn python. I've got
> lots of Ideas that want to realize, but I always run into these
> stupid hiccups where I follow the tutorials and something stupid
> (known/unkown) is causing things not to work ... frustration ensues...
>
> After more than 2 years (on and off) I've got the basics down and
> have written some scripts, but I want some place online where a live
> person can tutor me to the next level. Any good suggestions?
>
> As always, many thanks for your great advice.
>

http://pythonmentors.com/

-- 
Cheers.

Mark Lawrence


From mail at timgolden.me.uk  Tue Feb 26 14:57:37 2013
From: mail at timgolden.me.uk (Tim Golden)
Date: Tue, 26 Feb 2013 13:57:37 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <kgiegs$ro8$1@ger.gmane.org>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org>
Message-ID: <512CBF51.90609@timgolden.me.uk>

On 26/02/2013 13:54, Mark Lawrence wrote:
> On 26/02/2013 13:02, Khalid Al-Ghamdi wrote:
>> Hi All,
>>
>> I'm not a programmer by profession, but I want to learn python. I've got
>> lots of Ideas that want to realize, but I always run into these
>> stupid hiccups where I follow the tutorials and something stupid
>> (known/unkown) is causing things not to work ... frustration ensues...
>>
>> After more than 2 years (on and off) I've got the basics down and
>> have written some scripts, but I want some place online where a live
>> person can tutor me to the next level. Any good suggestions?
>>
>> As always, many thanks for your great advice.
>>
> 
> http://pythonmentors.com/
> 

Umm. No. Sorry, Mark, but that site and the core-mentorship list it
advertises are intended for progammers who want to be helped in the
development *of* Python, not development *in* Python. Ie, otherwise
experienced programmers who are unfamiliar with the Python codebase.

TJG

From fomcl at yahoo.com  Tue Feb 26 15:08:37 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Tue, 26 Feb 2013 06:08:37 -0800 (PST)
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
Message-ID: <1361887717.25344.YahooMailNeo@web163801.mail.gq1.yahoo.com>

>After more than 2 years (on and off)?I've got the basics down?and have?written some scripts, but I want some place online where a live person can tutor me to the next level. Any good suggestions?

I'd say Python Tutor?is what you're looking for! And there are many other awesome sources of info, for example StackOverflow. It also helps to invest in a few really good books. I like the one by Mark Summerfield, and the next one on my list is the one by Dough Helmann.

From breamoreboy at yahoo.co.uk  Tue Feb 26 15:19:43 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Tue, 26 Feb 2013 14:19:43 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <512CBF51.90609@timgolden.me.uk>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
Message-ID: <kgig5b$gfn$1@ger.gmane.org>

On 26/02/2013 13:57, Tim Golden wrote:
> On 26/02/2013 13:54, Mark Lawrence wrote:
>> On 26/02/2013 13:02, Khalid Al-Ghamdi wrote:
>>> Hi All,
>>>
>>> I'm not a programmer by profession, but I want to learn python. I've got
>>> lots of Ideas that want to realize, but I always run into these
>>> stupid hiccups where I follow the tutorials and something stupid
>>> (known/unkown) is causing things not to work ... frustration ensues...
>>>
>>> After more than 2 years (on and off) I've got the basics down and
>>> have written some scripts, but I want some place online where a live
>>> person can tutor me to the next level. Any good suggestions?
>>>
>>> As always, many thanks for your great advice.
>>>
>>
>> http://pythonmentors.com/
>>
>
> Umm. No. Sorry, Mark, but that site and the core-mentorship list it
> advertises are intended for progammers who want to be helped in the
> development *of* Python, not development *in* Python. Ie, otherwise
> experienced programmers who are unfamiliar with the Python codebase.
>
> TJG
>

Umm.  No.  Sorry, Tim, but nowhere does the OP state that he wants to 
develop in Python, hence "The mission of the Python Core Mentor Program 
is to provide an open and welcoming place to connect students, 
programmers ? and anyone interested in contributing to the Python Core 
development." seems to me an excellent fit for "some place online where 
a live person can tutor me to the next level".

-- 
Cheers.

Mark Lawrence


From jacklittlemc at yahoo.com  Tue Feb 26 15:23:56 2013
From: jacklittlemc at yahoo.com (Jack Little)
Date: Tue, 26 Feb 2013 06:23:56 -0800
Subject: [Tutor] Second follow up
Message-ID: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>

How would I go from one def statement to another? I am developing a text based rpg.

Sent from my iPod

From emailkgnow at gmail.com  Tue Feb 26 15:45:14 2013
From: emailkgnow at gmail.com (Khalid Al-Ghamdi)
Date: Tue, 26 Feb 2013 17:45:14 +0300
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <kgig5b$gfn$1@ger.gmane.org>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org>
Message-ID: <CABM2kupF29OQG+qBx-a25mnBQgFaj7_AH4ndmSa1vAasL8jbCg@mail.gmail.com>

Hi all and thanks for your suggestions,

I was thinking of something like a virtual classroom where I can get live
mentoring and answers to my inquiries in a one on one or small group
setting.

Thanks

On Tuesday, February 26, 2013, Mark Lawrence wrote:

> On 26/02/2013 13:57, Tim Golden wrote:
>
>> On 26/02/2013 13:54, Mark Lawrence wrote:
>>
>>> On 26/02/2013 13:02, Khalid Al-Ghamdi wrote:
>>>
>>>> Hi All,
>>>>
>>>> I'm not a programmer by profession, but I want to learn python. I've got
>>>> lots of Ideas that want to realize, but I always run into these
>>>> stupid hiccups where I follow the tutorials and something stupid
>>>> (known/unkown) is causing things not to work ... frustration ensues...
>>>>
>>>> After more than 2 years (on and off) I've got the basics down and
>>>> have written some scripts, but I want some place online where a live
>>>> person can tutor me to the next level. Any good suggestions?
>>>>
>>>> As always, many thanks for your great advice.
>>>>
>>>>
>>> http://pythonmentors.com/
>>>
>>>
>> Umm. No. Sorry, Mark, but that site and the core-mentorship list it
>> advertises are intended for progammers who want to be helped in the
>> development *of* Python, not development *in* Python. Ie, otherwise
>> experienced programmers who are unfamiliar with the Python codebase.
>>
>> TJG
>>
>>
> Umm.  No.  Sorry, Tim, but nowhere does the OP state that he wants to
> develop in Python, hence "The mission of the Python Core Mentor Program is
> to provide an open and welcoming place to connect students, programmers ?
> and anyone interested in contributing to the Python Core development."
> seems to me an excellent fit for "some place online where a live person can
> tutor me to the next level".
>
> --
> Cheers.
>
> Mark Lawrence
>
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130226/f552e721/attachment-0001.html>

From robert.sjoblom at gmail.com  Tue Feb 26 15:55:47 2013
From: robert.sjoblom at gmail.com (Robert Sjoblom)
Date: Tue, 26 Feb 2013 15:55:47 +0100
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <kgig5b$gfn$1@ger.gmane.org>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org>
Message-ID: <CAJKU7g3bebBamEdk4V7bqfwYk5uy3f32NJRrqgoNBS=g_LGA=g@mail.gmail.com>

>> Umm. No. Sorry, Mark, but that site and the core-mentorship list it
>> advertises are intended for progammers who want to be helped in the
>> development *of* Python, not development *in* Python. Ie, otherwise
>> experienced programmers who are unfamiliar with the Python codebase.
>>
>> TJG
>>
>
> Umm.  No.  Sorry, Tim, but nowhere does the OP state that he wants to
develop in Python,
I'll just quote the OP then:
" I'm not a programmer by profession, but I want to learn python". That
seems pretty clear-cut to me. In addition, the Python Core development is
definitely not a place for beginners.

Sorry if this reply is all messed up, responding on my phone.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130226/8a59c508/attachment.html>

From alan.gauld at btinternet.com  Tue Feb 26 15:57:01 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 26 Feb 2013 14:57:01 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
Message-ID: <kgiifp$7pk$1@ger.gmane.org>

On 26/02/13 13:02, Khalid Al-Ghamdi wrote:

> have written some scripts, but I want some place online where a live
> person can tutor me to the next level. Any good suggestions?

Well so far as I know there are no dead people on this mailing list....

It's what we are here for.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From davea at davea.name  Tue Feb 26 15:57:47 2013
From: davea at davea.name (Dave Angel)
Date: Tue, 26 Feb 2013 09:57:47 -0500
Subject: [Tutor] Second follow up
In-Reply-To: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
References: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
Message-ID: <512CCD6B.3090108@davea.name>

On 02/26/2013 09:23 AM, Jack Little wrote:
> How would I go from one def statement to another? I am developing a text based rpg.
>
> Sent from my iPod
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>

For your next thread, please try to pick a subject line that has 
something to do with what you're asking, or what you're trying to learn 
about.

A def statement defines a function (or method).  Once it's defined, the 
compiler goes on to the next line, and if that's a def statement, it 
defines that function.

So all you need is a text editor.  Just understand that code that will 
call those functions from the top-level needs to be *after* the 
definition is complete.  Code that calls functions from inside a 
function does not need to be in any particular order.

If this isn't what you want, then try composing a ten-line sample, tell 
us what environment you're running it in, and what you hoped for, and 
what it did instead.


On the other hand, perhaps you're asking how to make indirect calls to 
functions.  A function object can be stored in a 'variable', simply by 
assigning it without using parentheses.  You can then later call that 
function by naming the object, and following the object with the 
parentheses.  Simple example follows;

def func1(name):
     print "function1, running with", name

def func2(name):
     print "function2, running with", name

funclist = []
funclist.append(func1)
funclist.append(func2)
funclist.append(func1)

funclist[1]("Sam")
     will call func2, and pass it "Sam" as an argument.

Normally, if you're doing this type of thing, you'd be using methods, 
not functions, but I'm not going to introduce classes unless you're 
already familiar with them.

-- 
DaveA

From alan.gauld at btinternet.com  Tue Feb 26 16:00:44 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Tue, 26 Feb 2013 15:00:44 +0000
Subject: [Tutor] Second follow up
In-Reply-To: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
References: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
Message-ID: <kgiimp$bg3$1@ger.gmane.org>

On 26/02/13 14:23, Jack Little wrote:
> How would I go from one def statement to another?

Type it in.

Based on your message that's all I can suggest.
Can you explain what you mean?

What do you have in mind by a def statement?

def foo():
    print 'foo'

def bar():
    print 'bar'

Those are two "def statements". You can add as many
more as you like? But I suspect that's not really
what you mean?

> I am developing a text based rpg.

I don't see whether/how that makes any difference to anything.

Telling us which OS and Python version you are using and what 
programming tools might help though.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From vytasd2013 at gmail.com  Tue Feb 26 16:07:25 2013
From: vytasd2013 at gmail.com (Vytas D.)
Date: Tue, 26 Feb 2013 15:07:25 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <kgiifp$7pk$1@ger.gmane.org>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiifp$7pk$1@ger.gmane.org>
Message-ID: <CAB3fQDWu01iEGCWDa=v24X7NgbUwwL8gZWJum7oAMoyFv5mPzA@mail.gmail.com>

Hi,

Have you considered O'Reilly Python courses. You have to pay (and it's
quite expensive), but you have a tutor to answer questions. The courses are
good (tried myself :) ).

Vytas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130226/61d36b86/attachment.html>

From breamoreboy at yahoo.co.uk  Tue Feb 26 16:12:58 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Tue, 26 Feb 2013 15:12:58 +0000
Subject: [Tutor] Second follow up
In-Reply-To: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
References: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
Message-ID: <kgijal$i2n$1@ger.gmane.org>

On 26/02/2013 14:23, Jack Little wrote:
> How would I go from one def statement to another? I am developing a text based rpg.
>
> Sent from my iPod
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

I'd like to see your project when it's finished as a text based rocket 
propelled grenade seems very interesting, or are we talking cross 
purposes owing to a major lack of data?

-- 
Cheers.

Mark Lawrence


From steve at pearwood.info  Tue Feb 26 17:01:39 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Wed, 27 Feb 2013 03:01:39 +1100
Subject: [Tutor] Second follow up
In-Reply-To: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
References: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
Message-ID: <512CDC63.3090104@pearwood.info>

On 27/02/13 01:23, Jack Little wrote:
> How would I go from one def statement to another? I am developing a text based rpg.


def first_function():
     # write your code here, indented by FOUR spaces or ONE tab


def second_function():  # NO INDENT
     # write your code here, indented by FOUR spaces or ONE tab


Does that help?


-- 
Steven

From steve at pearwood.info  Tue Feb 26 17:11:56 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Wed, 27 Feb 2013 03:11:56 +1100
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <kgig5b$gfn$1@ger.gmane.org>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org>
Message-ID: <512CDECC.4050608@pearwood.info>

On 27/02/13 01:19, Mark Lawrence wrote:
> On 26/02/2013 13:57, Tim Golden wrote:
>> On 26/02/2013 13:54, Mark Lawrence wrote:
>>> On 26/02/2013 13:02, Khalid Al-Ghamdi wrote:
>>>> Hi All,
>>>>
>>>> I'm not a programmer by profession, but I want to LEARN PYTHON.
[emphasis added]

[...]
>>> http://pythonmentors.com/
>>
>> Umm. No. Sorry, Mark, but that site and the core-mentorship list it
>> advertises are intended for progammers who want to be helped in the
>> development *of* Python, not development *in* Python. Ie, otherwise
>> experienced programmers who are unfamiliar with the Python codebase.
>>
>> TJG
>>
>
> Umm.  No.  Sorry, Tim, but nowhere does the OP state that he wants to develop in Python, hence "The mission of the Python Core Mentor Program is to provide an open and welcoming place to connect students, programmers ? and anyone interested in contributing to the Python Core development." seems to me an excellent fit for "some place online where a live person can tutor me to the next level".

Mark, the OP states explicitly that he wants to learn Python. I suppose that he *might* intend to learn the language without actually writing any code, but when people say that they want to learn a programming language, it's normally because they intend to, you know, program. As in develop code. Using the language he intends to learn. Which is Python. The programming language, not the snake. For the avoidance of doubt.

:-P


Python-mentors is completely inappropriate for a beginner who doesn't know the language. The core developers are too busy to be hand-holding a newbie who doesn't know any Python, and somebody who doesn't know any Python can't triage bugs, write documentation or tests, or write Python code for the standard library.



-- 
Steven

From steve at pearwood.info  Tue Feb 26 17:13:38 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Wed, 27 Feb 2013 03:13:38 +1100
Subject: [Tutor] Second follow up
In-Reply-To: <kgijal$i2n$1@ger.gmane.org>
References: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
	<kgijal$i2n$1@ger.gmane.org>
Message-ID: <512CDF32.90909@pearwood.info>

On 27/02/13 02:12, Mark Lawrence wrote:
> On 26/02/2013 14:23, Jack Little wrote:
>> How would I go from one def statement to another? I am developing a text based rpg.
>
> I'd like to see your project when it's finished as a text based rocket propelled grenade seems very interesting, or are we talking cross purposes owing to a major lack of data?


RPG: Role Playing Game.



-- 
Steven




From breamoreboy at yahoo.co.uk  Tue Feb 26 17:52:29 2013
From: breamoreboy at yahoo.co.uk (Mark Lawrence)
Date: Tue, 26 Feb 2013 16:52:29 +0000
Subject: [Tutor] Second follow up
In-Reply-To: <512CDC63.3090104@pearwood.info>
References: <76176498-7E66-4179-87A2-DA87BF796ABA@yahoo.com>
	<512CDC63.3090104@pearwood.info>
Message-ID: <kgip42$cdb$1@ger.gmane.org>

On 26/02/2013 16:01, Steven D'Aprano wrote:
> On 27/02/13 01:23, Jack Little wrote:
>> How would I go from one def statement to another? I am developing a
>> text based rpg.
>
>
> def first_function():
>      # write your code here, indented by FOUR spaces or ONE tab
>
>
> def second_function():  # NO INDENT
>      # write your code here, indented by FOUR spaces or ONE tab
>
>
> Does that help?
>
>

Get thee behind me Satan/Steven, tabs indeed :)

-- 
Cheers.

Mark Lawrence


From fomcl at yahoo.com  Tue Feb 26 22:00:59 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Tue, 26 Feb 2013 13:00:59 -0800 (PST)
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <512CDECC.4050608@pearwood.info>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org> <512CDECC.4050608@pearwood.info>
Message-ID: <1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>

?
> The core developers are too busy to be hand-holding a newbie who 
> doesn't know any Python, 

Well, in a way they *can*: I find it very inspiring to read the source code of Python (the .py files), though I don't do this as often as I should.

What I like about R: if I do 'print(func)' (or fix(func)), it prints the source code of the function. It would be cool if Python had something similar. Instead Python prints the not-so-informative <function func at 0xa82fae4>


From hugo.yoshi at gmail.com  Tue Feb 26 23:31:23 2013
From: hugo.yoshi at gmail.com (Hugo Arts)
Date: Tue, 26 Feb 2013 22:31:23 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org> <512CDECC.4050608@pearwood.info>
	<1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
Message-ID: <CAJmBOfn1LcZF_NSYqGtnYLhH4==QmgWPK35Sz_mGgPt7HyCpxA@mail.gmail.com>

On Tue, Feb 26, 2013 at 9:00 PM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:

>
> > The core developers are too busy to be hand-holding a newbie who
> > doesn't know any Python,
>
> Well, in a way they *can*: I find it very inspiring to read the source
> code of Python (the .py files), though I don't do this as often as I should.
>
> What I like about R: if I do 'print(func)' (or fix(func)), it prints the
> source code of the function. It would be cool if Python had something
> similar. Instead Python prints the not-so-informative <function func at
> 0xa82fae4>
>
>
I don't think you'd want the generic 'print' to do this (though repr()
might be a good candidate). In any case, IPython can do it with %psource:
http://ipython.org/ipython-doc/rel-0.10.2/html/interactive/tutorial.html#explore-your-objects
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130226/e6f80944/attachment.html>

From eryksun at gmail.com  Wed Feb 27 01:49:21 2013
From: eryksun at gmail.com (eryksun)
Date: Tue, 26 Feb 2013 19:49:21 -0500
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org> <512CDECC.4050608@pearwood.info>
	<1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
Message-ID: <CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>

On Tue, Feb 26, 2013 at 4:00 PM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
>
> What I like about R: if I do 'print(func)' (or fix(func)), it prints the
> source code of the function. It would be cool if Python had something
> similar. Instead Python prints the not-so-informative
> <function func at 0xa82fae4>

You can use inspect.getsource(obj) if obj is a module, class, method,
function, traceback, frame, or code that has a source file (e.g.
__file__, co_filename) and is defined normally (e.g. class, def):

    >>> import inspect
    >>> def printsrc(obj): print inspect.getsource(obj)

    >>> import antigravity
    >>> printsrc(antigravity)

    import webbrowser

    webbrowser.open("http://xkcd.com/353/")

From eryksun at gmail.com  Wed Feb 27 02:09:11 2013
From: eryksun at gmail.com (eryksun)
Date: Tue, 26 Feb 2013 20:09:11 -0500
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org> <512CDECC.4050608@pearwood.info>
	<1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>
Message-ID: <CACL+1as7=zASabYJiTzfYOEDXx_ed_zX0pkoBqxBvCeOTweJLw@mail.gmail.com>

On Tue, Feb 26, 2013 at 7:49 PM, eryksun <eryksun at gmail.com> wrote:
>
> You can use inspect.getsource(obj) if obj is a module, class, method,
> function, traceback, frame, or code that has a source file (e.g.
> __file__, co_filename) and is defined normally (e.g. class, def):
>
>     >>> import inspect
>     >>> def printsrc(obj): print inspect.getsource(obj)

You ca also use a pager (uses "less" if available; "more" on Windows):

    >>> import inspect, pydoc
    >>> def showsrc(obj): pydoc.getpager()(inspect.getsource(obj))
    ...
    >>> showsrc(inspect)

From fomcl at yahoo.com  Wed Feb 27 10:10:07 2013
From: fomcl at yahoo.com (Albert-Jan Roskam)
Date: Wed, 27 Feb 2013 01:10:07 -0800 (PST)
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org> <512CDECC.4050608@pearwood.info>
	<1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>
Message-ID: <1361956207.69349.YahooMailNeo@web163806.mail.gq1.yahoo.com>



> On Tue, Feb 26, 2013 at 4:00 PM, Albert-Jan Roskam <fomcl at yahoo.com> 
> wrote:
>> 
>> What I like about R: if I do 'print(func)' (or fix(func)), it 
> prints the
>> source code of the function. It would be cool if Python had something
>> similar. Instead Python prints the not-so-informative
>> <function func at 0xa82fae4>
> 
> You can use inspect.getsource(obj) if obj is a module, class, method,
> function, traceback, frame, or code that has a source file (e.g.
> __file__, co_filename) and is defined normally (e.g. class, def):
> 
> ? ? >>> import inspect
> ? ? >>> def printsrc(obj): print inspect.getsource(obj)
> 
> ? ? >>> import antigravity
> ? ? >>> printsrc(antigravity)
> 
> ? ? import webbrowser
> 
> ? ? webbrowser.open(http://xkcd.com/353/)

Ahh, thank you! I like the %psource magic word, but until I get IPython installed in the office I'll use inspect.getsource. 
import inspect, soul
print inspect.getsource(soul.getsoul)
import webbrowser
webbrowser.open(http://xkcd.com/413/)? ;-))


From femibanjo at hotmail.com  Wed Feb 27 12:19:43 2013
From: femibanjo at hotmail.com (Femi Banjo)
Date: Wed, 27 Feb 2013 11:19:43 +0000
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <1361956207.69349.YahooMailNeo@web163806.mail.gq1.yahoo.com>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>,
	<kgiegs$ro8$1@ger.gmane.org>
	<512CBF51.90609@timgolden.me.uk>,<kgig5b$gfn$1@ger.gmane.org>
	<512CDECC.4050608@pearwood.info>,
	<1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>,
	<CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>,
	<1361956207.69349.YahooMailNeo@web163806.mail.gq1.yahoo.com>
Message-ID: <DUB002-W1010638CD55C83D23743C5AA0FD0@phx.gbl>

coursera, udacity & edx all have decent Python  courses for beginners and very good support on forums etc and they're all free

> Date: Wed, 27 Feb 2013 01:10:07 -0800
> From: fomcl at yahoo.com
> To: eryksun at gmail.com
> CC: tutor at python.org
> Subject: Re: [Tutor] There's a Programmer in Me
> 
> 
> 
> > On Tue, Feb 26, 2013 at 4:00 PM, Albert-Jan Roskam <fomcl at yahoo.com> 
> > wrote:
> >> 
> >> What I like about R: if I do 'print(func)' (or fix(func)), it 
> > prints the
> >> source code of the function. It would be cool if Python had something
> >> similar. Instead Python prints the not-so-informative
> >> <function func at 0xa82fae4>
> > 
> > You can use inspect.getsource(obj) if obj is a module, class, method,
> > function, traceback, frame, or code that has a source file (e.g.
> > __file__, co_filename) and is defined normally (e.g. class, def):
> > 
> >     >>> import inspect
> >     >>> def printsrc(obj): print inspect.getsource(obj)
> > 
> >     >>> import antigravity
> >     >>> printsrc(antigravity)
> > 
> >     import webbrowser
> > 
> >     webbrowser.open(http://xkcd.com/353/)
> 
> Ahh, thank you! I like the %psource magic word, but until I get IPython installed in the office I'll use inspect.getsource. 
> import inspect, soul
> print inspect.getsource(soul.getsoul)
> import webbrowser
> webbrowser.open(http://xkcd.com/413/)  ;-))
> 
> _______________________________________________
> 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/20130227/4ce1c897/attachment.html>

From emailkgnow at gmail.com  Wed Feb 27 18:08:21 2013
From: emailkgnow at gmail.com (Khalid Al-Ghamdi)
Date: Wed, 27 Feb 2013 20:08:21 +0300
Subject: [Tutor] There's a Programmer in Me
In-Reply-To: <DUB002-W1010638CD55C83D23743C5AA0FD0@phx.gbl>
References: <CABM2kupwBWiVh6vDNa2iZ7+tZQ40+MX4pziwDGpVpwcB=Pi3EQ@mail.gmail.com>
	<kgiegs$ro8$1@ger.gmane.org> <512CBF51.90609@timgolden.me.uk>
	<kgig5b$gfn$1@ger.gmane.org> <512CDECC.4050608@pearwood.info>
	<1361912459.95429.YahooMailNeo@web163802.mail.gq1.yahoo.com>
	<CACL+1av8=53OUk9ZQzxvXeD4WJqQCW064orZYgieHBXpd=YWsQ@mail.gmail.com>
	<1361956207.69349.YahooMailNeo@web163806.mail.gq1.yahoo.com>
	<DUB002-W1010638CD55C83D23743C5AA0FD0@phx.gbl>
Message-ID: <CABM2kupzHBXdgswn9u7xs_dHc27Xvv+v+7B=Yen+F9btoQUHRA@mail.gmail.com>

Thanks everyone.

On Wednesday, February 27, 2013, Femi Banjo wrote:

> coursera, udacity & edx all have decent Python  courses for beginners and
> very good support on forums etc and they're all free
>
> > Date: Wed, 27 Feb 2013 01:10:07 -0800
> > From: fomcl at yahoo.com <javascript:_e({}, 'cvml', 'fomcl at yahoo.com');>
> > To: eryksun at gmail.com <javascript:_e({}, 'cvml', 'eryksun at gmail.com');>
> > CC: tutor at python.org <javascript:_e({}, 'cvml', 'tutor at python.org');>
> > Subject: Re: [Tutor] There's a Programmer in Me
> >
> >
> >
> > > On Tue, Feb 26, 2013 at 4:00 PM, Albert-Jan Roskam <fomcl at yahoo.com<javascript:_e({}, 'cvml', 'fomcl at yahoo.com');>>
>
> > > wrote:
> > >>
> > >> What I like about R: if I do 'print(func)' (or fix(func)), it
> > > prints the
> > >> source code of the function. It would be cool if Python had something
> > >> similar. Instead Python prints the not-so-informative
> > >> <function func at 0xa82fae4>
> > >
> > > You can use inspect.getsource(obj) if obj is a module, class, method,
> > > function, traceback, frame, or code that has a source file (e.g.
> > > __file__, co_filename) and is defined normally (e.g. class, def):
> > >
> > >     >>> import inspect
> > >     >>> def printsrc(obj): print inspect.getsource(obj)
> > >
> > >     >>> import antigravity
> > >     >>> printsrc(antigravity)
> > >
> > >     import webbrowser
> > >
> > >     webbrowser.open(http://xkcd.com/353/)
> >
> > Ahh, thank you! I like the %psource magic word, but until I get IPython
> installed in the office I'll use inspect.getsource.
> > import inspect, soul
> > print inspect.getsource(soul.getsoul)
> > import webbrowser
> > webbrowser.open(http://xkcd.com/413/)  ;-))
> >
> > _______________________________________________
> > Tutor maillist - Tutor at python.org <javascript:_e({}, 'cvml',
> '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/20130227/50f5ad36/attachment.html>

From doanviettrung at gmail.com  Thu Feb 28 03:27:46 2013
From: doanviettrung at gmail.com (DoanVietTrungAtGmail)
Date: Thu, 28 Feb 2013 13:27:46 +1100
Subject: [Tutor] timeit: 10million x 1 Vs 1million x 10
Message-ID: <CAFZXNMGK+hi_L+2ArqBEnkYCAOV7L4DJsSSApc3LM-LUD887zw@mail.gmail.com>

Dear tutors

My function below simply populates a large dict. When measured by timeit
populating 10 million items once, versus populating 1 million items ten
times, the times are noticeably different:

---
import timeit

N = 10000000 # This constant's value is either 10 million or 1 million
testDict = {}
def writeDict(N):
    for i in xrange(N):
        testDict[i] = [i, [i + 1, i + 2], i + 3]
print timeit.Timer('f(N)', 'from __main__ import N, writeDict as
f').timeit(1) # the 'number' parameter is either 1 or 10

---
Result from 3 runs of 10 million x 1 time: 12.7655465891, 13.1248426525,
12.1611512459

Result from 3 runs of 1 million x 10 times:
14.3727692498, 14.3825673988, 14.4390314636

I ran Python 2.7 on Pycharm on Windows 7.

My guess is that this discrepancy is a result of either how some sort of
overhead in timeit, or of Python having to allocate memory space for a dict
10 times. What do you think, and how to find out for sure?

Second (for me, this question is more important), how to improve
performance? (I tried a tuple rather than a list for the dict values, it
was slightly faster, but I need dict items to be mutable)

Thanks

Trung Doan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130228/16117388/attachment.html>

From alan.gauld at btinternet.com  Thu Feb 28 09:18:07 2013
From: alan.gauld at btinternet.com (Alan Gauld)
Date: Thu, 28 Feb 2013 08:18:07 +0000
Subject: [Tutor] timeit: 10million x 1 Vs 1million x 10
In-Reply-To: <CAFZXNMGK+hi_L+2ArqBEnkYCAOV7L4DJsSSApc3LM-LUD887zw@mail.gmail.com>
References: <CAFZXNMGK+hi_L+2ArqBEnkYCAOV7L4DJsSSApc3LM-LUD887zw@mail.gmail.com>
Message-ID: <kgn3rs$tov$1@ger.gmane.org>

On 28/02/13 02:27, DoanVietTrungAtGmail wrote:

> ---
> import timeit
>
> N = 10000000 # This constant's value is either 10 million or 1 million
> testDict = {}
> def writeDict(N):
>      for i in xrange(N):
>          testDict[i] = [i, [i + 1, i + 2], i + 3]
> print timeit.Timer('f(N)', 'from __main__ import N, writeDict as
> f').timeit(1) # the 'number' parameter is either 1 or 10
>
> ---
>
> My guess is that this discrepancy is a result of either how some sort of
> overhead in timeit, or of Python having to allocate memory space for a
> dict 10 times. What do you think, and how to find out for sure?

There are several extra overheads including calling the function 
multiple times and deleting the structures you created each time.

> Second (for me, this question is more important), how to improve
> performance?

In this specific case the best improvement is not to create the dict at 
all. Since the values are all derived from the key all you need is to 
store the keys and calculate the values when needed. But I suspect the 
real world use case is not that simple...

You could try moving N and the dict inside the function - local 
variables are usually slightly faster than globals.

You could also try using a generator for the dict.

I've no idea how much faster/slower that would be, with all things 
performance related testing is the only sure way.



-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


From steve at pearwood.info  Thu Feb 28 11:36:50 2013
From: steve at pearwood.info (Steven D'Aprano)
Date: Thu, 28 Feb 2013 21:36:50 +1100
Subject: [Tutor] timeit: 10million x 1 Vs 1million x 10
In-Reply-To: <CAFZXNMGK+hi_L+2ArqBEnkYCAOV7L4DJsSSApc3LM-LUD887zw@mail.gmail.com>
References: <CAFZXNMGK+hi_L+2ArqBEnkYCAOV7L4DJsSSApc3LM-LUD887zw@mail.gmail.com>
Message-ID: <512F3342.5030909@pearwood.info>

On 28/02/13 13:27, DoanVietTrungAtGmail wrote:
> Dear tutors
>
> My function below simply populates a large dict. When measured by timeit
> populating 10 million items once, versus populating 1 million items ten
> times, the times are noticeably different:

I cannot replicate your results. When I try it, I get more or less the same
result each time:

py> for count, N in ((1, 10000000), (10, 1000000)):
...     t = timeit.Timer('f(N)', 'from __main__ import N, writeDict as f')
...     print min(t.repeat(number=count))
...
7.2105910778
7.17914915085

The difference is insignificant.


However, I did notice that when I ran your code, memory consumption went to
80% on my computer, and the load average exceeded 4. I suggest that perhaps
the results you are seeing have something to do with your operating system's
response to memory usage, or some other external factor.


[...]
> My guess is that this discrepancy is a result of either how some sort of
> overhead in timeit, or of Python having to allocate memory space for a dict
> 10 times. What do you think, and how to find out for sure?

Whatever the answer is, it is neither of the above.

Firstly, while timeit does have some overhead, it is very small. After all,
timeit is designed for timing tiny sub-microsecond code snippets.

You can get an idea of timeit's overhead like this:

py> from timeit import Timer
py> t1 = Timer("x = 2")
py> t2 = Timer("x = 1;x = 2")
py> min(t1.repeat())
0.048729896545410156
py> min(t2.repeat())
0.06900882720947266


If timeit had no overhead at all, t2 should take twice as long as t1 since
it has two instructions rather than one. But it doesn't, so we can calculate
the (approximate) overhead with a bit of maths:

overhead + t  = 0.0486
overhead + 2t = 0.0690

Solving this gives me an overhead of 0.0282s, which is per the one million
loops that timeit does by default. So as you can see, it's quite small: about
30 nanoseconds on my computer per loop. Even if it was a million times
greater, it wouldn't be enough to explain the results you see.

As for your other suggestion, about the memory space allocation, it is also
unlikely to be correct. You are using the same dict on every test! On the
first run, Python has to reallocate memory to make the dict big enough for
10 million entries. After that, the dict is already resized and never gets
any bigger.



> Second (for me, this question is more important), how to improve
> performance? (I tried a tuple rather than a list for the dict values, it
> was slightly faster, but I need dict items to be mutable)


Firstly, are you sure you need to improve performance?

Secondly, performance of what? Have you profiled your application to see
which parts are slow, or are you just guessing?

As it stands, I cannot advise you how to speed your application up, because
I don't know what it does or what bits are slow. But I doubt very much that
the slow part is storing a small list inside a dict.




-- 
Steven