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

答:第一个代码

不满足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,没有考虑到后续可能还有更大的公约数。应该在循环结束后,才能确定最大公约数,而不是每次找到一个公约数就赋值。

如果 n1n2 没有除 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(131+5171+91111+...+2i1(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}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值