内容正文:
第三章 算法的程序实现
一、选择题
1.某同学通过编写Python程序计算100!,则该同学( )
A.只能通过for循环实现该计算
B.只能通过while循环实现该计算
C.可以通过for循环或while循环实现该计算
D.不需要使用到for循环或while循环实现该计算
2.下列语句中,输出结果为13的是( )
A.print("1"+"3") B.print(1+3) C.print("1","3") D.print("1"in"13")
3.在Python中表示 “x属于区间[a, b)”的正确表达式是( )
A.a<=x and x<b B.a<=x or x<b C.ax and x<b D.a<=x<b
4.在Python语言中,int (6.9) 的返回值是下列哪一项。( )
A.6.9 B.6 C.7 D.9
5.在python中,以下哪个选项a 的数据类型为整型( )
A.a=5 B.a=input() C.a='5' D.a=5.0
6.小明用Python语言编写好“找出三个数中最大的数”的程序后,在调试运行的过程中,程序没有报错且能顺利运行,但得出的结果与预期不符,造成这个结果的原因是( )
A.使用了不合法的变量名 B.使用了中文状态下的“:”
C.逻辑上存在指误 D.语法上存在错误
7.有如下 python程序段:
s1="4+6+12+16"
sum=0
for i in range(len(s1)):
if s1[i]=="+":
sum+=t
else:
t=int(s1[i])
程序运行后sum的( )
A.8 B.38 C.22 D.12
8.有以下程序段:
a=1
b=2
if b>=2:
a=a+b
b=b+a
print(a,b)
程序运行后,其输出结果为( )
A.1 5 B.3 5 C.1 3 D.2 5
9.有如下Python程序段:
import random
s=''
for i in range(1,4):
k=random.randint(1,4)
ch=chr(65+k)
s+=ch
print(s)
执行该程序段后,输出的结果可能是( )
A.BCCD B.EEE C.BEF D.ECBF
10.将高级语言源程序翻译成目标程序,完成这种翻译过程的程序是( )
A.编译程序 B.编辑程序 C.解释程序 D.汇编程序
11.用计算机解决问题时,一般先确定“要做什么”,再确定“如何去做”以及计算机“怎么做”。对于利用计算机解决问题的4个步骤,“如何去做”就是( )
A.分析问题 B.设计算法 C.编写程序 D.调试运行
12.执行下列语句后的显示结果是( )
>>>bin(65)
A.0x1000001 B.0b1000001 C.0o1000011 D.0x1000011
13.有下列Python程序段:
import random
s=input("请输入字符串:")
x=random.randint(3,6)
n=len(s)
if len(s[0:x])<len(s[x:n]):
r=s[x:n]+s[0:x]
else:
r=s[0:x]+s[x:n]
print(r)
执行该程序段,若输入“helloworld”(不包含双引号),则输出的结果不可能的是( )
A.loworldhel B.oworldhell C.helloworld D.worldhello
14.下面Python程序代码
a=10
b=20
a,b = b,a
print(a,b)
执行后的值正确的是( )
A.20,10 B.10,10 C.20,20 D.10,20
15. BF语言是一种基于一种简单的计算模型的最小化编程语言,这个机器包括八种指令,一个以字节(0-255)为单位、初始全部为零的数组,一个初始时指向该数组中第一个字节的指针,以及用于输入输出的两个字节流。八种指令用字符表示如图所示:
字符
含义
>
指针加一
<
指针减一
+
指针所指字节的值加一
-
指针所指字节的值减一
.
输出指针所指字节内容(ASCII 码)
,
向指针所指的字节输入内容(ASCII 码)
[
若指针所指字节的值为零,则向后跳转,跳转到其对应的]的下一个指令处
]
若指针所指字节的值不为零,则向前跳转,跳转到其对应的[的下一个指令处
以下代码可实现将字符串转换成 BF 语言
def Conv(v):
s=10*'+'+'['t=""
for i in range(len(v)):
ordI=ord(v[i])
cdcI=ordI
temp=cdcI % 10
if temp > 5:
cdcI-=temp
maxI=256-ordI
s+='>'+('-'*maxI if( ) else '+'*(cdcI//10))
t+='>'+('+'if(ordI-cdcI>0) else '-')*abs(ordI-cdcI)
s += '<' * len(v) + '-]' + t + (len(v)-1) * '<' + '[.>]'
return s
则横线处应该填入( )
A.cdcI -= 10 maxI<128 B.cdcI += 10 maxI>128 C.cdcI -= 10 maxI>128 D.cdcI += 10 maxI<128
二、填空题
16.在Python中,用于实现循环结构的关键字有for和 。
17.在Python语言中常用的逻辑运算符有“and”、“or”、“not”,执行not 1 and 1的结果是 。(提示输入字母时只能输入小写字母)
18.有如下 Python 程序段:
li=[["a",10],["b",20],["c",30]]
dic={}
for i in range(len(li)):
dic[li[i][0]]=li[i][1]
print(dic)
运行该段程序后,输出内容为
19.有以下程序段:
sum=0
for i in range(1,10):
if i%2==0:
sum=sum+i
print(sum)
程序运行后,其输出结果为( )。
20. 模块用于科学计算(随机数、数组运算等); 模块基于numpy实现,主要用于数据的处理和分析; 用于绘图库。
三、判断题
21.在Python语言中,对于不能确定循环次数的情况,需要使用“while”语句。( )
22.在 Python语言环境下,For循环语句中的循环体在书写时需要缩进,且必须缩进四个空格。 ( )
23.下列程序段中,赋值语句s=s+i被重复执行了4次。
s=0
For i in range(3,10,2):
s=s+i ( )
24.在Python语言中,数据的输出是通过output()函数实现的。( )
四、操作题
25.小林在玩一种纸牌游戏——纸牌钓鱼。他对牌做了如下处理:
1)取两副纸牌去除大小王,共104张,其中▲表示黑桃,○表示红心,★表示梅花,◇表示方块,将牌按顺序叠好,成为原始牌叠;
2)对原始牌叠洗牌:进行104次洗牌,每次将面上的第一张牌随机插在牌叠中,成为洗牌牌叠;
3)摸牌:从洗牌牌叠中从上向下连续摸牌,使得摸到的牌里没有重复的牌(同花色、同点数视为重复的牌),这样连接的牌数量最多时即为最长无重复牌叠。
现设计Python程序模拟这个游戏:先显示原始牌叠,洗牌后再显示洗牌牌叠,摸牌后显示最长无重复牌叠张数、起点及终点,并显示最长无重复牌叠的信息。运行结果如图所示。
实现上述功能的 Python 程序如下,请在划线处填入合适的代码。
from random import randint
def dayin(head, tail): # 打印牌叠
pt=head; k=0
while ① :
print(str(pai[pt][0]) + '-' + str(pai[pt][1]), end='||')
pt = pai[pt][1]; k = k + 1
if k == 13: print(); k = 0
print('
', '*' * 105)
dic = {0: '▲', 1: '○', 2: '★', 3: '◇', 4: 'A', 5: '2', 6: '3', 7: '4', 8: '5',
9: '6', 10: '7', 11: '8', 12: '9',13: '10', 14: 'J', 15: 'Q', 16: 'K'}
pai = [];head = -1;k = 0
while k < 104:
pai.append([② ,head])
head = len(pai)-1;k = k + 1
print('原始的牌叠')
dayin(head,-1) # 打印原始牌叠
k=0
while k<=103:
x=randint(0,103)
i=0;pt=head
while i<x:
pt=pai[pt][1]
i+=1
if pt != head:
nhead = pai[head][1]
③
pai[pt][1] = head
head = nhead
k += 1
print('洗牌后的牌叠')
dayin(head, -1) # 打印洗牌牌堆
f={}
for i in range(4):
for j in range(4,17):
f[dic[i] + dic[j]] = False
L=ans=0;i=j =head
while j != -1:
m = pai[j][0]
if not f[m]:
f[m] = True;L = L + 1
if L > ans: ans = L; pt = j; qt = i
j = pai[j][1]
else:
while ④ :
f[pai[i][0]] = False
L = L - 1
i = pai[i][1]
print('最长无重复牌叠%d 张' % ans, '起点', qt, '终点', pt)
dayin(qt,pt)
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.C
【详解】本题考查Python程序设计相关内容。编写Python程序计算100!,可以使用循环实现。常用的循环结构有for循环、while循环,两者都可以满足题目要求。故本题答案是C选项。
2.A
【详解】本题考查Python基础。
选项B输出内容为4,选项C输出内容为1 3,选项D输出内容为True。故正确答案为:选项A。
3.A
【详解】本题考查Python运算符与表达式相关内容。[a,b)表示大于等于a且小于b,用Python关系及逻辑运算符描述为:a<=x and x<b。故本题答案是A选项。
4.B
【详解】本题主要考查Python函数的应用。 int() 函数用于将一个字符串或数字转换为整型。int (6.9) 的返回值是6,故本题选B选项。
5.A
【详解】本题考查Python数据类型。Python数据类型有字符串,布尔类型,整数,浮点数等。a=5,a为整数型;a=‘5’,则a为字符串;a=5.0,则a为浮点数。故本题选A。
6.C
【详解】本题主要考查Python程序的调试。程序没有报错,则原因不会是:使用了不合法的变量名、使用了中文状态下的“:”或语法上存在错误。可能的原因是逻辑上存在指误,故本题选C选项。
7.D
【详解】本题考查Python程序。程序首先定义了字符串s1和初始值为0的sum。然后通过循环遍历字符串s1的每个字符。当遇到“+”时,就将当前的t值累加到sum中,否则就将字符转换为整数赋值给t。第一次循环时t为4,遇到“+”后sum为4;第二次循环t为6,遇到“+”后sum为10;第三次循环t为2,遇到“+”后sum为12,因此最终的sum为12,故答案为:D。
8.B
【详解】本题主要考查Python程序的执行。a=1,b=2,满足b>=2,执行a=a+b=3,b=b+a=2+3=5,输出结果是3和5,故本题选B选项。
9.B
【详解】本题考查的是Python循环语句及随机函数。由range(1,4)可知,s中只有三个字符,选项AD错误;random.randint(1,4)生成1到4的随机整数,结合ch=chr(65+k),可知ch字母可能为BCDE中的一个,选项C中含有F不可能,故选B。
10.A
【详解】本题考查的是程序语言相关知识。用常见的程序设计语言编写出的源程序,需要经过编译器将其翻译成目标程序即机器语言才能被计算机处理和执行,编译器即编译程序,故选A。
11.B
【详解】本题考查计算机解决问题相关内容。用计算机解决问题的四大步骤是:(1)分析问题,用电脑来解决问题时,首先要对问题进行定性、定量的分析,然后才能设计算法。(2)设计算法,算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。(3)编写程序,设计完算法后,就要使用某种程序设计语言编写程序代码,并最终得到相应结果。(4)调试运行程序,对程序进行调试,以便发现错误并进行修正。“如何去做”是属于用计算机解决问题的“设计算法”步骤。故本题答案是B选项。
12.B
【详解】本题考查的是Python函数。bin()函数是转换为二进制数。65转换为二进制数为:1000001;0x表示十六进制数,0o表示八进制,0b表示二进制数。故本题应选B。
13.D
【详解】本题考查的是python程序的运行。由运行结果可以看出选项D符合题意。
random.randint(参数1,参数2),参数1、参数2必须是整数,函数返回参数1和参数2之间的任意整数。列表中的冒号和相关参数list[start:end:step],start是起始位置,end是结束位置,step是步长。当x=3时,输出的是loworldhel,当x=4时,输出的是oworldhell,当x=5时,输出的是helloworld。
14.A
【详解】本题考查的是Python顺序结构。语句a,b = b,a表示交换变量a,b里的值,故执行后的值正确的是20,10选项A正确。
15.D
【详解】本题考查程序设计语言。对于第一个空,当temp>5时,需要对cdcI进行调整。如果直接减去temp可能会导致值变得过小,所以先让cdcI加上10,这是一种平衡和修正的操作,为后续根据具体情况进一步调整做准备。对于第二个空,当maxI<128时,结合cdcI+=10,可以确定一种特定的指令添加模式。如果是maxI>128,就不能准确地对应到代码中需要根据条件来生成相应指令的情况。故答案为:D。
16.while
【详解】本题考查Python基础。
在Python中,用于实现循环结构的关键字有for和while。for循环通常用于遍历任何序列(如列表、元组或字符串)或其他可迭代对象,而while循环则会在给定条件为真时重复执行一段代码块。故正确答案为:while。
17.False
【详解】本题主要考查Python表达式的运算。逻辑运算符or两边值均为假时值才为假,否则值为真;逻辑运算符and两边值均为真时值才为真,否则值为假,not是取反。优先级是not>and>or,故执行not 1 and 1的结果是False。
18. {'a': 10, 'b': 20, 'c': 30}
【详解】本题考查的是字典及循环语句。由dic[li[i][0]]=li[i][1]可知,程序的功能是将嵌套列表中,列表的第一个元素作为字典的键,第二个元素作为字典的值,li=[["a",10],["b",20],["c",30]],运行该段程序后,输出内容为: {'a': 10, 'b': 20, 'c': 30}。
19.20
【详解】本题考查的是Python循环语句。sum=0,变量i的范围是1~9,如果是偶数,则执行sum=sum+i,故程序执行完,sum=sum+i=0+2+4+6+8=20。
20. numpy pandas matpoltlib
【详解】本题考查的是Python库相关知识。numpy模块用于科学计算(随机数、数组运算等);pandas模块基于numpy实现,主要用于数据的处理和分析;matpoltlib用于绘图库。
21.正确
【详解】本题考查Python循环语句。在Python语言中,对于不能确定循环次数的情况,需要使用“while”语句,“for”语句用于确定循环次数的情况。表述正确。
22.错误
【详解】本题考查的是Python中的for语句格式。在 Python语言环境下,For循环语句中的循环体在书写时需要缩进,但不是必须缩进四个空格。故题干中的说法错误。
23.正确
【详解】本题考查的是Python的range函数。range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。range(3,10,2)生成的列表为[3,5,7,9],故题干中的说法正确。
24.错误
【详解】本题考查的知识点是Python语言中的输出语句。在Python语言中,实现数据的输出是使用print函数,故答案为错误。
25. pt!=tail dic[k%4]+dic[k%13+4] pai[head][1]=pai[pt][1] f[pai[j][0]]
【详解】本题考查Python综合应用。
①:在程序中,pt 表示当前处理的牌的索引,tail 表示尾部的索引。在生成原始牌叠时,需要判断是否到达尾部,以确定是否继续生成牌叠。 因此,判断语句应为 pt != tail,表示当当前处理的牌没有到达尾部时,继续生成原始牌叠。故答案为:pt!=tail。
②:在程序中,dic 是一个字典,用于将数字映射到对应的牌面。在生成原始牌叠时,采用循环的方式为每张牌设置牌面。 表达式 dic[k%4]+dic[k%13+4] 中,k%4 用于确定花色,k%13+4 用于确定点数。这样可以保证在循环中生成不同花色和点数的牌面。故答案为:dic[k%4]+dic[k%13+4]。
③:在洗牌的过程中,需要更新牌叠的链接关系,将当前牌插入到头部。这涉及到将当前牌的下一张牌设置为原头部的下一张牌,然后将当前牌设置为新的头部。 语句 pai[head][1]=pai[pt][1] 实现了将当前牌的下一张牌链接到原头部的下一张牌,然后通过 head = nhead 将当前牌设置为新的头部。故答案为:pai[head][1]=pai[pt][1]。
④:在遍历摸牌的过程中,需要判断是否出现了重复的牌面。若出现重复,需要更新长度和起点,并清除之前标记过的牌面。 判断语句 f[pai[j][0]] 表示检查当前牌面是否已经标记过,若没有则标记,否则进入清除过程。故答案为:f[pai[j][0]]。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$