On Sat, Jan 10, 2009 at 6:01 AM, prasad rao <prasadarao...@gmail.com> wrote: > Hi > I tried to print multiplication table using (*args) to pass parameters.and > tried > to print tables side by side.But the code looks messy .Is there a better way > to do it. > def mtab(*arg): > for x in range(1,11): > print '%3d'%(x),'x','%3d'%(arg[0]),'=','%3d'%(x*arg[0]),(' '*5),\ > '%3d'%(x),'x','%3d'%(arg[1]),'=','%3d'%(x*arg[1]),(' '*5),\ > '%3d'%(x),'x','%3d'%(arg[2]),'=','%3d'%(x*arg[2]),(' '*5) > print(('-')*10).center(78) > for x in range (1,11): > print '%3d'%(x),'x','%3d'%(arg[3]),'=','%3d'%(x*arg[3]),(' '*5),\ > '%3d'%(x),'x','%3d'%(arg[4]),'=','%3d'%(x*arg[4]),(' '*5),\ > '%3d'%(x),'x','%3d'%(arg[5]),'=','%3d'%(x*arg[5]),(' '*5)
You have a lot of duplicated code. You can reduce the duplication by using functions and loops. The first step is to put all the print code into a function rather than repeating the same three formatting expressions over and over: def show(x, y): print '%3d'%(x),'x','%3d'%(y),'=','%3d'%(x*y),(' '*5), Then mtab() can be written like this: def mtab(*arg): for x in range(1,11): show(x, arg[0]) show(x, arg[1]) show(x, arg[2]) print print(('-')*10).center(78) for x in range (1,11): show(x, arg[3]) show(x, arg[4]) show(x, arg[5]) print Now you can see that the show() statements are still repetitive, they can be put into a loop: def mtab(*arg): for x in range(1,11): for i in range(0, 3): show(x, arg[i]) print print(('-')*10).center(78) for x in range (1,11): for i in range(3, 6): show(x, arg[i]) print This is OK except the interface is awkward; do you really want to tell it each number for the table, or would you rather give it a range of numbers? Also you can use another loop to eliminate the duplicated printing of the tables: def mtab(lower, upper): for start in range(lower, upper+1, 3): for x in range(1,11): for y in range(start, start+3): show(x, y) print print(('-')*10).center(78) mtab(1, 11) This does not give quite the same result as your original - it prints the divider after each table - and it always prints three tables per group, even if you didn't ask for it - but it is much simpler and more flexible than your original. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor