将python中的数字乘以数字1,但仅限于用户给出的特定数字

时间:2013-07-21 14:22:28

标签: python while-loop

我要定义一个过程,它将输入一个正整数,并打印出一个乘法表,显示所有整数乘法,包括输入数。 例如,我需要这个输出:

  

print_multiplication_table(2)

     

1 * 1 = 1

     

1 * 2 = 2

     

2 * 1 = 2

     

2 * 2 = 4

所以我试过这个:

def print_multiplication_table(n):
    count=0
    multiplicador=n
    while count<multiplicador:
        count+=1
        print n,"x", count, "=", n*count

    def print_multiplication_table(n):
        num=1
        print str(num) + ' * ' + str(num) + ' = ' + str(num*num)
        while num<n:
            siguiente=num+1
            conteo=num-1
            while conteo<n:
                print str(num) + ' * ' + str(siguiente) + ' = ' + str(num*siguiente)
                print str(num) + ' * ' + str(siguiente) + ' = ' + str(num*siguiente)

但是这会产生一个永远运行的循环,我不知道如何让它停止。

然后我尝试了一种不同的,更优雅的方法,就像这样:

def print_multiplication_table(n):
    count=0
    multiplicador=n
    while count<multiplicador:
        count+=1
        print n,"x", count, "=", n*count

但它没有考虑到我乘以之前的数字的乘法(输出是2x1 = 2,2x2 = 4,但不是乘以1x1,也不是1x2)。

我需要做出哪些改变?任何提示? 谢谢!

3 个答案:

答案 0 :(得分:6)

最简单的是:

from itertools import product

def pmt(n):
    for fst, snd in product(xrange(1, n + 1), repeat=2):
        print '{} * {} = {}'.format(fst, snd, fst * snd)

pmt(2)

1 * 1 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4

答案 1 :(得分:4)

这里需要一个嵌套的for循环。

>>> def print_multiplication_table(n):
        for i in xrange(1, n+1):
            for j in xrange(1, n+1):
                print "{}x{}={}".format(i, j, i*j)


>>> print_multiplication_table(2)
1x1=1
1x2=2
2x1=2
2x2=4

您的while循环无法正常工作,因为您从1转到数字并且仅将数字乘以count,因此会生成类似10x1, 10x2, 10x3...的序列。

答案 2 :(得分:1)

使用生成器表达式:

r = xrange(1, n+1)
g = (' '.join([str(i), '*', str(j), '=', str(i*j)]) for i in r for j in r)
print ('{}\n'*n*n).format(*g)