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
循环次数 1 2 3 4 i 1 2 3 4 j 0 0 0 0 j < i T F T T F T T T F T T T T F 0 0 1 0 1 2 0 1 2 3 j += 1 1 1 2 1 2 3 1 2 3 4 输出:
0010120123
i= 0
while i < 5:
for j in range(i,1,-1):
print(j,end ="")
print("☆☆☆☆")
i += 1
循环次数 1 2 3 4 5 i 0 1 2 3 4 i < 5 T T T T T j none none 2 3 2 4 3 2 不执行 不执行 2 3 2 4 3 2 ☆☆☆☆ ☆☆☆☆ ☆☆☆☆ ☆☆☆☆ ☆☆☆☆ i += 1 1 2 3 4 5 输出:
☆☆☆☆
☆☆☆☆
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
循环次数 1 2 3 4 5 i 5 4 3 2 1 i >= 1 T T T T T num 1 1 1 1 1 j 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 1 2 4 8 16 1 2 4 8 1 2 4 1 2 1 num *= 2 2 4 8 16 32 2 4 8 16 2 4 8 2 4 2 i -= 1 4 3 2 1 0 输出:
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
循环次数 1 2 3 4 5 i 1 2 3 4 5 i <= 5 T T T T T num = 1 1 1 1 1 1 j 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 1 3 1 3 5 1 3 5 7 1 3 5 7 9 num += 2 3 3 5 3 5 7 3 5 7 9 3 5 7 9 11 i += 1 2 3 4 5 6 输出:
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(1−31+51−71+91−111+...+2i−1(−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)