python循环——九九乘法表(更加轻松的理解循环结构)

感受

首先,得明确意识到这个问题,就是我的循环结构学的一塌糊涂,完全不能很好的使用这个循环来实现各种九九乘法表达输出,这样的循环结构太差了,还需要我自己找时间来补充一下循环的使用,来拓宽自己的思考方向,这是个不错的机会,让我更加充分的体会循环的嵌套。

重点 在写博客中对可迭代对象的求知欲不断的加深 ,让我对于对象以及可迭代的认识更深了,不得不说,有时候还是得写出来才可以给予自己更加强大的欲望,从而推动自己去不断认识更多,这大概就是授之以欲 。最神奇的就是我在思考python中索引的最大值的问题时,我通过一系列的查询操作,我更深入的理解了一遍数据结构,python中数据类型的不同,相应的内存也是不一样的,列表在内存中以动态的数组形式存储数据,它会去预留一定的内存空间出来,这时候我就想到了sql的查询,因为之前的学习如何优化MySQL性能,我就想到了sql的查询,在pymysql使用查询操作,返回的值是元组的,相应的元组在内存中的存储方式就是紧凑连续的,这样才可以优化了系统的性能,在这个过程中,我又产生了一些问题:就是数组是什么,数组的存储方式是什么,数组和什么有关系;所以,不得不说,自己才是最好的老师

目录

感受

第一种九九乘法表

for循环嵌套实现

可迭代对象

while循环嵌套实现

while与for互相嵌套

第二种九九乘法表

for循环嵌套实现

while循环嵌套实现

while和for循环互相嵌套

第三种九九乘法表

for循环嵌套实现

while循环嵌套实现

for和while循环互相嵌套

第四种九九乘法表

for循环嵌套实现

while循环嵌套实现

for和while循环互相嵌套

总结


第一种九九乘法表

第一种循环结构是最常见的一种

首先根据图片要实现的效果,去分析行与列之间的变化

for循环嵌套实现

for循环要求遍历对象为可迭代对象

可迭代对象

说到可迭代对象就不得不好奇(秉持着不将就的原则,老师耳提面命的话,最终我想起来了,好奇是真的,从学习for循环到现在这段时间常常的听到,最终还是克服了懒惰,结果就是看了一堆c语言代码,还完全看不懂,我的水平还是太低了)的去了解一下------可迭代对象。

嗯,我去查了CPython关于可迭代对象的相关文档,不出意外的就是完全看不懂,最后交给ai,看了一阵,最后大概只知道了一点关于序列迭代器(针对列表,元组等序列类型)的相关知识,就是他这个迭代器,有着相应的底层源码去实现它对序列的遍历,以及记录相关的索引,所以可以实现索引的相关的操作。

python 复制代码
for i in range(1, 10):
    for j in range(1, i+1):
        print(f'{j}*{i}={i*j}', end='\t')  # 打印出来i*j的值,每列之间存在四个空格
    print()  # 每次结束第二个for循环就实现换行

while循环嵌套实现

python 复制代码
i = 1  # 设定计数器初始值为1(行)
while i <= 9:  # 选定循环并确定循环条件
    j = 1  # 设置计数器初始值为1(列)
    while j <= i:  # 设置循环条件
        print(f'{j}*{i}={i * j}', end='\t')  # 输出列乘行,并使用制表符将他制成表格
        j += 1  # 设置列的自增
    i += 1  # 设置行的自增
    print()  # 输出空实现换行

while与for互相嵌套

python 复制代码
i = 1
while i <= 9:
    for j in range(1, i + 1):
        print(f"{j}*{i}={i * j}", end="\t")
    print()  # 换行
    i += 1
python 复制代码
for i in range(1, 10):
    j = 1
    while j <= i:
        print(f"{j}*{i}={i * j}", end="\t")
        j += 1
    print()  # 换行

这两种循环一起使用,确实是有些不至于了。

甚至再去考虑其他的循环嵌套的形式,比如多次的循环嵌套,但是那么写明显不合理,因为每次处理十个数字的话那要遍历的次数就是10*10*10=1000次,对性能等的消耗绝对不低,如果只是要实现九九乘法表的话,这绝对就是传说中的史山代码了,再去考虑它也就没有什么意义了。

第二种九九乘法表

for循环嵌套实现

python 复制代码
for i in range(1, 10):
    print((' '*8)*(9-i), end='\t')
    for j in range(1, i + 1):
        print(f'{i}*{j}={j * i:2d}', end='\t')
    print()

因为要实现从第一行开始的8个间距,且每次减少一个间距,所以需要使用第二行的代码,让它用制表符以实现空格间距之后的打印值,最后使用print()让他在进行完行运算之后,进行换行。

while循环嵌套实现

python 复制代码
i = 1
while i <= 9:
    j = 1
    print((' '*8)*(9-i), end='\t')
    # print('        ' * (9 - i), end='')
    while j <= i:
        print(f'{i}*{j}={i*j:2d}', end='\t')
        j += 1
    i += 1
    print()

真是要把自己笑死了,大脑疯狂运转,想着为什么它没有实现控制台的后移,想着我进行了*8和*(9-i)了,结构那个字符串里面压根没有空格。

while和for循环互相嵌套

python 复制代码
i = 1
while i <= 9:
    print((' ' * 8) * (9 - i), end='\t')
    for j in range(1, i + 1):
        print(f'{i}*{j}={i * j:2d}', end='\t')
    print()
    i += 1
python 复制代码
for i in range(1, 10):
    j = 1
    print((' '*8)*(9-i), end='\t')
    while j <= i:
        print(f'{i}*{j}={i * j:2d}', end='\t')
        j += 1
    print()

发现就是他们两个互相嵌套的时候for和while的交换实质是同一种。

第三种九九乘法表

for循环嵌套实现

python 复制代码
for i in range(9, 0, -1):
    for j in range(1, i+1):
        print(f'{j}*{i}={j*i}', end='\t')
    print()

根据控制台输出的第一个式子,观察列和行的情况,确定谁不变,从而设置循环条件。

while循环嵌套实现

python 复制代码
i = 9
while i >= 1:
    j = 1
    while j <= i:
        print(f'{j}*{i}={j * i:2d}', end='\t')
        j += 1
    i -= 1
    print()

一开始我还设置的第二个循环是j<=9,但是根据调试发现它在第二行会去8*9,然后我就思考,如果它要实现三角形的话,那它的第二行的最后一个就必须不打印,然后我就观察我的这两个计数器,我就看出来了。

for和while循环互相嵌套

python 复制代码
for i in range(9, 0, -1):
    j = 1
    while j <= i:
        print(f'{j}*{i}={j * i}', end='\t')
        j += 1
    print()

不得不说,分别写了while和for之后,他们两个结合起来使用可以说是游刃有余了

python 复制代码
i = 9
while i >= 1:
    for j in range(1, i + 1):
        print(f'{j}*{i}={j * i}', end='\t')
    i -= 1
    print()

第四种九九乘法表

for循环嵌套实现

python 复制代码
for i in range(9, 0, -1):
    print((' '*8)*(9-i), end='\t')
    for j in range(1, i+1):
        print(f'{i}*{j}={i*j:2d}', end='\t')
    print()

不得不说,练多了就是有感觉,现在做不出来的话,就是调试的少 了,多debug一下,多看一下运行的过程,就可以更轻松的获得解决思路。

while循环嵌套实现

python 复制代码
i = 9
while i >= 1:
    j = 1
    print((' '*8)*(9-i), end='\t')
    while j <= i:
        print(f'{i}*{j}={i * j}', end='\t')
        j += 1
    i -= 1
    print()

非常轻松的就完成了修改,出现问题,1.计数器忘记控制,使它始终变化 2.意外把计数器自增放到了打印的上方,导致先执行了输出。3.忘记了要实现的九九乘法表是什么样的

for和while循环互相嵌套

python 复制代码
for i in range(9, 0, -1):
    j = 1
    print((' '*8)*(9-i), end='\t')
    while j <= i:
        print(f'{i}*{j}={i*j:2d}', end='\t')
        j += 1
    print()
python 复制代码
i = 9
while i >= 1:
    print((' '*8)*(9-i), end='\t')
    for j in range(1, i+1):
        print(f'{i}*{j}={i*j:2d}', end='\t')
    i -= 1
    print()

总结

循环还有其他的什么函数、类、对象这些,压根就不是听会的,都得自己敲才能体会出来深处的知识,总之,循环以及条件语句,这种需要控制的东西,还是比较需要逻辑比较清晰的。

如有问题,随时评论/私信,感谢。

相关推荐
重生之我在20年代敲代码35 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文37 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
waterHBO2 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七3 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286114 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py4 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy4 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
AIAdvocate5 小时前
Pandas_数据结构详解
数据结构·python·pandas
小言从不摸鱼5 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
C-SDN花园GGbond5 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法