[
Where can i find good practice python problems with solutions? ]
Python Challenge is a great place for beginners to learn Python in an interesting way.
CodingBat (previously
JavaBat) now has Python thanks to Google. Some problems have hints and
solutions. Your answer can be tested automatically for correctness.
Google Code Jam.
They have solutions from participants for past contests, some of which
are in Python. Take into account that as in any programming competition,
the goal there isn't to learn Python - it's to get the job done as
quickly as possible. So you may not learn the cleanest programming
style, but you
will see how smart people use the language to solve complex problems in an efficient manner.
It all depends on what you understand under "problem", "coding" and
"practice". For example, my first guess is you might be interested in
looking up whatever university courses on algorithms using Python that
you can google out.
Here's one arbitrary link.
It's also worth looking at
classic textbooks, those have lots of examples.
Finally, try looking at the tutorials from certain specialized packages, such as
Scipy,
Turbogears,
PyGame, etc.
If that's not enough, you can just go read the source code of some existing open source software. That might also help.
[
Beginner Python Practice? ]
You'll find great beginner practice at
http://singpath.com
... the "game" is interactive, gives you the ability to edit your
answers, and the exercises are much more practical than the Python
Challenge, plus there are multiple levels to choose from based on your
skill level. Most importantly, have fun, and welcome to Python!
ps. your experience puts you right in the heart of the target audience of my Python book,
Core Python Programming, whose goal is to teach Python as quickly but as in-depth as possible. reviews, philosophy, and other info at
http://corepython.com
[UPDATE May 2013] There are many alternatives now in addition to SingPath:
•
http://codecademy.com/tracks/python
•
http://codingbat.com/python
•
http://pythontutor.com
•
http://learnpython.org
•
http://pyschools.com
•
http://learnstreet.com/lessons/study/python
You could also try
CheckIO
which is kind of a quest where you have to post solutions in Python 2.7
or 3.3 to move up in the game. Fun and has quite a big community for
questions and support.
You may want to take a look at
Pyschools, the website has quite a lot of practice questions on Python Programming.
You may be interested in Python
interactive tutorial
for begginers and advance users , it has many available practices
together with interactive interface + advance development tricks for
advance users.
Try this site full of
Python Practice Problems. It leans towards problems that has already been solved so that you'll have reference solutions.
Google just recently released an online Python class ("class" as in "a course of study").
http://code.google.com/edu/languages/google-python-class/
I know this doesn't answer your full question, but I think it's a great place to start!
Download
Twisted and look at the source code. They employ some pretty advanced techniques.
[
Hidden features of Python ]
What are the lesser-known but useful features of the Python programming language?
- Try to limit answers to Python core.
- One feature per answer.
- Give an example and short description of the feature, not just a link to documentation.
- Label the feature using a title as the first line.
Quick links to answers:
Chaining comparison operators:
>>> x = 5
>>> 1 < x < 10
True
>>> 10 < x < 20
False
>>> x < 10 < x*10 < 100
True
>>> 10 > x <= 9
True
>>> 5 == x > 4
True
In case you're thinking it's doing
1 < x
, which comes out as
True
, and then comparing
True < 10
, which is also
True
, then no, that's really not what happens (see the last example.) It's really translating into
1 < x and x < 10
, and
x < 10 and 10 < x * 10 and x*10 < 100
, but with less typing and each term is only evaluated once.
¿Qué IDE utilizar para Python?
[
Técnicas de Loops en Pyhton ]
[
Python progression path - From apprentice to guru ]
I've been learning, working, and playing with Python for a year and a
half now. As a biologist slowly making the turn to bio-informatics,
this language has been at the very core of all the major contributions I
have made in the lab. I more or less fell in love with the way Python
permits me to express beautiful solutions and also with the semantics of
the language that allows such a natural flow from thoughts to workable
code.
What I would like to know is your answer to a kind of question I have
seldom seen in this or other forums. This question seems central to me
for anyone on the path to Python improvement but who wonders what his
next steps should be.
Let me sum up what I do NOT want to ask first ;)
- I don't want to know how to QUICKLY learn Python
- Nor do I want to find out the best way to get acquainted with the language
- Finally, I don't want to know a 'one trick that does it all' approach.
What I do want to know your opinion about, is:
What are the steps YOU would recommend to a Python
journeyman, from apprenticeship to guru status (feel free to stop
wherever your expertise dictates it), in order that one IMPROVES
CONSTANTLY, becoming a better and better Python coder, one step at a
time. Some of the people on SO almost seem worthy of worship for their
Python prowess, please enlighten us :)
The kind of answers I would enjoy (but feel free to surprise the readership :P ), is formatted more or less like this:
- Read this (eg: python tutorial), pay attention to that kind of details
- Code for so manytime/problems/lines of code
- Then, read this (eg: this or that book), but this time, pay attention to this
- Tackle a few real-life problems
- Then, proceed to reading Y.
- Be sure to grasp these concepts
- Code for X time
- Come back to such and such basics or move further to...
- (you get the point :)
I really care about knowing your opinion on what exactly one should
pay attention to, at various stages, in order to progress CONSTANTLY
(with due efforts, of course). If you come from a specific field of
expertise, discuss the path you see as appropriate in this field.
EDIT: Thanks to your great input, I'm back on the Python improvement track! I really appreciate!
I thought the process of Python mastery went something like:
- Discover list comprehensions
- Discover generators
- Incorporate map, reduce, filter, iter, range, xrange often into your code
- Discover Decorators
- Write recursive functions, a lot
- Discover itertools and functools
- Read Real World Haskell (read free online)
- Rewrite all your old Python code with tons of higher order functions, recursion, and whatnot.
- Annoy your cubicle mates every time they present you with a Python
class. Claim it could be "better" implemented as a dictionary plus some
functions. Embrace functional programming.
- Rediscover the Strategy pattern and then all those things from imperative code you tried so hard to forget after Haskell.
- Find a balance.
One good way to further your Python knowledge is to
dig into the source code of the libraries, platforms, and frameworks you use already.
For example if you're building a site on
Django, many questions that might stump you can be answered by looking at how Django implements the feature in question.
This way you'll continue to
pick up new idioms, coding styles, and Python tricks. (Some will be good and some will be bad.)
And when you see something Pythony that you don't understand in the source,
hop over to the #python IRC channel and you'll find plenty of "language lawyers" happy to explain.
An accumulation of these little clarifications over years leads to a
much deeper understanding of the language and all of its ins and outs.
Understand Introspection
- write a
dir()
equivalent
- write a
type()
equivalent
- figure out how to "monkey-patch"
- use the
dis
module to see how various language constructs work
Doing these things will
- give you some good theoretical knowledge about how python is implemented
- give you some good practical experience in lower-level programming
- give you a good intuitive feel for python data structures
def apprentice():
read(diveintopython)
experiment(interpreter)
read(python_tutorial)
experiment(interpreter, modules/files)
watch(pycon)
def master():
refer(python-essential-reference)
refer(PEPs/language reference)
experiment()
read(good_python_code) # Eg. twisted, other libraries
write(basic_library) # reinvent wheel and compare to existing wheels
if have_interesting_ideas:
give_talk(pycon)
def guru():
pass # Not qualified to comment. Fix the GIL perhaps?
[ Calling an external command in Python ]
Look at the
subprocess module in the stdlib:
from subprocess import call
call(["ls", "-l"])
The advantage of subprocess vs system is that it is more flexible
(you can get the stdout, stderr, the "real" status code, better error
handling, etc...). I think os.system is deprecated, too, or will be:
http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module
For quick/dirty/one time scripts,
os.system
is enough, though.
os.system("some_command with args")
passes the
command and arguments to your system's shell. This is nice because you
can actually run multiple commands at once in this manner and set up
pipes and input/output redirection. For example,
os.system("some_command < input_file | another_command > output_file")
However, while this is convenient, you have to manually handle the
escaping of shell characters such as spaces, etc. On the other hand,
this also lets you run commands which are simply shell commands and not
actually external programs.
see documentation
stream = os.popen("some_command with args")
will do the same thing as os.system
except that it gives you a file-like object that you can use to access
standard input/output for that process. There are 3 other variants of
popen that all handle the i/o slightly differently. If you pass
everything as a string, then your command is passed to the shell; if you
pass them as a list then you don't need to worry about escaping
anything.
see documentation
import os
cmd = 'ls -al'
os.system(cmd)
If you want to return the results of the command you need
os.popen
Programación en general...
Algunos investigadores (
Hayes
,
Bloom)
han mostrado que toma aproximadamente diez años desarrollar habilidades
en cualquiera de una amplia variedad de áreas, incluyendo el juego
de ajedrez, la composición musical, la pintura, el piano, la natación,
el tenis, y la investigación en neurosicología y topología.
Parece no haber atajos: incluso Mozart, prodigio musical a los 4 años,
se tomó 13 más antes de empezar a producir música
de calidad mundial. En otro género, parece que los Beatles llegan
a escena apareciendo en el espectáculo de Ed Sullivan en 1964. Pero
ellos habían estado tocando desde 1957, y aunque tenían una
masa de seguidores desde antes, su primer gran éxito,
Sgt. Peppers
, apareció en 1967. Samuel Johnson pensaba que se requieren más
de diez años: "La excelencia en cualquier área puede lograrse
sólo mediante el trabajo de toda una vida; no es algo que pueda
adquirirse a un menor precio." Y Chaucer se quejaba "the lyf so short,
the craft so long to lerne."
Aquí está mi receta para el éxito en programación:
-
Interésate en la programación, y haz programación
porque es divertida. Asegúrate que se mantiene tan divertida que
estarás en disposición de invertir diez años.
-
Habla con otros programadores. Lee otros programas. Esto es más
importante que cualquier libro o curso.
-
Programa. El mejor tipo de aprendizaje es aprender haciendo (learning
by doing) . Para decirlo más técnicamente, "El máximo
nivel de desempeño de los individuos en un dominio dado, no se logra
automáticamente como función de experiencia extendida, sino
que el nivel de desempeño puede incrementarse incluso en individuos
altamente experimentados como resultado de esfuerzos deliberados por mejorar."
(p.
366) y "el aprendizaje más efectivo requiere una tarea bien
definida con un apropiado nivel de dificultad acorde con el individuo,
retroalimentación informativa, y oportunidades de repetición
y corrección de errores." (p. 20-21) El libro Cognition
in Practice: Mind, Mathematics, and Culture in Everyday Life es
una interesante referencia sobre este punto de vista.
-
Si quieres, dedica cuatro o cinco años en una universidad (o más
en una escuela de graduados). Esto te dará acceso a algunos posiciones
que requieren credenciales, y te dará un entendimiento más
profundo del campo, pero si no disfrutas la escuela, puedes (con algo de
dedicación) obtener una experiencia similar trabajando. Como sea,
la lectura de libros por sí sola no será suficiente. "La
educación en computación no puede hacer a nadie un expero
programador más que el estudio de pinceles y pigmentos puede hacer
a alguien un pintor experto" dice Eric Raymond, autor de The New Hacker's
Dictionary. Unos de los mejores programadores que yo haya contratado
alguna vez tenía sólamente un grado de bachiller (High School);
pero ha producido una gran cantidad de excelentes
programas , tiene su propio grupo
de noticias (news
group) , y sin duda es mucho más rico de lo que yo llegue a
ser.
-
Trabaja en proyectos con otros programadores. Sé el mejor programador
en algunos proyectos; sé el peor en otros. Cuando eres el mejor,
tienes que poner a prueba tus habilidades para liderar un proyecto y para
inspirar a otros con tu visión. Cuando eres el peor, aprendes lo
que los maestros hacen, y aprendes lo que a ellos no les gusta hacer (pues
te ponen a hacerlo por ellos).
-
Trabaja en proyectos después que otros programadores. Proponte
entender un programa escrito por otra persona. Mira cuánto toma
entenderlo y hazle correcciones cuando los programadores originales no
están allí. Piensa en cómo diseñar tus programas
para facilitarles el trabajo a aquellos que le harán mantenimiento
después de tí.
-
Aprende por lo menos una media docena de lenguajes de programación.
Incluye uno con soporte para abstracciones de clases (como Java o C++),
uno que dé soporte a la abstracción functional (como Lisp
o ML), uno que dé soporte a la abstracción sintáctica
(como Lisp), uno que dé soporte a especificationes declarativas
(como Prolog o plantillas C++), uno que dé soporte a corutinas (como
Icon o Scheme), y uno que dé soporte al paralelismo (como Sisal).
-
Recuerda que hay "computadoras" en la "ciencia de la computación".
Conoce cuánto le toma a tu computadora ejecutar una instrucción,
alcanzar una palabra de la memoria (con y sin cache), leer palabras consecutivas
de disco, y ubicar una nueva localización en disco. (Respuestas
aquí.)
-
Involúcrate en un plan de estandarización de algún
lenguaje. Podría ser en el mismo comité ANSI C++, o podría
ser simplemente decidir si tu estilo de codificación tendrá
niveles de identación de 2 ó 4 espacios. Como sea, averigua
lo que les gusta a otras personas en un lenguaje, cómo lo perciben,
y quizá incluso un poco de por qué lo perciben como lo hacen.
-
Ten el buen juicio para lanzar el plan de estandarización del
lenguaje tan pronto como sea posible.
Con todo lo anterior en mente, es cuestionable qué tan lejos puedes
llegar sólo leyendo libros. Antes de que naciera mi primer hijo,
leí todos los libros
Aprende a (
How To), y sin embargo
me sentía como un tonto principiante. 30 meses después, cuando
nació mi segundo hijo, ¿acaso regresé a los libros? No.
Al contrario, me apoyé en mi experiencia personal, que me resultó
mucho más útil y confiable que las miles de páginas
escritas por los expertos.
Fred Brooks, en su ensayo
No
Silver Bullets, identificó un plan de tres partes para encontrar
grandes diseñadores de programas:
-
Sistemáticamente identificar a los diseñadores líderes
lo más pronto posible.
-
Asignar un tutor de carrera para que sea responsable del desarrollo del
prospecto y mantenga cuidadosamente un registro de seguimiento.
-
Ofrecer oportunidades a los diseñadores en crecimiento para que
interactúen y se motiven mutuamente.
Esto asume que algunas personas ya tienen las cualidades necesarias para
ser grandes diseñadores; la tarea es persuadirlos apropiadamente.
Alan
Perlis lo dice de manera más sucinta: "A cualquiera se le puede
enseñar a esculpir: A Miguel Angel habría que habérsele
enseñado cómo no hacerlo. Así pasa con los grandes
programadores".
Así que adelante, compra ese libro de Java; probablemente obtendrás
algo de él. Pero no cambiará tu vida o tus reales habilidades
como programador en 24 horas, días o incluso meses.