使用嵌套循环打印乘法表?

时间:2018-06-17 20:05:23

标签: python python-3.x

我很难找到这个练习。

按行和列打印二维列表mult_table。提示:使用嵌套循环。给定程序的示例输出:

1 | 2 | 3
2 | 4 | 6
3 | 6 | 9

这是我到目前为止的代码

mult_table = [
    [1, 2, 3],
    [2, 4, 6],
    [3, 6, 9]
]

for row in mult_table:
    for num in row:
        print(num,' | ',end='|')
    print()

我得到的是这个

1 ||2 ||3 ||
2 ||4 ||6 ||
3 ||6 ||9 ||

我不知道我做错了什么!我也试过做结束=' '但这仍留有空间和|在每一行的末尾。请帮忙。我正在使用Python 3顺便说一句。

6 个答案:

答案 0 :(得分:2)

for row in mult_table:
    line = 0
    for num in row:
        if line < len(mult_table) - 1:
            print(num, '| ', end = '')
            line += 1
        else:
            print(num)

这将逐步遍历每一行,以检查if语句以查看其是否到达行末,并在每个|之间打印num row到结尾,将只打印num,然后返回到下一行。

line = 0放在第一个循环内是必不可少的,因为将其放置在第一个循环外将使line已经满足else语句的if要求。将其放置在初始循环中,每次迭代都会使line重置为0,从而使嵌套的if能够正常运行。

答案 1 :(得分:1)

你正在过度思考这个问题。一个循环应该足够了。您可以解压缩内部列表并指定sep参数。

for m in mult_table:
     print(*m, sep=' | ')

1 | 2 | 3
2 | 4 | 6
3 | 6 | 9

如果你想要两个循环,你需要以编程方式控制分隔符和每个内循环迭代时打印出的结束字符。

for i in mult_table:
    for c, j in enumerate(i):
        sep = '|' if c < len(i) - 1 else ''
        end = ' ' if c < len(i) - 1 else '\n' 
        print(j, sep, end=end)

1 | 2 | 3 
2 | 4 | 6 
3 | 6 | 9 

答案 2 :(得分:1)

使用地图连接:

1 | 2 | 3
2 | 4 | 6
3 | 6 | 9

输出:

{{1}}

答案 3 :(得分:1)

低级别:您的代码在每个号码后面显示两个'|',因为这就是您告诉它要做的事情(其中一个会立即传递给print() num,其中一个是使用end='|'添加的,它告诉print()在打印字符串的末尾添加'|'

使用end=''可以避免第二个'|',但您仍然会在print()调用的每一行末尾添加一个竖线字符。

要在项之间获取'|',而不是在行的末尾,您需要专门处理每行中的最后一项(或者,最好使用" | ".join(row)自动添加分隔符)。

高级别:您可能无法解决此问题。

您的答案硬编码乘法表,但您可以将其作为循环的一部分生成,例如:

# Store the size of the table here 
# So it's easy to change later
maximum = 3
# Make a row for each y value in [1, maximum]
for y in range(1, maximum + 1):
    # Print all x * y except the last one, with a separator afterwards and no newline
    for x in range(1, maximum):
        print(x * y, end=' | ')
    # Print the last product, without a separator, and with a newline
    print(y * maximum)

这解决了给定的具体问题,但我们现在可以更改“maximum”的值以生成任意大小的方形乘法表,我们不必担心乘法表中的错误。

答案 4 :(得分:0)

   row_length = len(mult_table[0]) #Gets length of the first row.

   for row_index, row in enumerate(mult_table): #Loops trough each row.
       count = 1 #Sets count
       cell_index = 0 #Sets cell index count
       while count != row_length: #Checks if end of the row
           print(f'{mult_table[row_index][cell_index]} | ', end='') #Print
           count += 1 #Count increase
           cell_index += 1 #Count increase
       else:
           print(f'{mult_table[row_index][cell_index]}') #Print
           count += 1 #Count increase
           cell_index += 1 #Count increase

这是使用嵌套循环而不使用.join的解决方案。

答案 5 :(得分:0)

这对我有用:

mult_table = [
    [1, 2, 3],
    [2, 4, 6],
    [3, 6, 9]
]
row_num = 0


for row in mult_table:
    i = 0
    for cell in row:
       
        if i < len(mult_table) -1:
            print(cell,'| ', end='')
            i +=1
        else: print(cell)
'''