当前位置: 首页 > news >正文

Python 循环全解析:从语法到实战的进阶之路

一、问答题

(1)下面的循环体被重复了多少次?每次循环的输出结果是什么?

i=1
while i < 10:
	if i % 2 == 0:
		print(i)

死循环,没有输出结果

i=1
while i < 10:
	if i % 2 == 0:
        print(i)
		i += l

死循环,没有输出结果

i = 1
while i< 10:
	if i % 2 == 0:
		print(i)
	i+= 1

第1、3、5、7、9次没有输出

第2、4、6、8次分别输出2、4、6、8

(2)指出下面代码的错误:

count = 0
while count < 100:
	print(count)

没有循环更新变量,造成死循环

count = 0
while count < 100:
	print(count)
	count -= 1

虽然有了循环更新变量,但是离终止条件越来越远,仍然是死循环

count = 0
while count < 100:
count += 1

count += 1 在while循环控制语句之外 仍然是死循环

(3)假设输入值为“2 3 4 5 0"(每行一个数)。下面代码的输出结果是什么?

number = eval(input("Enter an integer:"))
max = number
while number!=0:
	number = eval(input("Enter an integer:"))
	if number > max:
		max= number
print("max is",max)
print("number",number)

max is 5

number 0

(4)假设输入是"2 3 4 5 0"(每行一个数)。那么下面代码的输出是什么?

number = 0
sum = 0
for count in range(5):
	number = eval(input("Enter an integer:"))
	sum += number
print("sum is",sum)
print("count is",count)

sum is 14

count is 4

(5)什么是循环四要素,并举例说明。

循环的开始:循环从哪里开始,起点一般我们使用变量来标记的

循环的继续条件:反过来说就是结束条件,用于判断循环是否继续执行的;(循环全部执行完毕,中途结束)

循环体:需要被重复执行的内容

循环的控制变量:用于控制循环的进度

条件满足
条件不满足
控制变量初始化
继续条件 判断控制变量
循环体
结束
更新控制变量

向前走10步

  • 从第1步开始,计数 循环的开始
  • 没到10步继续 循环的继续条件
  • 向前走的1步 循环体
  • 步数计数+1 循环控制变量

向前走直到碰墙为止

  • 距离
  • 距离 > 0
  • 向前走1步 距离递减
  • 距离的数值

(6)将下面的for循环语句转换成while 循环。

sum = 0
for i in range(1001):
	sum = sum + i

sum = 0

i = 0

while i <= 1000:

sum += i

i += 1

(7)你能将任意while循环转换成for循环吗?将下面这个while循环转换成for 循环。

i = 1	
sum = 0
while sum < 10000:
	sum = sum + i
	i += 1

sum = 0

for i in range(0, 10001):

​ sum += i

(8)统计下面循环中的迭代次数:

count =0
while count <n:
	count += 1

n次

for count in range(n):
	print(count)

n次

count = 5
while count < n:
	count += 1

n - 5 次

count = 5
while count < n:
	count = count + 3

n / 3 - 5次

(9)显示下面这个程序的输出(提示:绘制一个表格,列出所有的变量来跟踪这个程序)。

for i in range(1,5):
	j=0
	while j  < i:
		print(j,end="")
		j += 1
循环次数1234
i1234
j0000
j < iT FT T FT T T FT T T T F
print00 10 1 20 1 2 3
j += 111 21 2 31 2 3 4

输出:

0010120123

i= 0
while i < 5:
	for j in range(i,1,-1):
		print(j,end ="")
	print("☆☆☆☆")
	i += 1
循环次数12345
i01234
i < 5TTTTT
jnonenone23 24 3 2
print不执行不执行23 24 3 2
print☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
i += 112345

输出:

☆☆☆☆

☆☆☆☆

2☆☆☆☆

32☆☆☆☆

432☆☆☆☆

i = 5
while i >= 1:
	num = 1
	for j in range(1,i + 1):
		print(num,end="xxx")
		num *= 2
	print()
	i -= 1
循环次数12345
i54321
i >= 1TTTTT
num11111
j1 2 3 4 51 2 3 41 2 31 21
print1 2 4 8 161 2 4 81 2 41 21
num *= 22 4 8 16 322 4 8 162 4 82 42
i -= 143210

输出:

1xxx2xxx4xxx8xxx16xxx

1xxx2xxx4xxx8xxx

1xxx2xxx4xxx

1xxx2xxx

1xxx

i= 1
while i <= 5:
	num =1
	for j in range(1,i + 1):
		print(num,end="G")
		num +=2
	print()
	i += 1
循环次数12345
i12345
i <= 5TTTTT
num = 111111
j11 21 2 31 2 3 41 2 3 4 5
print11 31 3 51 3 5 71 3 5 7 9
num += 233 53 5 73 5 7 93 5 7 9 11
i += 123456

输出:

1G

1G3G

1G3G5G

1G3G5G7G

1G3G5G7G9G

(10)如果你知道一个数n1的公约数不可能大于n1/2,你就可以试图使用下面的循环来改善你的程序:

k= 2
while k <= n1 / 2 and k <= n2 / 2:
	if n1 % k == 0 and n2 % k == 0:
		gcd = k
	k += 1

这个程序是错误的。你能找出原因吗?

这个程序找到的是最小的非1公约数,无法把公约数找全

(11)关键字 break的作用是什么?关键字continue的作用是什么?下面这个程序会终止吗?如果会,请给出程序运行的结果。

break: 是一个控制流语句,其作用是终止当前所在的循环结构(for 循环或者 while 循环),进而直接跳出该循环,不再执行循环里剩余的语句,而是接着执行循环之后的代码。

continue:是 Python 等编程语言里的一个控制流语句,主要用于循环结构(for 循环和 while 循环)中。它的作用是跳过当前循环中剩余的语句,直接进入下一次循环的迭代。

balance = 1000
while True:
	if balance < 9:
		break
	balance = balance - 9
print("Balance is",balance)

这个程序会终止

输出:Balance is 1

balance = 1000
while True:
	if balance < 9:
		continue
	balance = balance - 9
print("Balance is",balance)

不会终止

balance的值会一直停留在10

(12)上边的for循环被转换成下边的while循环。哪里出了错误? 请改正。

for i in range(4):
	if i % 3 == 0:
		continue
	sum += i
    i= 0
    while i < 4:
        if i% 3 == 0:
            continue
        sum += i
        i += 1

while语句中 i = 0 就满足了if条件,所以执行coutinue,但是更新变量在一直没有被执行,因此就是死循环

(13)在下面a的循环里如果break语句执行完后,哪些语句就被终止?显示输出结果。在下面b的循环里如果continue语句执行完后,哪些语句就被终止?显示输出结果。

#a
for i in range(1,4):
	for j in range(1,4):
		if i * j > 2:
			break
		print(i * j)
    print(i)

1 * 3

2 * 2

3 * 1

4 * 1

这四条语句被终止

输出:

1

1

2

1

2

2

#b
for i in range(1,4):
	for j in range(1,4):
		if i * j > 2:
			coutinue
		print(i * j)
    print(i)

1 * 3

2 * 2 2 * 3

3 * 1 3 * 2 3 * 3

4 * 1 4 * 2 4 * 3

这几条语句被终止

1

1

2

1

2

2

二、编程题

(14)打印数字 III【录屏讲解】

**视频链接:**录制: 录制2
录制文件:https://meeting.tencent.com/crm/2Vaj74vQ25

题目描述

利用循环,寻找规律,打印如下数字模式:

                        1
                    1	2	1
                1	2	4	2	1
            1 	2	4	8	4	2	1
        1	2	4	8	16	8	4	2	1
    1	2	4	8	16	32	16	8	4	2	1
1	2	4	8	16	32	64	32	16	8	4	2	1
for i in range(1,8):
    #空格
    for k in range(7 - i):
        print(" ", end = "  ")
          #打印1-7列
    for j in range(0, i):
        print(f'{2 ** j:<3d}', end = "")
          #打印8-13列
    for j in range(i - 2, -1, -1):
         print(f'{2 ** j:<3d}', end = "")
    print()

(15)打印菱形 III【录屏讲解】

**视频链接:**录制: 录制3
录制文件:https://meeting.tencent.com/crm/ld1xDRDYd9

题目描述

如下所示,是一个高度为9的菱形

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

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

 *
***
*****
***
 *
n = int(input())
for i in range(1, n // 2 + 2):
    for k in range(n // 2 + 1- i):
        print(" ",end = "")
    for j in range(0, 2 * i - 1):
        print("*",end = "")
    print()
for i in range(n // 2 + 2, n + 1):
    for k in range(i - n // 2 - 1):
        print(" ",end = "")
    for j in range((n - i) * 2 + 1, 0, -1):
        print("*", end = "")
    print()

(16) 最小公倍数

题目描述

输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

x, y = map(int, input().split(" "))
MAX = max(x, y)
MIN = min(x, y)
#最小公倍数一定大于大的那个数
i = MAX
#不确定终止条件用while True
while True:
    if i % MAX == 0 and i % MIN == 0:
        print(i)
        break
    i += 1

(17)完全数

题目描述

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数

例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

#完全数
num = int(input())
#用于判断累加后的结果是否等于num
the_sum = 0
#求出所有因子的和
for i in range(1, num):
    if num % i == 0:
        the_sum += i
#判断是否是完全数
if the_sum == num:
    print("Yes")
else:
    print("No")

(18)计算π

题目描述

你可以使用下面的数列近似计算π
π = 4 ( 1 − 1 3 + 1 5 − 1 7 + 1 9 − 1 11 + . . . + ( − 1 ) i + 1 2 i − 1 ) π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1}) π=4(131+5171+91111+...+2i1(1)i+1)
当i越大时,计算结果越近似于π

#计算Π
#输入i的值
i = int(input())
#分子为1
fenzi = 1

the_sum = 0
for j  in range(1, i + 1):
    #分母
    fenmu = 2 * j - 1
    #求出每次循环i对应的值
    num = fenzi / fenmu
    #累加结果
    the_sum += num
    #更新分子
    fenzi = fenzi * -1
#计算出来的Π
pi = 4 * the_sum
print(pi)

(19)计算e

题目描述

你可以使用下面的数列近似计算e
e = 1 + 1 1 ! + 1 2 ! + 1 3 ! + 1 4 ! + . . . + 1 i ! e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!} e=1+1!1+2!1+3!1+4!1+...+i!1
当i越大时,计算结果越近似于e

#计算e
i = int(input())
#分子
fenzi = 1
#累加
the_sum = 0
for j in range(1, i + 1):
    #计算分母
    fenmu = 1
    for k in range(1, j + 1):
        fenmu *= k
    num = fenzi / fenmu
    the_sum += num
#最终e的值
e = 1 + the_sum
print(e)

(20)组合问题 I

题目描述

在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数

注:组合(a,b)与组合(b,a)算同一种组合,只记录一次

"""
11 12 13 14 15 16 17
22 23 24 25 26 27 
33 34 35 36 37
44 45 46 47
55 56 57
66 67
77
"""
#组合问题1
for i in range(1, 8):
    for j in range(i, 8):
        print(f'{i,j}', end = " ")
    print()

(21)组合问题 II【录屏讲解】

**视频链接:**录制: 录制4
录制文件:https://meeting.tencent.com/crm/N1AvGeYMd8

题目描述

有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

"""
123 124 132 134 142 143 
213 214 231 234 241 243 
312 314 321 324 341 342
412 413 421 423 431 432
24
"""
#组合问题2
#计数
count = 0
#控制百位数字
for i in range(1, 5):
    #控制十位数字
    for j in range(1,5):
        #控制个位数字
        for k in range(1, 5):
            #一旦出现相等数字就跳出本次循环执行下一次
            if i == j or i == k or j == k:
                continue
            count += 1
            baiwei = i * 100
            shiwei = j * 10
            print(baiwei + shiwei + k, end = " ")
    print()
print(count)
http://www.dtcms.com/a/99424.html

相关文章:

  • 人工智能之数学基础:矩阵的相似变换的本质是什么?
  • DeepSeek网络拓扑设计解密:如何支撑千卡级AI训练的高效通信?
  • 缓存 vs 分布式锁:高并发场景下的并发控制之道
  • 【C++】类和对象(二)默认成员函数之拷贝构造函数、运算符重载、赋值运算符重载
  • <tauri><rust><GUI>基于rust和tauri,实现一个大寰电爪PGHL(串口设备)定制化控制程序
  • java pom文件加入这个可以将打包好的jar 双击运行
  • 积分赛——光敏控制多功系统设计
  • 区块链赋能,为木材货场 “智” 造未来
  • vue在线录音系统
  • Redis延时队列在订单超时未报到场景的应用补充说明
  • 利用 VSCode 配置提升 vibe coding 开发效率
  • 找python大数据就业,我应该学习Java哪些知识
  • dav_pg8_vacuum
  • c#的.Net Framework 的console 项目找不到System.Window.Forms 引用
  • VMware中新建Ubuntu虚拟机系统,并安装Anaconda
  • 1--当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南(知识点讲解版)
  • Android Architecture Components 深入解析
  • 【力扣刷题|第十七天】0-1 背包 完全背包
  • Linux进程管理的相关知识点以及我的相关笔记链接
  • 算法为舟 思想为楫:AI时代,创作何为?
  • Redis的ZSet有序集合
  • 深度剖析:U盘突然无法访问的数据拯救之道
  • 27. 移除元素【数组专题】Java\Python\JS\Go\C++
  • IP综合实验
  • 曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合
  • Docker, Docker 镜像是什么,怎么创建, Docker有什么用
  • 微服务架构中的精妙设计:SpringCloud的概述
  • Dust3r、Mast3r、Fast3r
  • 信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport
  • VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶三