[EMAIL PROTECTED] writes: > hi > i wish to generate a table using cgi > toprint = [('nickname', 'justme', 'someplace')] > print '''<table border="1"> > <tr> > <td>User</td> > <td>Name</td> > <td>Address</td> > </tr> > <tr> > ''' > > for i in range(0,len(toprint)-1): > for j in range(0,len(toprint[0])-1): > print "<td> %s </td>" % toprint[i][j] > > print '''</tr> > </table>''' > > but it only prints out a table with "User | Name | address" > it didn't print out the values of toprint > > is there mistake in code? please advise
You're not calling range right. It's designed for dealing with lists, so range(n) returns [0, ..., n - 1], and range(to, bottom) returns [top, ..., bottom - 1]. len(toprint) is 1, so len(toprint) - 1 is 0, so you're calling range(0, 0), which is an empty list. So you make no passes through the outer loop. Those two calls to range should be range(len(toprint)) and range(len(toprint[i])) (n.b.: i, not 0, is the index). Of course, for is for walking elements of a list. You don't need the indices at all. The pythonic way to write this loop would be: for tup in toprint: for el in tup: print "<td> %s </td>" % el But your HTML is also broken. The loop as you have it will print one row containing all the elements in toprint concatenated together. You need to put each tuple in toprint into a separate row, like so: for tup in toprint: print "<tr>" for el in tup: print "<td> %s </td>" % el print "</tr>" print "</table>" and of course leave out the trailing <tr> in the print statement that precedes the loop. <mike -- Mike Meyer <[EMAIL PROTECTED]> http://www.mired.org/home/mwm/ Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information. -- http://mail.python.org/mailman/listinfo/python-list