我不明白这条线

时间:2018-09-12 17:38:19

标签: python python-3.x

因此,我在学校里使用Python 3进行了编程课程。任务基本上是编写一个程序,要求输入1-9之间的两个整数。结果将是一个乘法表,其中包含第一个整数的行数和第二个整数的列数。因此,如果输入5和6,他们将得到:

enter image description here

我在此处找到了生成该程序的代码。现在。我试图剖析它并理解它。但我在某些方面陷入困境。

所以这是代码:

row,col=5,6
i=0
while i <= row :
    j=0
    while j <= col:
        if i+j==0 : print('{:4s}'.format(''),end='') #corner
        elif i*j==0 : print('{:4d}'.format(i+j),end='') # border
        else : print('{:4d}'.format(i*j),end='') # table
        j=j+1   
    print()
    i=i+1

好的。因此,我的小脑子不明白的是如何生成左侧垂直边界。如果满足第一个条件,将在左上角生成一个空格,并将+1添加到变量j。此后,将满足条件二,条件二将依次给出水平边界,该条件将一直持续到j大于col为止。但是,如果j> col,如何生成左边界?代码的哪一部分生成垂直边框?

也。花括号中的输入在.format运算符之前是什么意思?例如,{:4s}{4:d}有何不同?它们只是距离,“ s”代表字符串,d代表数字吗?

此外,最后一条语句print()的作用是什么?

1 个答案:

答案 0 :(得分:2)

该程序的输出为:

       1   2   3   4   5   6
   1   1   2   3   4   5   6
   2   2   4   6   8  10  12
   3   3   6   9  12  15  18
   4   4   8  12  16  20  24
   5   5  10  15  20  25  30

让我们看看每个if / elif / else步骤:

    if i+j==0 : print('{:4s}'.format(''),end='') #corner

由于i和j始终为非负数,因此i+j==0的情况仅在i和j均为0时才会发生。在这种情况下,我们打印一个空白字符串,填充为4个字符长-这将创建左上角的空角,即网格中的0,0。另请注意,end=''确保打印不会自动转到下一行(这是默认行为)。请注意,行循环底部的print()调用会将您带到下一行。

    elif i*j==0 : print('{:4d}'.format(i+j),end='') # border

如果i和j都不为0(这就是我们使用elif的原因),则获得这种情况的唯一方法是当其中一个为0时。在这种情况下,i+j等于非零i和j之间的值。我们将在每一行的开头打印字符i,并在每一列的顶部打印相应的非零字符j。另请参见,每个数字的格式设置为4个字符宽(带有4d)。

    else : print('{:4d}'.format(i*j),end='') # table

如果i和j都不为零,我们将讨论其他情况。我们只需在表中的每个位置打印i和j的乘积。

您可以查看format specification mini language以获得全部详细信息,但是在这种情况下,s代表字符串,d代表数字,数字(如4d)需要输出有4个字符。花括号指定我们将传递给format方法的每个值的位置(如果您有多个值,则可以有多对花括号)。