Python 如何使用嵌套for循环打印乘法表

Python 如何使用嵌套for循环打印乘法表,python,for-loop,printing,Python,For Loop,Printing,我需要一些帮助打印乘法表使用嵌套for循环。我现在的代码是: for x in range(1,10): print(" ", x, end = '') print() for row in range(1, 10): for col in range(1, 10): num = row * col if num < 10: empty = " " else: if nu

我需要一些帮助打印乘法表使用嵌套for循环。我现在的代码是:

for x in range(1,10):
   print("  ", x, end = '')
   print()
for row in range(1, 10):
    for col in range(1, 10):
        num = row * col
        if num < 10:
            empty = "  "
        else:
            if num < 100: 
                empty  = " " 
        print(empty, num, end = '')
    print()
范围(1,10)内x的
:
打印(“”,x,end=“”)
打印()
对于范围(1,10)中的行:
对于范围(1,10)中的列:
num=行*列
如果num<10:
empty=“”
其他:
如果num<100:
empty=“”
打印(空,数字,结束=“”)
打印()
结果是

我需要把它打印出来


最简单的方法之一是从0开始计数,而不是从1开始计数:

for row in range(0, 10):
    for col in range(0, 10):
        num = row * col
        if num < 10:
            empty = "  "
        else:
            if num < 100: 
                empty  = " " 
        if col == 0:
            if row == 0:
                print("    ", end = '')
            else:
                print("  ", row, end='')
        elif row == 0:
            print("  ", col, end='')
        else:
            print(empty, num, end = '')
    print()
也就是说,这里有一个单行程序版本,可以产生相同的输出:

print("\n".join(("{:>4}"*10).format(*(i*j if i*j else i+j if i+j else "" for j in range(10))) for i in range(10)))

最简单的方法之一是从0开始计数,而不是从1开始计数:

for row in range(0, 10):
    for col in range(0, 10):
        num = row * col
        if num < 10:
            empty = "  "
        else:
            if num < 100: 
                empty  = " " 
        if col == 0:
            if row == 0:
                print("    ", end = '')
            else:
                print("  ", row, end='')
        elif row == 0:
            print("  ", col, end='')
        else:
            print(empty, num, end = '')
    print()
也就是说,这里有一个单行程序版本,可以产生相同的输出:

print("\n".join(("{:>4}"*10).format(*(i*j if i*j else i+j if i+j else "" for j in range(10))) for i in range(10)))
试试这个:

header = '\t{}'.format('\t'.join(map(str, range(1, 10))))
rows = []
for i in range(1, 10):
   row = '\t'.join(map(str, (i*q for q in range(1, 10))))
   rows.append('{}\t{}'.format(i, row))
print(header+'\n' + '\n'.join(rows))
这将给你:

>>> print(header+'\n'+'\n'.join(rows))
        1       2       3       4       5       6       7       8       9
1       1       2       3       4       5       6       7       8       9
2       2       4       6       8       10      12      14      16      18
3       3       6       9       12      15      18      21      24      27
4       4       8       12      16      20      24      28      32      36
5       5       10      15      20      25      30      35      40      45
6       6       12      18      24      30      36      42      48      54
7       7       14      21      28      35      42      49      56      63
8       8       16      24      32      40      48      56      64      72
9       9       18      27      36      45      54      63      72      81

@Selcuk做了一些很好的观察,因此这里有一个版本,其中包含嵌套for循环和正确的对齐方式:

header = []
for i in range(1, 10):
    header.append('{0:>2}'.format(i))

rows = []
for i in range(1, 10):
   row = []
   for q in range(1, 10):
     result = '{0:>2}\t'.format(i*q)
     row.append(result)
   rows.append(row)

print('\t{0:>2}'.format('\t'.join(header)))
for idx, row in enumerate(rows):
   print('{0:>2}\t{1}'.format(idx+1, ''.join(row)))
试试这个:

header = '\t{}'.format('\t'.join(map(str, range(1, 10))))
rows = []
for i in range(1, 10):
   row = '\t'.join(map(str, (i*q for q in range(1, 10))))
   rows.append('{}\t{}'.format(i, row))
print(header+'\n' + '\n'.join(rows))
这将给你:

>>> print(header+'\n'+'\n'.join(rows))
        1       2       3       4       5       6       7       8       9
1       1       2       3       4       5       6       7       8       9
2       2       4       6       8       10      12      14      16      18
3       3       6       9       12      15      18      21      24      27
4       4       8       12      16      20      24      28      32      36
5       5       10      15      20      25      30      35      40      45
6       6       12      18      24      30      36      42      48      54
7       7       14      21      28      35      42      49      56      63
8       8       16      24      32      40      48      56      64      72
9       9       18      27      36      45      54      63      72      81

@Selcuk做了一些很好的观察,因此这里有一个版本,其中包含嵌套for循环和正确的对齐方式:

header = []
for i in range(1, 10):
    header.append('{0:>2}'.format(i))

rows = []
for i in range(1, 10):
   row = []
   for q in range(1, 10):
     result = '{0:>2}\t'.format(i*q)
     row.append(result)
   rows.append(row)

print('\t{0:>2}'.format('\t'.join(header)))
for idx, row in enumerate(rows):
   print('{0:>2}\t{1}'.format(idx+1, ''.join(row)))

这是一个用于打印自定义长度表的函数

def multiplication_table(row, col):
    fin = []
    for i in range(1, row+1):
        arr = []
        for j in range(1, col+1):
            arr.append(i * j)
        fin.append(arr)
    return fin
例:乘法表(3,3)


希望有帮助

这是一个用于打印自定义长度表格的函数

def multiplication_table(row, col):
    fin = []
    for i in range(1, row+1):
        arr = []
        for j in range(1, col+1):
            arr.append(i * j)
        fin.append(arr)
    return fin
例:乘法表(3,3)


希望有帮助

你能在问题中包括你想解决的具体问题吗?首先要做的是修正问题中代码的缩进。另外,发布生成当前输出的代码-显示的代码没有。您能在问题中包含您希望解决的具体问题吗?首先要做的是修复问题中代码的缩进。另外,发布生成当前输出的代码-如图所示的代码没有。投票选择较短的解决方案,但这不是“使用嵌套for循环”。实际上,它们只是嵌入而不是扩展。是的,但显然这是一个家庭作业/项目,教授希望看到显式循环。这些数字也不像原始代码中那样右对齐。向上投票选择较短的解决方案,但这不是“使用嵌套for循环”。实际上,它们只是嵌入而不是扩展。是的,但显然这是一个家庭作业/项目,教授希望看到显式循环。数字也不像原始代码中那样右对齐。