|Python新手小白低级教程|第十八章:循环(5)for循环(进阶):双重循环(包含输出图形【三角形,矩形】)&for与while复习【包含分解质因数、输出九九乘法表程序】

本文详细讲解了for循环的高级应用,包括双重循环的原理与示例,如何使用for循环输出矩形和三角形,以及for与while的复习,涉及分解质因数和九九乘法表的实现。
摘要由CSDN通过智能技术生成

前言

上节课我们学习了for循环的基础内容。这一讲的内容是学习for循环的高级内容:双重循环和结合高级内容。什么是双重循环?大家快跟我来看看吧!

一、for循环之“双重循环”

这个东东更复杂,我们可以看看我们之前学的一段代码——if双重判断。

while True:
    num = int(input('Enter a number:'))
    if num % 2 == 0:
        print('偶数')
        if num == 0:
            break
    elif num % 2 == 1:
        print('奇数')

这个就是双重判断,前提条件是“满足if第一层,也满足嵌套中的第二层”。今天的for循环有点不太一样,我们先来画个图

1.示例

输出下面的长方形:

**************
**************
**************
**************

这是一个14×4的矩形。我们不能用print一顿死输出,那就要用到循环。
这个循环的类型无疑是for,因为他非常简洁。

for i in range(1,5):
    for j in range(1,15):
        print('*',end = '')
    print()

这是答案,我先扔在这里

2.剖析

这个代码虽然只有4行,但是原理极为复杂。首先,我们看到,for循环的两层循环的执行顺序是从内到外的。我们是先打印长,再打印宽。
for有2个,所以for的后面变量名完全不同,一个是老朋友i,一个是j,这个不是非常复杂。
可是,大家看到了吗?print的中间不仅有*,还有end = ‘ ’。这是什么?
这个end=‘’ 就是换行符(可以这么以为)。没有他,程序就会变成56个*并列而放。更让人懵逼的是,在最大的循环里居然有print()!这是什么东东?
这个print和end的作用相似,是管换行操作以及特殊操作的,原理较为复杂。区区这4行代码就能输出这样神奇的矩形,想必大家也对双重循环有了深刻了解吧!

3.for循环输出三角

三角形,是矩形的一半,可难度却比矩形的难度高了2倍多。这是怎么回事呢?
首先,我们来看看下面这种三角形。

*
**
***
****
*****
******

这就是看似简简单单的“三角形”
来仔细看一下,会发现:这个三角形每行的三角形个数都是不同的。
我们挨个来看一下
第0行(因为range()外层是从0开始算的,而且这次的range括号中只有孤零零一个参数),1个
第1行,2个
第2行,3个
第3行,4个
第4行,5个
第5行,6个
行数是递加的,用range(6)直接解决。但是,内循环的东西就有点烦了:原本的数组是x,y,现在变成了递增。换句话说,随着外循环变量i的增加,内部的数据也在增加。
我们看一下具体的流程:

1 '*' ----> 0 hang range(0)
+1=2 '*' ----> 1 hang range(1)
+1=3 '*' ----> 2 hang range(2)
+1=4 '*' ----> 3 hang range(3)
+1=5 '*' ----> 4 hang range(4)
+1=6 '*' ----> 5 hang range(5)

所以,大家知道内循环怎么写了吗?

for i in range(i + 1)

你学会了吗?完整内容是这样:

for i in range(6):
    for j in range(i + 1):
        print('*',end = '')
    print()

你答对了吗?

这就是双重循环的作用。
当然,while循环也能双重循环。

4.练习

输出如下图形

     *
    ***
   *****
  *******
 *********
***********

你能做出来吗?看到答案后记得吧代码记住!

二、for与while复习

到此,我们的循环已经学完了,不过我们不能独树一帜,而是要将两种循环语句复习,让我们学的知识实用性更高。
下面我们就来看一下这个例子,了解一下结合是怎么一回事。

1.for与while复习(1):分解质因数程序

题目:输入一个数,将这个数分解质因数
先看代码:

n = int(input("请输入一个数:"))
print(n,'=',end="")
i = 2
while i <= n:
    if i == n:
        print(i, end="")
        break
    elif n % i == 0:
        print(i, end="*")
        n = n / i
    else:
        i += 1

首先,要向分解质因数,我们要知道两个概念:质因数和分解质因数
上到小学5年级的同学们都知道,数学中有两个概念,叫做“质数和合数”。质数,是指只有1和本身2个因数的数;合数,是指除了1个它本身还有其他因数的数。这里,我们要分解质因数,就是取到我们输入数的质因数的乘式。

有了知识储备,接下来就是分解。我们在这里可以用while,也可以用for。
这里我们先用while。

n = int(input("请输入一个数:"))
print(n, '=', end=" ")
i = 2

首先,因为2是最小的质数,所以我们把变量质因数设为i,并且先把基础程序输出格式写出来

while i <= n:
    if i == n:
        print(i, end=" ")
        break
    elif n % i == 0:
        print(i, end=" * ")
        n = n / i
    else:
        i += 1

接下来这段代码就有点麻烦了:首先,第一就有点那个啥了:为啥上来就是i==n?此时,大家可以想,i已经达到了经过层层剥削的n的值了,不能再分解了,只能先输出了(如果是个质数,这个乘数直接大结局,按照if里的输出)

下一段,elif又来找事了。n%i==0,证明我们输入的值恰恰是质数i的倍数,此时就达到了我们分解质因数的目的,于是便要输出i*。然后,n缩小,除i得到n的新值。

else里,指的是n即不等于i,有不能被i整除,只能把i扩大。
像这个程序里,我们的n如果不是偶数,那n就要变大,看看n能不能满足是3的倍数。

n = int(input("请输入一个数:"))
print(n, '=', end=" ")
i = 2
while i <= n:
    if i == n:
        print(i, end=" ")
        break
    elif n % i == 0:
        print(i, end=" * ")
        n = n / i
    else:
        i += 1

此时,i变成了3。如果n还不等于3,不能整除3,那还是把3扩大,变成4。
这是有的朋友会问了:4不是合数吗?为什么还能作为质因数了吗?
大家想想,4分解质因数是多少?4 = 2 × 2对吧?大家再想想,2都被除光了,那n哪能除以4哪?所以,这就是分解质因数的巧妙之处。

2.for与while复习(2):输出九九乘法表

for i in range(1, 10):
    for j in range(1, i+1):
        print(f'{j}×{i}={i*j}\t', end='')
    print()

这个就是九九乘法表的代码了。我们来分析一下
首先,还是一个双重循环语句,第一行的i还是老老实实地待在他原有的位置上
那么,内循环的range是什么意思?
1,i+1,意思就是这样:

i=1,line=1,1*1
i=2,line=2,2*1,2*2

也就是说,i决定了行数,j决定了不断增加的乘数
因为j代表行数,所以我们把j放在第一(因为我们把数组range提取字符)。i就是不断增加的那个数(列数)。
这就是九九乘法表的原理。

总结

这节课没有作业哦,因为大招都在下一节课!
是不是非常期待?别慌!波波仔会在下一段时间开一段新的教程——turtle库的教程,大家敬请期待!
最后,制作不易,别忘了一圈三连,点个关注哟!bye——

Test Key

1.1.1

for i in range(6):
    for k in range(5 - i):#注意两旁有空格,用5减去i,让***的位置在中间
        print(" ",end=" ")
    for j in range(2 * i + 1):#每行两边各增加1,加上数组的特殊规定,就是i的2倍数加上1
        print("*", end=" ")
    print()
  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值