关于python:利用while循环及嵌套输出九九乘法口诀表的进阶思考

34次阅读

共计 3042 个字符,预计需要花费 8 分钟才能阅读完成。

首先,从输入最根本的图形开始:输入一个 ’✮’。
print('✮')
那如何用循环实现输入五颗 ’✮’ 呢?

# 代码块 1
i = 1
while i <= 5:
    print ('✮')
    i += 1

#理论输入后果如下:✮
✮
✮
✮
✮

咱们如果想不换行输入,该怎么调整呢?这时候咱们能够想到 print()的默认参数:

print(self, *args, sep='', end='\n', file=None)

知识点:如果要实现单个语句的多个参数同行输入,能够通过对默认参数 sep=’ ‘ 进行更改;如果要实现多个语句同行输入,能够通过对默认参数 end=’\n’ 进行批改。
代码块 1 的循环中,print (‘✮’)理论被屡次执行,理论为多个语句,所以须要对 end=’\n’ 进行批改。’\n’ 示意换行,那咱们只有改为空格即可实现:’ ‘。(注:此处引号内理论为一个空格键)让咱们再执行一次批改后上述代码:

# 代码块 2
i = 1
while i <= 5:
    print ('✮',end=' ')   #不换行输入
    i += 1
    
#此时理论输入的就是咱们想要的后果:✮ ✮ ✮ ✮ ✮ 

在以上操作的根底上,如果让你 输入一个由 '✮' 组成的正方形 该如何实现呢?

这时咱们能够思考一下,把 代码块 2 看做一个整体,即可同行输入五个 ’✮’,那咱们只有将 代码块 2 反复执行五遍是不是就能够实现了呢?于是,咱们须要在此基础上为 代码块 2 减少一个外循环的构造即可。为了不便了解,咱们先写一个循环的构造进去:

# 代码块 3
j=1
while j <= 5:
    print('*')
    j+=1
    
#这里实现的是将 '*' 打印五遍:*
*
*
*
*

是不是和打印 ’✮’ 的构造一样?只不过此处是分行输入。这个时候咱们只有将 代码块 2 嵌入到下面的 代码块 3 中就能够实现 输入一个由 '✮' 组成的正方形 。如何嵌入呢?只有将下面的 print() 内容替换掉即可:

# 代码块 4
j=1
while j <= 5:  
    #将 * 代码块 2 * 嵌入
    i = 1 
    while i <= 5:
        print ('✮', end=' ')
        i += 1
    
    j+=1
    
#然而此时并未如咱们所想,输入一个由 '✮' 组成的正方形 `
✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ 

为什么这样呢?咱们仔细观察一下。一共输入了 25 个 ’✮ ‘,且是同行输入,也就是说 代码块 4 理论仅实现了 代码块 2 同行的五遍输入。于是,咱们只有将同行改为换行即可,对不对?可咱们是将 代码块 2 看做了一个整体,没有可间接批改的 print()语句怎么办?

咱们能够思考一下,内循环每次执行输入后没有换行,咱们是不是能够让它在每次执行完输入后强制换行呢?于是咱们依据程序自上而下运行的逻辑,在内循环每次执行输入后执行一次换行的打印即可,即减少一个 print()语句。

# 代码块 5
j=1
while j <= 5:
    i = 1
    while i <= 5:
        print ('✮', end=' ')
        i += 1
    print()    #减少 print()强制换行
    j+=1
    
#此时即是完满后果:✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ 

此时咱们回顾一下整体的逻辑:

1. 内循环管制每行输入;通过 i += 1 实现数量递增;

2. 外循环管制每列输入;通过 j += 1 实现数量递增;

3. 当外循环 j = 1 时,内循环顺次输入,内循环条件不满足时,跳出内循环,j 进行 +1;

当外循环 j = 2 时,内循环顺次输入,内循环条件不满足时,跳出内循环,j 进行 +1;

顺次类推,直至外循环不满足条件时,完结整个循环。

让咱们通过 debugger 工具(可登入:https://pythontutor.com/pytho… 应用)来看一下代码实现的具体步骤:
https://www.bilibili.com/vide…
咱们有也能够通过图表模型看一下:

通过以上操作,置信让你输入一个正方形应该能够信手拈来。
那咱们再进一步思考一下,三角形该如何输入呢?
咱们能够通过观察以上图表能够看出,当 j = i 时,能够连接成一条自左上到右下的对角连线,这条连线能够把正方形均分为两个三角形。
分割线的左下局部,每个圆形内都是 j >i;右上局部,每个圆形内都是 j <i。
所以,如果在 代码块 5 中,内循环的根底上减少一个管制 j 和 i 大小比拟的条件,是不是就能够实现三角形打印了呢?

咱们能够尝试一下:

# 代码块 6
j = 1
while j <= 5:
    i = 1
    while i <= j:                #管制 j 和 i 大小比拟的条件
        print ('✮', end=' ')
        i += 1
    print ( )
    j += 1
#输入后果:✮ 
✮ ✮ 
✮ ✮ ✮ 
✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ 

当然,咱们还能够通过控件 j 和 i 大小比拟的条件实现不同尺寸和形态三角形的输入,这里就不一一演示 了,有趣味的能够在 代码块 6 的根底上自行尝试。

通过以上操作,咱们顺利实现了三角形的打印,大家有没有发现,三角形的阶梯构造和 ” 九九乘法口诀表 ” 的构造很相似?

咱们在 代码块 6 中输入的是 5 列,如果要实现乘法表的 9 列,是不是更改一下 j 的数据就能够了呢?咱们试一下:

# 代码块 7
j = 1
while j <= 9:       #改为输入 9 列
    i = 1
    while i <= j:
        print ('✮', end=' ')
        i += 1
    print ( )
    j += 1
    
#实现后果是这样的:✮ 
✮ ✮ 
✮ ✮ ✮ 
✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ 
✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ ✮ 

那进一步,咱们在 代码块 7 中输入的是 ’✮ ‘,咱们用乘式替换掉 ’✮’ 呢?

# 代码块 8
j = 1
while j <= 9:
    i = 1
    while i <= j:
        print (f'{i}*{j}={i*j}', end='')   #乘式替换掉'✮'
        i += 1
    print ( )
    j += 1
    
#后果如下:1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

仔细的同学能够发现,此处对齐不对立。这是因为咱们每个乘式输入后设定的是以 end=’ ‘ 完结,空间距离虽放弃了统一,但因为上面的乘式中字符大小产生了变动,导致对齐不对立。此时咱们能够通过改为制表符来调整:

# 代码块 9
j = 1
while j <= 9:
    i = 1
    while i <= j:
        print (f'{i}*{j}={i*j}',end='\t')  #调整距离符为制表符
        i += 1
    print ( )
    j += 1
    
#此时输入如下:1*1=1    
1*2=2    2*2=4    
1*3=3    2*3=6    3*3=9    
1*4=4    2*4=8    3*4=12    4*4=16    
1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81    

如还有对正不统一状况,为网页显示问题,理论输入如下图:

此时是不是就实现了 ” 九九乘法口诀表 ” 的输入。

咱们以上仅为通过 while 循环管制的运算逻辑,下期咱们剖析通过 for 循环进行运算。于此同时,以上代码还有能够优化的中央,欢送大家一起探讨学习!下期见!

正文完
 0