Re: [Tutor] python books

2009-04-26 Thread OkaMthembo
I'd recommend Core Python Programming by Wesley Chun..

On Sat, Apr 25, 2009 at 9:45 PM, Dayo Adewunmi wrote:

> chinmaya wrote:
>
>>
>>
>> On Mon, Apr 13, 2009 at 11:07 PM, sudhanshu gautam <
>> sudhanshu9...@gmail.com > wrote:
>>
>>I am new in python , so need a good books , previously read python
>>Bible and swaroop but not satisfied .
>>
>>
>>so tell me good books in pdf format those contents good problems also
>>
>>
>>___
>>Tutor maillist  -  Tutor@python.org 
>>http://mail.python.org/mailman/listinfo/tutor
>>
>>
>>
>>
>> I would say start with python tutorial, its nice decent starting material.
>> There is no better way to learn language than to practice it as you read.
>> Most of the tutorials out there are not written for 3.0, so you may want
>> to install 2.6.
>> I also recommend Dive Into python, its very beginner friendly, but
>> remember
>> it does not cover all (not all major) libraries never-the-less its one of
>> the
>> best beginner tutorial.
>>
>> Also install ipython its very powerful. And once you learn the interface
>> its very easy to find documentation and library references.
>>
>> Also you can look at 100s of python videos in showmedo.com <
>> http://showmedo.com>
>>
>>
>> --
>> chinmaya sn
>> 
>>
>> ___
>> Tutor maillist  -  Tutor@python.org
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
>
> I'm currently reading Think Python
> http://www.greenteapress.com/thinkpython/thinkpython.html
>
> Regards
>
> Dayo
> ---
>
> ___
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
>



-- 
Lloyd Dube
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Working with lines from file and printing to another keeping sequential order

2009-04-26 Thread Kent Johnson
On Sat, Apr 25, 2009 at 2:11 PM, Dan Liang  wrote:
> Hi Bob and tutors,
>
> Thanks Bob for your response! currently I have the current code, but it does
> not work:
>
> ListLines= []
> for line in open('test.txt'):
>     line = line.rstrip()
>     ListLines.append(line)

This could be written with a list comprehension:
ListLines = [ line.rstrip() for line in open('test.txt') ]

>
> for i in range(len(ListLines)):
>
>     if ListLines[i].endswith("yes") and ListLines[i+1].endswith("no") and
> ListLines[i+1].endswith("no"):
>         print ListLines[i], ListLines[i+1], ListLines[i+2]
>     elif ListLines[i].endswith("yes") and ListLines[i+1].endswith("no"):
>         print ListLines[i], ListLines[i+1]
>     elif ListLines[i].endswith("yes"):
>         print ListLines[i]
>     elif ListLines[i].endswith("no"):
>         continue
>     else:
>         break

You only need to test for ListLines[i].endswith('yes') once. Then you
could use a loop to test for lines ending with 'no'.

for i in range(len(ListLines)):
  if not ListLines[i].endswith('yes'):
continue
  for offset in (1, 2):
if i+offset < len(ListLines) and ListLines[i+offset].endswith('no'):
  print ListLines[i+offset]

You could adapt the above for a variable number of 'no' lines with
something like
  for offset in range(1, maxNo+1):

> I get the following error:
> Traceback (most recent call last):
>   File "test.py", line 18, in 
>     if ListLines[i].endswith("yes") and ListLines[i+1].endswith("no") and
> ListLines[i+1].endswith("no"):
> IndexError: list index out of range

That is because you have a 'yes' line at the end of the file so the
check for 'no' tries to read past the end of ListLines. In my code the
test for i+offset < len(ListLines) will prevent that exception.

Kent
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


[Tutor] Lists in a file

2009-04-26 Thread David Holland
Hi,

I am trying to create a program where I open a file full of lists and process 
them.
However when the program does not recognize the lists as lists.
Here is the relevant code :-
def open_filedef():
    text_file =open ("voteinp.txt","r")
    lines = text_file.readlines()
    
    
    for line in lines:
    print line
    print line[0]
  
    text_file.close()

And an example of the type of text :-

['a','b','c']
['e','d','f']

Any ideas?


Thanks in advance


David Holland



  ___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Lists in a file

2009-04-26 Thread Robert Berman

David,

You are processing a text file. It is your job to treat it as a file 
comprised of lists. I think what you are saying is that each line in the 
text file is a list. In that case


for line in fileobject:
   listline = list(line)

Now, listline is a list of the text items in line.

Hope this helps.

Robert Berman

David Holland wrote:

Hi,

I am trying to create a program where I open a file full of lists and 
process them.

However when the program does not recognize the lists as lists.
Here is the relevant code :-
def open_filedef():
text_file =open ("voteinp.txt","r")
lines = text_file.readlines()
   
   
for line in lines:

print line
print line[0]
 
text_file.close()


And an example of the type of text :-

['a','b','c']
['e','d','f']

Any ideas?


Thanks in advance


David Holland




___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor
  

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Lists in a file

2009-04-26 Thread Kent Johnson
On Sun, Apr 26, 2009 at 2:18 PM, Robert Berman  wrote:
> David,
>
> You are processing a text file. It is your job to treat it as a file
> comprised of lists. I think what you are saying is that each line in the
> text file is a list. In that case
>
> for line in fileobject:
>   listline = list(line)
>
> Now, listline is a list of the text items in line.

listline will be a list of all the characters in the line, which is
not what the OP wants.

If the list will just contain quoted strings that don't themselves
contain commas you can do something ad hoc:
In [2]: s = "['a','b','c']"

In [5]: [ str(item[1:-1]) for item in s[1:-1].split(',') ]
Out[5]: ['a', 'b', 'c']

In Python 3 you can use ast.literal_eval().
>>> import ast
>>> s = "['a','b','c']"
>>> ast.literal_eval(s)
['a', 'b', 'c']

You can use these recipes:
http://code.activestate.com/recipes/511473/
http://code.activestate.com/recipes/364469/

Kent
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Lists in a file

2009-04-26 Thread spir
Le Sun, 26 Apr 2009 18:03:41 + (GMT),
David Holland  s'exprima ainsi:

> Hi,
> 
> I am trying to create a program where I open a file full of lists and
> process them. However when the program does not recognize the lists as
> lists. Here is the relevant code :-
> def open_filedef():
>     text_file =open ("voteinp.txt","r")
>     lines = text_file.readlines()
>     
>     
>     for line in lines:
>     print line
>     print line[0]
>   
>     text_file.close()
> 
> And an example of the type of text :-
> 
> ['a','b','c']
> ['e','d','f']
> 
> Any ideas?
 
You're making a confusion between text items and what could be called "running 
program items". And also you're assuming that python reads your mind -- a 
feature not yet implemented but in project for py4000.
More seriously, a list (or any "running program item") is something that is 
produced in memory when python runs your code, like when it runs
   l = [1,2,3]
after having parsed it.

What you're giving it now is *text*. Precisely text read from a file. So it 
regards as text. It could hold "I am trying to create a program where...". 
Right? Python has no way to guess that *you* consider this text as valid python 
code. You must tell it.
Also, you do not ask python to run this. So why should it do so? Right?

If you give python a text, it regards it as text (string):
>>> t = "[1,2,3] ; [7,8,9]"
>>> t
'[1,2,3] ; [7,8,9]'
>>> type(t)


A text is a sequence of characters, so that if you split it into a list, you 
get characters; if you ask for the zerost char, you get it:
>>> list(t)
['[', '1', ',', '2', ',', '3', ']', ' ', ';', ' ', '[', '7', ',', '8', ',', 
'9', ']']
>>> t[0]
'['

If you want python to consider the text as if it were code, you must tell it so:
>>> listtext1 = t[0:7]
>>> listtext1
'[1,2,3]'
>>> list1 = eval(listtext1)
>>> list1
[1, 2, 3]
>>> list1[1]
2

Now, as you see, I have a list object called list1. But this is considered bad 
practice for numerous good reasons.
Actually, what you were doing is asking python to read a file that you consider 
as a snippet of program. So why don't you write it directly in the same file? 
Or for organisation purpose you want an external module to import?

Denis
--
la vita e estrany
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


[Tutor] How to run a .py file or load a module?

2009-04-26 Thread Dayo Adewunmi

I'm looking at recursion in "Think Python", and this is the bit of code:


#!/usr/bin/env python

def countdown(n):
   if n <= 0:
   print 'Blastoff!'
   else:   
   print n

   countdown(n-1)


I've typed that in vim and saved as countdown.py, but I'm not sure how 
to run it. I've had other

python files, where the triggering function didn't take any arguments,
so I would just put a `foo()` at the end of the .py file.

However with this particular function that requires an argument, I'm not
sure how to run it. I've had to type it out in the python prompt and 
then call

the function with an argument. That works, naturally.

I've also tried this:

   >>>import countdown
   >>>countdown(10)

but this is the error I get:

   Traceback (most recent call last):
 File "", line 1, in 
   NameError: name 'countdown' is not defined

How can I

a) Open my shell, and do something like: $ python countdown.py   
but have it take an argument and pass it to the function, and execute.


b) Import the function in the interactive interpreter, and call it like so:

   countdown(10)

without getting the abovementioned error.
Thanks.

Dayo
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to run a .py file or load a module?

2009-04-26 Thread Eric Dorsey
Dayo,
I modified the code a little bit to make things work the way I think you
meant it to work(hopefully), and I changed the name of the function so that
its' not the same name as the python file itself, but hopefully this answers
your questions. Here is my countdown.py

def launchme(n):
while n > 0:
print n
n -= 1
else:
print 'Blastoff!'

#uncomment to run from the shell
#launchme(7)

So, assuming we're running the interpreter from the same folder that
countdown.py is in. You have to call module.function(parameter)

>>> import countdown
>>> countdown.launchme(4)
4
3
2
1
Blastoff!
>>>

If we uncomment the "#launchme(7)" line, and run it from the shell:

$ python countdown.py

7
6
5
4
3
2
1
Blastoff!




On Sun, Apr 26, 2009 at 3:35 PM, Dayo Adewunmi wrote:

> I'm looking at recursion in "Think Python", and this is the bit of code:
>
>
> #!/usr/bin/env python
>
> def countdown(n):
>   if n <= 0:
>   print 'Blastoff!'
>   else: print n
>   countdown(n-1)
>
>
> I've typed that in vim and saved as countdown.py, but I'm not sure how to
> run it. I've had other
> python files, where the triggering function didn't take any arguments,
> so I would just put a `foo()` at the end of the .py file.
>
> However with this particular function that requires an argument, I'm not
> sure how to run it. I've had to type it out in the python prompt and then
> call
> the function with an argument. That works, naturally.
>
> I've also tried this:
>
>   >>>import countdown
>   >>>countdown(10)
>
> but this is the error I get:
>
>   Traceback (most recent call last):
> File "", line 1, in 
>   NameError: name 'countdown' is not defined
>
> How can I
>
> a) Open my shell, and do something like: $ python countdown.py   but have
> it take an argument and pass it to the function, and execute.
>
> b) Import the function in the interactive interpreter, and call it like so:
>
>   countdown(10)
>
> without getting the abovementioned error.
> Thanks.
>
> Dayo
> ___
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to run a .py file or load a module?

2009-04-26 Thread Sander Sweers
2009/4/26 Dayo Adewunmi :
> I'm looking at recursion in "Think Python", and this is the bit of code:
>
> #!/usr/bin/env python
>
> def countdown(n):
>       if n <= 0:
>               print 'Blastoff!'
>       else:                 print n
>               countdown(n-1)
>
>
> I've typed that in vim and saved as countdown.py, but I'm not sure how to
> run it.
>
> However with this particular function that requires an argument, I'm not
> sure how to run it.
>
> I've had to type it out in the python prompt and then
> call
> the function with an argument. That works, naturally.
>
> I've also tried this:
>
>       >>>import countdown
>       >>>countdown(10)

When you import it lile this the function countdown is part of the
module countdown. So you call it like countdown.countdown(10). Or
import it like "from countdown import countdown" and then your example
will work.

> but this is the error I get:
>
>       Traceback (most recent call last):
>         File "", line 1, in 
>       NameError: name 'countdown' is not defined
>
> How can I
>
> a) Open my shell, and do something like: $ python countdown.py   but have it
> take an argument and pass it to the function, and execute.

Look at sys.argv which returns a list with the first value being the
script name and the second are the command line argument(s).
http://docs.python.org/library/sys.html

> b) Import the function in the interactive interpreter, and call it like so:
>
>       countdown(10)
>
> without getting the abovementioned error.

See above.

The script would then look like:

#!/usr/bin/env python

import sys

times = int(sys.argv[1]) # The argument given on the command line

def countdown(n):
if n <=0:
print 'Blast off!'
else:
countdown(n-1)

countdown(times)

Greets
Sander
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to run a .py file or load a module?

2009-04-26 Thread Norman Khine
On Mon, Apr 27, 2009 at 12:07 AM, Sander Sweers  wrote:
> 2009/4/26 Dayo Adewunmi :
>> I'm looking at recursion in "Think Python", and this is the bit of code:
>>
>> #!/usr/bin/env python
>>
>> def countdown(n):
>>       if n <= 0:
>>               print 'Blastoff!'
>>       else:                 print n
>>               countdown(n-1)
>>
>>
>> I've typed that in vim and saved as countdown.py, but I'm not sure how to
>> run it.
>>
>> However with this particular function that requires an argument, I'm not
>> sure how to run it.
>>
>> I've had to type it out in the python prompt and then
>> call
>> the function with an argument. That works, naturally.
>>
>> I've also tried this:
>>
>>       >>>import countdown
>>       >>>countdown(10)
>
> When you import it lile this the function countdown is part of the
> module countdown. So you call it like countdown.countdown(10). Or
> import it like "from countdown import countdown" and then your example
> will work.
>
>> but this is the error I get:
>>
>>       Traceback (most recent call last):
>>         File "", line 1, in 
>>       NameError: name 'countdown' is not defined
>>
>> How can I
>>
>> a) Open my shell, and do something like: $ python countdown.py   but have it
>> take an argument and pass it to the function, and execute.
>
> Look at sys.argv which returns a list with the first value being the
> script name and the second are the command line argument(s).
> http://docs.python.org/library/sys.html
>
>> b) Import the function in the interactive interpreter, and call it like so:
>>
>>       countdown(10)
>>
>> without getting the abovementioned error.
>
> See above.
>
> The script would then look like:
>
> #!/usr/bin/env python
>
> import sys
>
> times = int(sys.argv[1]) # The argument given on the command line
>
> def countdown(n):
>    if n <=0:
>        print 'Blast off!'
>    else:
>        countdown(n-1)
>
> countdown(times)

Don't forget to add:

if __name__ == '__main__':
launchme(times)

>
> Greets
> Sander
> ___
> Tutor maillist  -  tu...@python.org
> http://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] How to run a .py file or load a module?

2009-04-26 Thread David

Norman Khine wrote:

On Mon, Apr 27, 2009 at 12:07 AM, Sander Sweers  wrote:

Here is another one for fun, you run it like
python countdown.py 10

#!/usr/bin/env python

import sys
from time import sleep

times = int(sys.argv[1]) # The argument given on the command line

def countdown(n):
try:
while n != 1:
n = n-1
print n
sleep(1)
finally:
print 'Blast Off!'

countdown(times)

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Threading...

2009-04-26 Thread A.T.Hofkamp

Spencer Parker wrote:

Would the best route for this be
threading? or is there another way to go about it?


At #python, you'd quickly get redirected away from threading (you are making a 
IO-bound app, so threading doesn't buy you anything in performance and gives a 
big headache in data protection), towards Twisted, a Python framework designed 
for programming asynchronous (network) applications (ie IO-bound applications 
with many IO connections, like yours).


I do think that ultimately, you are better of with Twisted than with threading 
(until some Pythoneers extend the language with concurrency primitives that 
don't give you data protection problems as a bonus).
However, Twisted is also quite twisted in nature. It takes a some time before 
you understand how to program in it.


Sincerely,
Albert
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor