Programming exercises/challenges

B

btkuhn

Hi guys,

I'm learning Python by teaching myself, and after going through several
tutorials I feel like I've learned the basics. Since I'm not taking a
class or anything, I've been doing challenges/programs to reinforce the
material and improve my skills. I started out with stuff like "Guess my
number" games, hangman, etc. and moved on to making poker and card
games to work with classes. For GUIs I created games like minesweeper,
and a GUI stock portfolio tracker. I am out of ideas and am looking for
programming projects, challenges, or programs that have helped you'll
learn. I'm working on the project Euler problems, but I find that they
don't really help my programming skills; they are more math focused.
Suggestions? What has been useful or interesting to you? I'd also
welcome sources of textbook type problems, because the ones provided in
tutorials tend to be repetitive.

Thanks,
Ben
 
M

Mensanator

Hi guys,

I'm learning Python by teaching myself, and after going through several
tutorials I feel like I've learned the basics. Since I'm not taking a
class or anything, I've been doing challenges/programs to reinforce the
material and improve my skills. I started out with stuff like "Guess my
number" games, hangman, etc. and moved on to making poker and card
games to work with classes. For GUIs I created games like minesweeper,
and a GUI stock portfolio tracker. I am out of ideas and am looking for
programming projects, challenges, or programs that have helped you'll
learn. I'm working on the project Euler problems, but I find that they
don't really help my programming skills; they are more math focused.
Suggestions? What has been useful or interesting to you?

Math problems. :)
I'd also
welcome sources of textbook type problems, because the ones provided in
tutorials tend to be repetitive.

I read rec.puzzles regularly and always approach each puzzle
in a "how would I solve this with a program" way. Not all
lend themselves to computer solutions, some of the regulars
there frown on computer answers and some are simply math
problems in disguise. I follow sci.math for the same reason.

And alt.math. And alt.math.recreational.

Another hobby I have is tracking movie box-office receipts
(where you can make interesting graphs comparing Titanic
to Harry Potter or how well the various sequels do, if Pierce
Brosnan saved the James Bond franchise, what can you say about
Daniel Craig?). Lots of potential database problems there.
Not to mention automating the data collection from the Internet
Movie Database by writing a web page scraper than can grab
six months worth of data in a single session (you probably
wouldn't need this if you cough up a subscription fee for
professional access, but I'm not THAT serious about it).

There is nothing like such a hobby to provide motivation to
learn programming.

Here's something interesting: take a films opening weekend
box-office receipts and multiply it by Pi. You'll get the
film's total gross.
 
M

Mr.SpOOn

Another hobby I have is tracking movie box-office receipts
(where you can make interesting graphs comparing Titanic
to Harry Potter or how well the various sequels do, if Pierce
Brosnan saved the James Bond franchise, what can you say about
Daniel Craig?). Lots of potential database problems there.
Not to mention automating the data collection from the Internet
Movie Database by writing a web page scraper than can grab
six months worth of data in a single session (you probably
wouldn't need this if you cough up a subscription fee for
professional access, but I'm not THAT serious about it).

This is really interesting. What would one need to do such a thing?
The only program web related I did in Python was generating a rss feed
from a local newspaper static site, using BeautifulSoup. But I never
put it on an online host. I'm not even sure if I could run. What
requisites should have the host to run python code?

Thanks and sorry for the meddling.
 
G

greg

Hi guys,

I'm learning Python by teaching myself, and after going through several
tutorials I feel like I've learned the basics. Since I'm not taking a
class or anything, I've been doing challenges/programs to reinforce the
material and improve my skills. I started out with stuff like "Guess my
number" games, hangman, etc. and moved on to making poker and card
games to work with classes. For GUIs I created games like minesweeper,
and a GUI stock portfolio tracker. I am out of ideas and am looking for
programming projects, challenges, or programs that have helped you'll
learn. I'm working on the project Euler problems, but I find that they
don't really help my programming skills; they are more math focused.
Suggestions? What has been useful or interesting to you? I'd also
welcome sources of textbook type problems, because the ones provided in
tutorials tend to be repetitive.

Thanks,
Ben

You night look at "Useless Python" (you'll have to Google for the
site). It has tons of problems from trivial to complex.
--greg
 
M

Mr.SpOOn

If you need to do it on the extremely cheap, you can host on your own
machine on a port other than 80, make sure your router / firewall is
forwarding the port to your machine, and use dyndns (http://dyndns.com) to
give yourself a domain name. CherryPy (http://cherrypy.org) makes the python
side of hosting a simple service or app quite painless. I use this method to
host a little app for downloading Ubuntu packages and their dependencies as
a tarfile on my personal machine.

Thanks, I'll try.

To turn back in topic, there is the python challenge:
http://www.pythonchallenge.com/
I started it when I was learning Python, but since the beginning it is
not as simple as they say on the site. It maybe stimulating.
 
P

Philip Semanchuk

This is really interesting. What would one need to do such a thing?
The only program web related I did in Python was generating a rss feed
from a local newspaper static site, using BeautifulSoup. But I never
put it on an online host. I'm not even sure if I could run. What
requisites should have the host to run python code?

I'm not sure why you'd need to host the Python code anywhere other
than your home computer. If you wanted to pull thousands of pages from
a site like that, you'd need to respect their robots.txt file. Don't
forget to look for a crawl-delay specification. Even if they don't
specify one, you shouldn't let your bot hammer their servers at full
speed -- give it a delay, let it run in the background, it might take
you three days versus an hour to collect the data you need but that's
not too big of deal in the service of good manners, is it?

You might also want to change the user-agent string that you send out.
Some sites serve up different content to bots than to browsers.

You could even use wget to scrape the site instead of rolling your own
bot if you're more interested in the data manipulation aspect of the
project than the bot writing.

Enjoy
Philip
 
M

Mr.SpOOn

I'm not sure why you'd need to host the Python code anywhere other than your
home computer. If you wanted to pull thousands of pages from a site like
that, you'd need to respect their robots.txt file. Don't forget to look for
a crawl-delay specification. Even if they don't specify one, you shouldn't
let your bot hammer their servers at full speed -- give it a delay, let it
run in the background, it might take you three days versus an hour to
collect the data you need but that's not too big of deal in the service of
good manners, is it?

Mmm, I didn't really mean the possibility to just host the code, but
to run. I mean, like server side code, so that my programs keep
running and updating, in my case, the RSS feed, without the need for
me to be online and run it.
 
E

Edwin

Hi guys,

I'm learning Python by teaching myself, and after going through several
tutorials I feel like I've learned the basics. Since I'm not taking a
class or anything, I've been doing challenges/programs to reinforce the
material and improve my skills. I started out with stuff like "Guess my
number" games, hangman, etc. and moved on to making poker and card
games to work with classes. For GUIs I created games like minesweeper,
and a GUI stock portfolio tracker. I am out of ideas and am looking forprogrammingprojects, challenges, or programs that have helped you'll
learn. I'm working on the project Euler problems, but I find that they
don't really help myprogrammingskills; they are more math focused.
Suggestions? What has been useful or interesting to you? I'd also
welcome sources of textbook type problems, because the ones provided in
tutorials tend to be repetitive.

Thanks,
Ben

I'm also learning Python by myself, downloading open ebooks, reading
tutorials, reading other people's code, etc. and in order to put my
knowledge into practice I've been writing small programs to solve my
everyday computer problems: a simple email client (because sometimes
it seems to me that email clients now have so many features and
preferences) that reads my fetchmailrc, a diary manager compatible
with my Emacs diary file (sometimes I don't want to open Emacs for a
quick note)... in general I try to solve problems related to my own
workflow.

I also try to play with some of my girlfriend's ideas on computer use:
she came up with an idea for a calculator with which she could easily
keep track of our bills (but found financial software a bit
complicated for simple tasks, once again, too many features and
preferences) so I started to code a small multi-touch app as
"intuitive" as possible (and still working on it).

What I'm saying is that I've found useful not to think about
programming itself but just think of it as a medium to solve my own
(common) problems.

Best regards,
E.
 
A

Arnaud Delobelle

[...]
a diary manager compatible with my Emacs diary file (sometimes I don't
want to open Emacs for a quick note)

You mean that you sometimes don't have emacs open?
 
E

Edwin

[...]
a diary manager compatible with my Emacs diary file (sometimes I don't
want to open Emacs for a quick note)

You mean that you sometimes don't have emacs open?

heh... I believe in the potpourri style mate (and I don't mean petals
and spices).
After all I'm no expert.
 
S

skip

Arnaud> You mean that you sometimes don't have emacs open?

I am constantly amazed at work that people open a separate emacs for each
file they want to edit. Most of them seem not to even know that find-file
exists.

Skip
 
R

r0g

Edwin said:
I'm also learning Python by myself, downloading open ebooks, reading
tutorials, reading other people's code, etc. and in order to put my
knowledge into practice I've been writing small programs to solve my
everyday computer problems: a simple email client (because sometimes
it seems to me that email clients now have so many features and
preferences) that reads my fetchmailrc, a diary manager compatible
with my Emacs diary file (sometimes I don't want to open Emacs for a
quick note)... in general I try to solve problems related to my own
workflow.

I also try to play with some of my girlfriend's ideas on computer use:
she came up with an idea for a calculator with which she could easily
keep track of our bills (but found financial software a bit
complicated for simple tasks, once again, too many features and
preferences) so I started to code a small multi-touch app as
"intuitive" as possible (and still working on it).

What I'm saying is that I've found useful not to think about
programming itself but just think of it as a medium to solve my own
(common) problems.

Best regards,
E.

Spotted this on facebook t'other day, don't know if it's still active
and don't have time to check really.

http://www.facebook.com/jobs_puzzles/index.php

I've found writing your own servers can be an good hands on way of
learning languages and various internet protocols, just make sure you
have Wireshark to hand for debugging!

Roger.
 
E

Edwin

    >> a diary manager compatible with my Emacs diary file (sometimes I
    >> don't want to open Emacs for a quick note)

    Arnaud> You mean that you sometimes don't have emacs open?

I am constantly amazed at work that people open a separate emacs for each
file they want to edit.  Most of them seem not to even know that find-file
exists.

Skip

Come on mate... it's already a bit hard to post in a non-native
language. As a beginner in Python it's just "my two pennies worth",
really.

Cheers,
E.
 
S

skip

Edwin> Come on mate... it's already a bit hard to post in a non-native
Edwin> language. As a beginner in Python it's just "my two pennies
Edwin> worth", really.

No knock on you at all, just an observation about the work patterns many of
my colleagues have. The people I work with are professional software
engineers, engineers, quantitative analysts, etc. Many not at all new to
Python, C++, Unix or Emacs. And it's not like I haven't shown them how to
do it. I showed one guy how to exchange two adjacent words today with M-t.
He about fell off his chair.

Come to think of it, the one other person I work with who always keeps an
Emacs open is a vi user who likes it for sql mode. Nothing else. He runs
viper mode and keeps an sql mode buffer open continuously with all his
little sql snippets ready to submit to our Sybase server. When he uses vim
to edit? One vim session per file. I'm pretty sure that vim allows you to
open multiple files at once as well. Go figure.

Skip
 
E

Edwin

    >> I am constantly amazed at work that people open a separate emacs for
    >> each file they want to edit.  Most of them seem not to even know that
    >> find-file exists.

    Edwin> Come on mate... it's already a bit hard to post in a non-native
    Edwin> language. As a beginner in Python it's just "my two pennies
    Edwin> worth", really.

No knock on you at all, just an observation about the work patterns many of
my colleagues have.  The people I work with are professional software
engineers, engineers, quantitative analysts, etc.  Many not at all new to
Python, C++, Unix or Emacs.  And it's not like I haven't shown them how to
do it.  I showed one guy how to exchange two adjacent words today with M-t.
He about fell off his chair.

Come to think of it, the one other person I work with who always keeps an
Emacs open is a vi user who likes it for sql mode.  Nothing else.  He runs
viper mode and keeps an sql mode buffer open continuously with all his
little sql snippets ready to submit to our Sybase server.  When he uses vim
to edit?  One vim session per file.  I'm pretty sure that vim allows you to
open multiple files at once as well.  Go figure.

Skip

No worries. I actually agree. I've found myself in situations like the
ones you describe, finding new commands and realizing there's more to
it than I thought. I have to point out that I myself use Vim more than
Emacs. Not because I think it's better (I'm not a religious person)
but because it has better integration with my Mac... and actually, I
use them for different programming tasks.

As a newcomer to Unix (I've come from Web related fields) I've been
learning not only how to use the operating system, but also Python,
Emacs, Vim, bash, etc. This hasn't been easy, of course, but it has
been quite interesting and as I'm learning a specific topic (say
learning readline commands, how to access command history, etc.) I
don't always keep my editor open; sometimes I want to learn how an
editor does its stuff and then I 'hack' a script for manipulating a
relevant text file (like my diary).

I know you can run your favorite shell inside Emacs and learn from
there, but being the only computer at home (and not the fastest) I
don't want to be opening programs all the time (maybe my girlfriend
has several programs running) so being able to write some beginners'
scripts to solve common tasks has been a good learning experience for
me.

Greetings from the third world (or is it underdeveloped? ;))
E.
 
A

Arnaud Delobelle

Edwin said:
I have to point out that I myself use Vim more than
Emacs. Not because I think it's better (I'm not a religious person)
but because it has better integration with my Mac... and actually, I
use them for different programming tasks.

I'm only a very occasional user of vi, so I don't really know how vim
integrates with MacOS X but have you tried aquamacs
(http://aquamacs.org/)?
 
M

Michele Simionato

    >> a diary manager compatible with my Emacs diary file (sometimes I
    >> don't want to open Emacs for a quick note)

    Arnaud> You mean that you sometimes don't have emacs open?

I am constantly amazed at work that people open a separate emacs for each
file they want to edit.  Most of them seem not to even know that find-file
exists.

Skip

There is a colleague of mine who keeps open a single
Emacs for weeks, with up to fifty buffers open at
the same time; he thinks using multiple
instances of Emacs is an aberration.
I myself usually keep open 3 or 4 instances of Emacs at
the same time. One instance could keep the
bunch of Python files I am editing at the moment, another
instance a bunch of SQL files, another instance
my journal, another the documentation files, etc. I feel
uncomfortable with more than three or four buffer per
Emacs, so I tend to close and reopen them often, or
to use a different Emacs instance.
I mantain my personal journal as a Python script opening
a ReST file with Emacs according to today's date.
Since the code is short, I can as well post it here:

echo $diario.py
# -*- coding: utf-8 -*-
"""
usage: %prog [options]
-p, --publish: publish the journal as a web page
"""

import os, sys, time, datetime, calendar, re, locale
try: # set italian locale
locale.setlocale(locale.LC_ALL, 'it_IT')
except:
locale.setlocale(locale.LC_ALL, 'it_IT.UTF8')
from ms.optionparser import OptionParser

if sys.platform == 'darwin':
EMACS = '/Applications/Aquamacs\ Emacs.app/Contents/MacOS/Aquamacs
\ Emacs'
else:
EMACS = 'emacs'
ROOT = os.path.join(os.environ['HOME'], 'md/diario')
if not os.path.exists(ROOT): os.mkdir(ROOT)
OUTPUT = '/tmp/diario'
DATE = re.compile('\d\d\d\d-\d\d-\d\d.txt$')
today = datetime.date.today()
current_year = today.isoformat()[:4]
templ = """\
%s
---------------------------
"""

def open_today_page():
today_page = os.path.join(ROOT, str(today)) + '.txt'
if not os.path.exists(today_page):
print >> file(today_page, 'w'), templ % today.strftime('%A %d-
%b-%Y')
os.system('%s +4 %s &' % (EMACS, today_page))

def filter_pages_per_month_year(pages, theyear):
yield '.. contents::'
oldmonth = None
for pagename in sorted(pages):
year = pagename[:4]
if year != theyear:
continue
month = pagename[5:7]
if month != oldmonth:
yield '%s %s\n============================' % (
calendar.month_name[int(month)], year)
yield file(os.path.join(ROOT, pagename)).read()
oldmonth = month

def publish_journal():
import docutils.core, webbrowser
print >> file(OUTPUT + '.txt', 'w'), '\n\n'.join(
filter_pages_per_month_year(
[f for f in os.listdir(ROOT) if DATE.match(f)], current_year))
docutils.core.publish_cmdline(
writer_name='html',
argv=[OUTPUT + '.txt', OUTPUT + '.html'])
webbrowser.open('file://%s.html' % OUTPUT)

if __name__ == '__main__':
option, args = OptionParser(__doc__).parse_args()
if option.publish:
publish_journal()
else:
open_today_page()


(the OptionParser comes from this recipe: http://code.activestate.com/recipes/278844/)
 
E

Edwin

I'm only a very occasional user of vi, so I don't really know how vim
integrates with MacOS X but have you tried aquamacs
(http://aquamacs.org/)?

I've tried it but I ended up using original (I'm sure there's a better
adjective) Emacs compiled --with-ns... it's very nice (at least for
what I do, in the little experience I've gained).

Cheers,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top