第10课循环结构-while循环
一、选择题
1.某Python程序代码如下:
s='t1Hr2a3'
s1='' ; s2=''; i = 0
while i < len(s):
if '0'<=s[i]<='9':
s1 = s1 + s[i]
elif 'a'<=s[i]<='z':
s2 = s[i] + s2
i = i + 1
ans = s2 + s1
print(ans)
程序执行后,输出的结果是( )
A.12art3 B.art123 C.rta123 D.art321
2.如下Python程序段
x = 0
while x < 50:
x = (x + 2) * (x + 3)
运行后,x的值为( )
A.0 B.72 C.50 D.168
3.在一次比赛中,需要随机给10名选手各编一个0~9范围内的唯一序号,对应的Python程序段如下:
_________________
a,b=[0]*10,[False]*10
i=0
while i<=9:
_________________
if not b[r]:
a[i]=r
___________
i=i+1
print(a)
则划线处的代码依次是( )
① r=random.randint(0,10) ② b[r]=True ③import random
④ b[i]=True ⑤from random import randint ⑥ r=random.randint(0,9)
A.⑤①② B.⑤⑥④ C.③①④ D.③⑥②
4.执行下列Python程序段后,变量n的值是( )
n=0
for i in range(1,4):
n+=i
A.4 B.3 C.6 D.1
二、填空题
5.Python语言用于实现循环结构的语句有______语句和while语句。
三、简答题
6.列举Python程序设计语言中,for循环和while循环的基本的格式。
四、操作题
7.编写Python程序,实现以下功能:输入两个正整数a,b,输出他们的最小公倍数。求最小公倍数的做法为:先算出数a和数b的最大公约数k,那么最小公倍数就为数a乘数b再除以数k。而求最大公约数的方法一般为辗转相除法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是e为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。示例:123456和7890的最大公因数是6,这可由下列步骤(其中,“a % b”是指取a÷b的余数)看出:
a b a % b
123456 7890 5106
7890 5106 2784
5106 2784 2322
2784 2322 462
2322 462 12
462 12 6
12 6 0
程序如下:
a = int(input("输入第一个数:")) b= int(input("输入第二个数:")) c= ① while ② : print("它们的最小公倍数是:",c//a)
(1)在划线处填入合适的代码_____、_____
(2)如果输入的数分别为:27和15,则加框处语句共执行了______次。
8.现今信息化时代,信息的传输十分迅速,足不出户便知天下事。许多社交平台都有设置本平台的热点排行榜,方便用户了解正在发生的热门事件。但社交平台数量众多,平台用户种类和数量也大不相同,导致不同平台热点的实际热度大小也不同。小钟为了确保自己知道的热点是真正的热点,于是打算用功能强大的python把各个平台的热点排行榜进行合并,形成自己的热点排行榜。
为了热点之间比较方便,小钟设置了一个热度值来衡量一个热点的热度大小,热度值越大说明这个热点的热度越高。现在小钟已经获得了如下两个平台的热度值从小到大的排行榜,正当他打算将之合并为一个从小到大的排行榜时,却被老师叫走了。于是他决定把这个小功能交给他的好朋友——你来实现,你想到2种算法,请把下列程序填写完整。
A P10 P9 P8 P7 P6 P5 P4 P3 P2 P1
11 66 116 329 438 582 652 714 756 925
B E10 E9 E8 E7 E6 E5 E4 E3 E2 E1
35 116 215 271 309 428 576 772 806 950
Python程序如下:
A= [11,66,116,329,438,582,652,714,756,925]
B = [35,116,215,271, (5)__,428,576,772,806,950]
算法一:
myRank =
i = 0
j = 0
while (i < len(A) and j < len(B)):
if (A[i] < B[j]):
(6)______
i += 1
else:
myRank.append(B[j])
j += 1
while (i < len(A)):
myRank.append(A[i])
i += 1
else:
while ((7)______):
myRank.append(B[j])
j += 1
print(myRank)
算法二:
myRank = [0]*(len(A)+len(B))
i = 0
j = 0
k = 0
while ((8)_____):
k = i+j
if (i >= len(A)):
myRank[k] = B[j]
j += 1
elif (j >= len(B)):
myRank[k] = A[i]
i += 1
elif ((9)_____):
myRank[k] = A[i]
i += 1
else:
myRank[k] = B[j]
j += 1
print(myRank)
9.阅读程序。观察使用随机数求解百钱白鸡问题的代码并回答问题。
百千白鸡问题是经典的数学问题,原题为“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?”翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
import random
while True:
x=random.randrange(0,20)
y=random.randrange(0,33)
z=random.randrange(0,100)
if 5*x+3*y+z/3==100 and x+y+z==100:
print('公鸡',x)
print('母鸡',y)
print('小鸡',z)
(1)Python中导入库文件的命令是________。
(2)random.randrange(0,20)生成的随机数的范围是_________ 。
(3)如果不想写类似random.randrange(0,20)这么长的句子,可以修改程序中的第一行为
________
(4)while True 的作用是______ 。
(5)如果while True造成程序无法停止,我们可以在程序中添加一行 _________。
10.阅读程序。分析以下两段Python程序并回答问题。
#程序1
i=1
while i<101:
print('把这句话打印100遍')
i+=1
#程序2
i=100
while i:
print('把这句话打印100遍')
i=i-2
(1)在程序1中,i+=1这句话的含义是______________。
(2)在程序1中,‘把这句话打印100遍 ’实际输出了_____遍。
(3)在程序2中,i的初值是___。
(4)在程序2中,‘把这句话打印100遍 ’实际输出了_____遍。
(5)在程序2中,while i 的含义是_________。
11.若两个素数之差为2,则该对素数称为双胞胎数,如3,5就是一对双胞胎数。编写python程序,实现如下功能:输入n的值,统计显示n以内的所有双胞胎数。程序运行界面如图所示:
实现上述功能的程序如下,请在划线处填入合适的代码。
def isprime(x):
for i in range(2,x):
if①__________:
return False
return True
n=int(input(“请输入一个正整数n:”))
c=0
k=3
while k<=n-2:
if isprime(k) and②___________:
print(k,k+2)
③___________
k=k+1
print(“共有”+str(c)+“对双胞胎数”)
12.若两个素数之差为 2,则该对素数称为双胞胎数,如 3,5 就是一对双胞胎数。编写 python 程序,实现如下功能:输入 n 的值,统计显示 n 以内的所有双胞胎数。程序运行界面如图所示:
实现上述功能的程序如下,请在划线处填入合适的代码。
import math
def isprime(x):
______
for i in range(2,int(math.sqrt(x))+1):
if x % i = = 0 :
f=False
return f
n=int(input("请输入一个正整数 n:"))
c=0
k=3
while k < = n-2:
if isprime( k ) and______________ :
c + = 1
print("第"+ str( c ) +"对双胞胎数:", k ,'和',k+2)
_______
print("共有"+str(c)+"对双胞胎数")
划线处①处应该填入的语句为: ;
划线处②处应该填入的语句为: ;
划线处③处应该填入的语句为: 。
13.某字符转置算法描述如下:
将字符串(均为大写字符)s依次转换为相对应的数值(字符A~Z对应数值1~26);
·转换后的数值以K个数据为一段,将n个待处理的数据依次分割成若干段(最后一段不足部分用0来补充);
每一段中K个数据与K*K转置矩阵进行乘法运算;
将乘法运算得到的每一个结果值除以26求余数,依次转换成相应字符(数值1~26对应字符A~Z),最后按原始字符串长度输出。
乘法运算规则如下:
第i个元素c(i)=第j个元素a(j)*转置矩阵第j行第i个元素b(t)的乘积之和(其中j=1,2…K)
例如:字符串s=PYTHON,区块大小K=4,的转置过程如下:
(1)根据算法描述,上述示例中,字符“N”的相乘结果(即图中(★)处)为________。
(2)请在划线处填入合适代码。
Private Sub Commandl_Click()
Dim a(1 To 100)As Integer 存储字符串,长度不超过100个字符
Dim b(1 To 100)As Integer 存储转置矩阵,长度不超过 10*10
Dim c(1 To 100)As Long
Dim s As String, tmp As String
Dim k As Integer, t As Integer, i As Integer, j As Integer
Dim n As Integer, m As Integer, lens As Integer
s=Textl. Text 在 Textl 中输入原始字符串
k=Val(Text 2.Text) 在 Text 2 中输入区块大小K
Randomize
For i=1 To k^2
b(i)=Int(Rnd*9)+1
tmp=tmp十Str(b(i))
If i Mod k=0 Then
List 2. AddItem tmp
tmp="" .
End If
Next i
lens=Len(s):n=lens
For i=1 To n
tmp=Mid(s,i,1)
①__________
Listl. AddItem Str(a(i))
Next i
Do While n Mod k<>0
n=n十1
a(n)=0
Listl. AddItem Str(a(n))
Loop
For i=1 To n
m=(i―1)Mod k+1
t=1
Forj= ②__________
c(i)=a(j) * b((m-1) * k+t)+c(i)
t=t+1
Next j
Next i
For i=1 To n
List 3. AddItem Str(c(i))
Next i
s=″″
For i=1 To lens
③__________
s=s+Chr(t+64)}
Next i
Text 3.Text=s 在Text 3 中输出转置后的字符串
End Sub
参考答案
1.B
【详解】
本题主要考查Python程序的执行。分析程序可知,变量s1取出字符串s中的数字,依次放到s1中,s1='123';变量s2取出字符串s中的小写字母,倒序放到s2中,s2='art',ans=s2+s1='art123',故程序执行后,输出的结果是art123,故本题选B选项。
2.B
【详解】
本题主要考查Python程序的执行。第一遍循环,x = (0 + 2) * (0 + 3)=6;第二遍循环x = (6 + 2) * (6 + 3)=72,不满足x<50,退出循环,故运行后,x的值为72,故本题选B选项。
3.B
【详解】
本题主要考查Python程序的综合应用。使用随机函数需要首先导入随机函数库,故第一空填from random import randint。random()方法返回随机生成的一个实数,它在[0,1)范围内。random.randint(a,b)用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b,需要随机给10名选手各编一个0~9范围内的唯一序号,故第二空填 r=random.randint(0,9),此处确保生成唯一序号,将其标记为True,故第三空填b[i]=True,故本题选B选项。
4.C
【详解】
本题主要考查Python循环结构。变量i的范围1~3,循环体是n=n+i,故程序执行后,n=n+i=0+1+2+3=6,故本题选C选项。
5.for
【详解】
本题主要考查Python循环结构。Python语言用于实现循环结构的语句有for语句和while语句。
6.for 循环结构的基本格式:
for 循环变量 in 列表:
语句或语句组
While循环格式:
While(表达式):
语句或者语句组
【详解】
本题考查循环结构的基本格式
7.a*b b !=0 3
【详解】
本题主要考查Python程序的综合应用。①求最小公倍数的做法为:先算出数a和数b的最大公约数k,那么最小公倍数就为数a乘数b再除以数k,此处先将a*b赋给变量c保存,故填a*b。②通过while循环求a和b的最大公约数,条件是除数b不为0,故填b !=0。③第一遍循环r=27%15=12;第二遍循环,15%12=3;第三遍12%3=0,循环结束,故加框处语句共执行了3次。
8.309 myRank.append(A[i]) j < len(B) k【详解】
本题主要考查python编程。根据表格所示,列表B中第5个元素为309,因此①处为309;A[i] < B[j]时,将列表末尾添加A[i],因此②处为myRank.append(A[i]);当列表未结束时,列表末尾添加相应元素,因此③处为j < len(B);算法二中引入变量k,用以记录i与j的和,当k小于len(A)+len(B)-1说明两列表未结束,因此④处为k【点睛】
9.import 0~19(包括0和19) import random as r 让程序无限循环 break;
【详解】
本题主要考查Python程序的执行与调试。①Python中导入库文件的命令是import,如import random。②random.randrange(0,20)生成的随机数的范围是0~19(包括0和19)。③如果不想写类似random.randrange(0,20)这么长的句子,可以修改程序中的第一行为import random as r(给random取个简单的别名)。④while True 的作用是让程序无限循环。⑤如果while True造成程序无法停止,我们可以在程序中添加一行break;(满足条件后,执行break;可以跳出循环)。
10.i=i+1 无数遍 100 无数遍 i!=0 或 i>0 或其他等价答案
【详解】
本题主要考查Python程序的执行与调试。①在程序1中,i+=1这句话的含义是i=i+1(即i递增1)。②i的初值为1,while循环条件i<101为真,会一直执行循环体,无法跳出循环体执行i+=1,故‘把这句话打印100遍 ’实际输出了无数遍。③在程序2中,i的初值是100。④i=100,while i(即while 100)一直为真,会一直执行循环体,无法跳出循环体执行i=i-2,故‘把这句话打印100遍 ’实际输出了无数遍。⑤在程序2中,while i 的含义是i!=0 或 i>0 或其他等价答案
11.x%i==0或x//i==x/i或其他等价表达式 isprime(k+2)或isprime(k+2)==True c=c+1或c+=1
【详解】
本题主要考查Python程序的执行与调试。①isprime(x)函数判断x是不是素数,此处通过for循环判断(用x依次除i,看能不能整除,i的范围时从2~x),故填x%i==0或x//i==x/i。②此处判断相差2的两个数是不是素数,若是,则输出这两个数,故此处填isprime(k+2)或isprime(k+2)==True。③c用来统计双胞胎数的对数,若满足是双胞胎数的条件,故此处填c=c+1或c+=1。
12.f = True isprime(k+2) k=k+1 或 k+=1 或 k=k+2 或 k+=2
【详解】
本题主要考查Python程序的执行与调试。①isprime(x)用来判断x是不是素数,通过用x整除2~int(math.sqrt(x)),如果余数为0则表明该数不是素数,赋值f为假退出循环,f的初值为True,故第一空填f = True。②若两个素数之差为 2,则该对素数称为双胞胎数,此处判断相差为2的两个数是不是素数,故第二空填isprime(k+2)。③素数都是奇数,此处需要更新k的值继续循环判断,可以将k的值递增1或递增2,故填k=k+1 或 k+=1 或 k=k+2 或 k+=2。
13.89 ①a(i)=Asc(tmp)-64或a(i)=Asc(tmp)-Asc("A")+1 ②i–m+1To i–m+k ③t=(c(i)–1) Mod 26+1
【详解】
本题考查乘法运算规则的理解以及转置矩阵中行列数据的读取。(1)根据算法描述,图中(1)处的值为15×5+14×1+0×2+0×9=89。(2)程序先随机生成数组b,其下标为1到k×k,并以行列的形式显示在列表框list2中(即为转置矩阵),然后读取大写字符串s中的每个字符,并将每个字符转换成相应字母表中的位置存储在数组a中。代码①处为字符转成相应的字母表中位置值,下方代码将a(i)输出在列表框listl中,故此处应获取a(i)的值。根据题干描述“字符A~Z对应数值1~26”,此处为将tmp获取的字符通过Asc函数进行转换,语句为“a(i)=Asc(tmp)-64”,还可以是“a(i)=Asc(tmp)-Asc(″A″)+1”。代码②处为循环变量j的取值范围,根据乘法规则,变量j的范围是每一段中的1到k之间的值,需要获取每一段的起始位置下标,结合上文得到的m值,可得循环变量的范围是“i-m+1 To i-m十k”。代码③处是将计算结果c(i)按原长度转换成相应大写字符,计算结果要求除以26取余,若直接写成c(i)Mod 26,则导致数值26的结果为0,因此需要先减1,Mod后再加1这样的处理技巧,因此答案为“(c(i)-1)Mod 26+1”。