一、问答题
(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
答:第一个代码
不满足if i % 2 == 0:
无限循环 没有结果
第二个
循环9次 结果:2 4 6 8
第三个
if i % 2 = 0:
代码错误
(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的值
第二个
无限循环,没有设置结束条件
第三个
没有输出结果的代码
(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)什么是循环四要素,并举例说明。
答:
1,循环的开始:循环从哪里开始,起点一般我们使用变量来标记的
2,循环的继续条件:反过来说就是结束条件,用于判断循环是否继续执行的;(循环全部执行完毕,中途结束)
3,循环体:需要被重复执行的内容
4,循环的控制变量:用于控制循环的进度
(6)将下面的for循环语句转换成while 循环。
sum = 0
for i in range(1001):
sum = sum + i
#答案:
sum = 0
i = 0
while i < 1001
sum = sum + i
(7)你能将任意while循环转换成for循环吗?将下面这个while循环转换成for 循环。
i = 1
sum = 0
while sum < 10000:
sum = sum + i
i += 1
#答案:
sum = 0
for i in range(1, 10001):
sum += i
if sum >= 10000:
break
(8)统计下面循环中的迭代次数:
count =0
while count <n:
count += 1
for count in range(n):
print(count)
count = 5
while count < n:
count += 1
count = 5
while count < n:
count = count + 3
答:第一个
如果n是正整数,迭代次数为n次。当n小于等于 0 时,迭代次数为 0 次。
第二个
如果n是正整数,迭代次数为n次。当n小于等于 0 时,迭代次数为 0 次。
第三个
如果大于5时,迭代次数为(n - 5)次。当n小于等于 5 时,迭代次数为 0 次。
第四个
设迭代次数为k
如果5+3k大于等于n时,迭代次数为[(n-5)/ 3]次。当n小于等于5 时,迭代次数为 0 次。
(9)显示下面这个程序的输出(提示:绘制一个表格,列出所有的变量来跟踪这个程序)。
for i in range(1,5):
j=0
while j < i:
print(j,end="")
j += 1
i= 0
while i < 5:
for j in range(i,1,-1):
print(j,end ="")
print("☆☆☆☆")
i += 1
i = 5
while i >= 1:
num = 1
for j in range(1,i + 1):
print(num,end="xxx")
num *= 2
print()
i -= 1
i= 1
while i <= 5:
num =1
for j in range(1,i + 1):
print(num,end="G")
num +=2
print()
i += 1
答:第一个
0010120123
第二个
☆☆☆☆
☆☆☆☆
2☆☆☆☆
32☆☆☆☆
432☆☆☆☆第三个
1xxx2xxx4xxx8xxx16xxx
1xxx2xxx4xxx8xxx
1xxx2xxx4xxx
1xxx2xxx
1xxx第四个
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
这个程序是错误的。你能找出原因吗?
答:
当找到一个公约数
k
时,直接将gcd
赋值为k
,没有考虑到后续可能还有更大的公约数。应该在循环结束后,才能确定最大公约数,而不是每次找到一个公约数就赋值。如果
n1
和n2
没有除 1 以外的公约数(即互质),程序没有对这种情况进行处理,最终gcd
的值可能是一个未正确初始化的值。
n1 = int(input("请输入第一个数: "))
n2 = int(input("请输入第二个数: "))
gcd = 1
k = 2
while k <= n1 / 2 and k <= n2 / 2:
if n1 % k == 0 and n2 % k == 0:
gcd = k
k += 1
print(f"{n1} 和 {n2} 的最大公约数是 {gcd}")
(11)关键字 break的作用是什么?关键字continue的作用是什么?下面这个程序会终止吗?如果会,请给出程序运行的结果。
balance = 1000
while True:
if balance < 9:
break
balance = balance - 9
print("Balance is",balance)
balance = 1000
while True:
if balance < 9:
continue
balance = balance - 9
print("Balance is",balance)
答:
break 它可以在循环的执行当中来终止循环,也就意味着循环不一定非要完全执行完毕
continue 跳过当前循环,开启下一次循环
第一个
Balance is 1
第二个
第二个程序不会终止
(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
#答案
i= 0
sum = 0
while i < 4:
if i% 3 == 0:
continue
sum += i
i += 1
(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)
#b
for i in range(1,4):
for j in range(1,4):
if i * j > 2:
continue
print(i * j)
print(i)
答:a
当if i * j > 2时会终止
1 2 1 2 2 3
b
当if i * j > 2时会终止
1 2 1 2 2 3
二、编程题
(14)打印数字 III【录屏讲解】
**视频链接:**https://meeting.tencent.com/crm/KPGL3Wwwe1
题目描述
利用循环,寻找规律,打印如下数字模式:
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
'''
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
i k(7 - i) x 中间数是2 ** (i - 1)
1 6 0
2 5 1 0 1
3 4 2 1 0 1 2
4 3 3 2 1 0 1 2 3
5 2 4 3 2 1 0 1 2 3 4
6 1 5 4 3 2 1 0 1 2 3 4 5
7 0 6 5 4 3 2 1 0 1 2 3 4 5 6
'''
for i in range(1, 8):
#打印左侧空格,调整排版
for k in range(7 - i):
print(" ", end=" ")
#打印数字部分
for x in range(1 - i, i):
distance = abs(x)
num = 2 ** (i - 1 - distance)
print(f'{num:<2}', end=" ")
print()
(15)打印菱形 III【录屏讲解】
**视频链接:**https://meeting.tencent.com/crm/KEVWb10Yb4
题目描述
如下所示,是一个高度为9的菱形
*
***
*****
*******
*********
*******
*****
***
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
示例
输入:
5
输出:
* *** ***** *** *
''' i k(5 - i) j(2i - 1)
* 1 4 1
*** 2 3 1,2,3
***** 3 2 1,2,3,4,5
******* 4 1 1,2,3,4,5,6,7
********* 5 0 1,2,3,4,5,6,7,8,9
******* 4 1 1,2,3,4,5,6,7
***** 3 2 1,2,3,4,5
*** 2 3 1,2,3
* 1 4 1
'''
#输入行数n的值
n = int(input())
#打印星数递增的部分
for i in range(1, n // 2 + 2):
for k in range(n // 2 + 1 - i):
print(" ", end="")
j = 1
while j <= 2 * i - 1 :
print("*", end="")
j += 1
print()
#打印星数递减的部分
for i in range (n // 2, 0, -1):
for k in range(n // 2 + 1 - i):
print(" ", end="")
j = 1
while j <= 2 * i - 1 :
print("*", end="")
j += 1
print()
(16) 最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述
输入两个正整数
输出最小公倍数
示例1
输入:
3 9
输出:
9
示例2
输入:
4 6
输出:
12
#输入两个正整数
a, b = map(int, input().split(" "))
#计算出a, b公倍数可能的范围
c = a * b
#计算出两数的最大值
max_value = max(a,b)
#用循环计算a,b的最小公倍数
for i in range(max_value, c+1):
if i % a == 0 and i % b == 0:
#输出结果
print(i)
#结束循环
break
(17)完全数
题目描述
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
示例1
输入:
6
输出:
Yes
示例2
输入:
9
输出:
No
#输入一个正整数
num = int(input("输入一个正整数:"))
#定义正因子的和
sum = 0
#计算正因子的循环
for i in range(1, num):
if num % i == 0:
sum += i
if num == sum:
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越大时,计算结果越近似于π
#定义公式括号内的值
n = 0
#输入i的值
i = int(input("请输入i的值:"))
for i in range(1, i + 1):
fz = (- 1) ** (i + 1)
fm = 2 * i - 1
n += fz / fm
#计算π的值
π = 4 * n
#输出结果
print(f"请输出π的值:{π}")
(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
#输入i的值
i = int(input("请输入i的值:"))
e = 1
jc = 1
for n in range(1, i + 1):
#计算i的阶乘
jc *= n
#计算e的值
e += 1 / jc
#输出e
print(f'e的近似值为:{e:.2f}')
(20)组合问题 I
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
#定义组合个数
count = 0
#开始循环
for i in range(1, 8):
for j in range(i + 1, 8):
#打印每一种组合
print(f'({i},{j})', end=" ")
#计算组合个数
count += 1
print()
#输出所有组合个数
print(count)
(21)组合问题 II【录屏讲解】
**视频链接:**https://meeting.tencent.com/crm/2kgMWxDP04
题目描述
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
#定义三位数总数
count = 0
#开始循环
for a in range(1, 5):
for b in range(1, 5):
for c in range(1, 5):
if a != b and b != c and a != c:
#计算三位数总数
count += 1
#输出结果
print(f"{a}{b}{c}", end = " ")
print()
print(f'所有个数:{count}')