January 22nd, 2013, 04:19 AM

What is wrong with my multiplication table code? (New to Python)
Hello. I've been learning Python from Udacity.com and was told to create multiplication table following this format:
Code:
print_multiplication_table(2)
#1 x 1 = 1
#1 x 2 = 2
#2 x 1 = 2
#2 x 2 = 4
This is my code:
Code:
def print_multiplication_table(n):
x = 1
y = 1
sx = str(x)
sy = str(y)
equation = sx + " * " sy + " = " str(sx * sy)
while x <= n:
while y <= x:
print equation
Y += 1
print equation
x += 1
y = 1
This returns an output of:
Code:
1 * 1 = 1
1 * 1 = 1
1 * 1 = 1
1 * 1 = 1
1 * 1 = 1
1 * 1 = 1
What is causing this? I have access to the answer to the problem, but I don't want it solved for me. I'd like to know what is causing this output so I can work around it and finish the question. Thanks in advance.
January 22nd, 2013, 06:33 AM

Originally Posted by Dried Monkey
Code:
def print_multiplication_table(n):
x = 1
y = 1
sx = str(x)
sy = str(y)
equation = sx + " * " sy + " = " str(sx * sy)
while x <= n:
while y <= x:
print equation
Y += 1
print equation
x += 1
y = 1
What is causing this?
It doesn’t matter how many times you change the values of x and y, because when the value of the variable “equation” was set, x and y were both 1.
Anyway, if I may suggest some ideas:
 it is usually unnecessary to have separate variables for numeric values and their printable counterparts; just use print formatting (.format() or the older % method)
 it’s usually bad practice to create results and produce output in the same function; in most cases it’s more convenient to have one function produce results and another to print the output.
My armada: openSUSE 13.2 (laptop), Debian GNU/Linux 8.0 (desktop, server), OpenELEC 5.0 (HTPC), Android 4.2.1 (tablet)
January 22nd, 2013, 10:11 AM

Case sensitive python distinguishes between y and Y . Could have been transcription typo.
[code]
Code tags[/code] are essential for python code and Makefiles!
January 22nd, 2013, 10:36 AM

See if this gives you any ideas on how to do it
Code:
n=3
for x in range(1, n):
for y in range(1, n):
print x, y
Also, I would suggest that you print str(sx * sy) as strings and numbers define "multiply" differently
Code:
sx = str(x)
sy = str(y)
equation = sx + " * " sy + " = " str(sx * sy)
Last edited by dwblas; January 22nd, 2013 at 10:42 AM.