一、单选题
1、以下代码的输出结果是?( )
nums = list(range(100, 201))
print(nums[::10])
A、 [100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
B、
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 200]
C、
[100, 111, 122, 133, 144, 155, 166, 177, 188, 199]
D、
[199, 188, 177, 166, 155, 144, 133, 122, 111, 100]
解析:
在Python中,nums[::10]
表示对列表 nums
进行切片操作,其中 ::10
表示从列表的开始到结束,每隔10个元素取一个。因此,对于给定的 nums = list(range(100, 201))
,输出的结果应该是从100开始,每隔10个元素取一个,直到接近但不包括200的元素,即 [100, 110, 120, ..., 190]
。因此,正确答案是A。
2、以下代码的输出结果是?( )
def count_odd_numbers(n): return len([num for num in range(n) if num % 2 != 0]) print(count_odd_numbers(20))
A、5
B、8
C、10
D、15
解析:
代码定义了一个函数count_odd_numbers(n)
,该函数的作用是计算小于等于n的所有奇数个数。代码逻辑是遍历从0到n-1的所有数字,判断数字是否为奇数(即除以2的余数不为0),然后将所有奇数存储在列表中,最后返回该列表的长度,也就是奇数的个数。因此,当n为20时,小于等于20的奇数有10个(1,3,5,7,9,11,13,15,17,19),所以输出结果为10,选择项C正确。
3、以下Python代码的输出结果是?( )
for i in range(5): print(' '*(5-i) + '*'*(2*i+1))
A、
错误,代码无法运行
B、打印出一个梯形状的星星
C、
打印出一个倒立的三角形
D、 打印出一个正立的三角形
解析:
该段Python代码使用for循环遍历range(5),在每次循环中,打印出一行由空格和星号组成的字符串。其中,空格的数量随着循环的进行逐渐减少,而星号的数量则逐渐增加。因此,这段代码会打印出一个正立的三角形。选项D正确。
4、运行以下Python代码的结果是?( )
nums = range(1, 11) sliced_nums = nums[2:8] result = sum(sliced_nums) * 3 print(result)
A、90
B、99
C、81
D、72
解析:
首先,range(1, 11)
生成一个从1到10的整数序列。然后,sliced_nums = nums[2:8]
对这个序列进行切片,获取从第3个元素(索引为2)到第8个元素(索引为7)的部分,即[3, 4, 5, 6, 7, 8]。这部分元素的和为(3+4+5+6+7+8)=33。最后,将这个和乘以3,得到的结果为99。因此,运行这段代码的结果是99,选项B是正确答案。
5、集合a={1,2,3,4,5,6},b={1,3,5,7,9},则a&b的结果是?( )
A、 {1, 3, 5}
B、
{2, 4, 6}
C、
{1,2,3,4,5,6,1,3,5,7,9}
D、
[1, 3, 5]
解析:
题目描述了两个集合a和b,并询问a&b的结果。在Python中,"&"操作符用于集合的交集运算。交集意味着找出两个集合中共同的元素。集合a中的元素为{1,2,3,4,5,6},集合b中的元素为{1,3,5,7,9},它们共同的元素是{1,3,5}。因此,a&b的结果是{1,3,5},故选A。
6、下列程序的运行结果?( )
a={6,5,4,3,2,1} a.remove(1) print(a)
A、 {6,5,4,3,2}
B、
{1,2,3,4,5}
C、
(6,5,4,3,2)
D、
[2,3,4,5,6]
解析:
在Python中,remove()
函数用于从列表中删除指定的元素。在给定的程序中,a.remove(1)
会从列表a
中删除元素1
。因此,运行该程序后,列表a
将变为{6,5,4,3,2}
。所以,正确答案是A。
7、智慧种植社团想要确定农植园西红柿元组的最大值,可以使用下列方法?( )
A、
list()
B、 max()
C、
min()
D、
sum()
解析:
在Python中,要确定一个列表中的最大值,可以使用内置的max()
函数。智慧种植社团想要确定农植园西红柿元组的最大值,应该使用max()
方法。而list()
是创建列表的,min()
是求最小值的,sum()
是求和的,都不适用于求最大值。因此,正确答案是B。
8、统计黑色"black"在当前pen元组中出现的次数
pen=('blue','black','red','black','blue','black')
print(pen.count('black'))
输出的结果是?( )
A、1
B、3
C、5
D、6
解析:
在Python中,元组中的元素是不变的,可以使用count方法来统计某个元素在元组中出现的次数。在给定的元组pen中,’black’出现了3次,因此输出的结果是3,选项B是正确答案。
9、科学课上,王老师做了一个实验,一张纸对折1次厚度是原来的2倍,对折2次厚度是原来的4倍,对折3次厚度是原来的8倍,…依此类推,对折n次后,厚度是原来的多少倍?( )
A、
ans=math.pow(10,n)
B、
ans=math.comb(n,2)
C、
ans=math.factorial(n)
D、 ans=math.pow(2,n)
解析:
每次对折,纸的厚度都会变为原来的2倍。这是一个指数增长的过程,可以用2的n次方来表示对折n次后纸的厚度是原来的多少倍。因此,对折n次后,厚度是原来的2的n次方倍。选项D中的表达式 math.pow(2,n) 表示2的n次方,符合题意。
因此,正确答案是D。
10、有关中文分词jieba库的描述,错误的是?( )
A、
jieba.add_word(w)向分词词典中增加新词w
B、 jieba.lcut(s)返回的可能是一个字符串类型
C、
jieba.cut(s)返回的可能是一个可迭代的数据类型
D、
jieba库的分词原理是利用中文词库,将待处理的内容与词库比对后找到最大概率的词组
解析:
选项B描述的是jieba.lcut(s)函数的返回类型可能是一个字符串类型,这是不正确的。实际上,jieba.lcut(s)函数返回的是一个列表类型。因此,选项B描述错误。
11、石头剪刀布游戏,规则如下:石头胜剪刀,剪刀胜布,布胜石头。编写 Python 程序模拟石头剪刀布游戏,并判定游戏的输赢,代码中数字 0 代表石头,数字 1 代表剪刀,数字 2 代表布。模拟玩家A出拳的python程序代码是?( )
A、
random.uniform(0,3)
B、 random.randint(0,2)
C、
random.sample(2,1)
D、
random.seed()
解析:
要模拟石头剪刀布游戏中的出拳动作,我们需要生成一个代表石头、剪刀或布的随机数字。在Python中,random.randint(0, 2)
可以生成一个包括0、1、2三个数字的随机整数,正好符合石头剪刀布游戏的规则(石头为0,剪刀为1,布为2)。因此,选项B是正确的。
选项A的random.uniform(0, 3)
会生成一个0到3之间的随机浮点数,不符合题目要求。
选项C的random.sample(2, 1)
是从长度为2的序列中随机抽取1个元素,结果可能是0或2,但不是等概率的,因此也不符合题目要求。
选项D的random.seed()
是设置随机数生成器的种子,用于产生固定的随机数序列,不是用来生成随机出拳动作的。
12、Python中wordcloud库把词云当作一个WordCloud对象。
向阳小学阅读社团计划编写一个读书笔记的词云,根据笔记的数量,计划使用以下哪个指令自定义设置词云的图片尺寸参数?()
A、
wordcloud.WordCloud(font_step=5)
B、 wordcloud.WordCloud(width=1600,height=800)
C、
wordcloud.WordCloud(max_words=20)
D、
wordcloud.WordCloud(min_font_size=10)
解析:
在Python的wordcloud库中,要自定义设置词云的图片尺寸参数,应该使用“width”和“height”参数。选项B中的“width=1600,height=800”正是用于设置词云图片尺寸的指令,因此是正确的。
其他选项的解释:
A. “font_step=5” 是用于设置字体变化的步长,不是用于设置图片尺寸的。
C. “max_words=20” 是用于设置最大显示的词语数量,不是用于设置图片尺寸的。
D. “min_font_size=10” 是用于设置最小字体大小,也不是用于设置图片尺寸的。
13、以下哪个选项可以添加一个键值对到字典中?( )
A、
my_dict.add(key, value)
B、 my_dict[key] = value
C、
my_dict.append(key, value)
D、
my_dict.insert(key, value)
解析:
在Python中,向字典添加键值对的方式是通过直接为键分配值,或者使用字典的update方法。选项B中的形式my_dict[key] = value
是正确的方法。而选项A中的add
方法并不存在,选项C的append
方法用于列表,而不是字典,选项D中的insert
方法在Python字典中也不适用。因此,正确答案是B。
14、以下哪个选项可以删除字典中指定的键值对?( )
A、
my_dict.remove(key)
B、 del my_dict[key]
C、
my_dict.clear(key)
D、
my_dict.delete(key)
解析:
在Python中,要删除字典中的指定键值对,应使用 del
语句和方括号 []
来访问字典中的项,如 del my_dict[key]
。因此,选项B是正确的。其他选项的功能如下:
A. my_dict.remove(key)
:这是删除字典中第一个匹配的键(如果存在的话),而不是特定的键值对。
C. my_dict.clear(key)
:这实际上会清除整个字典,而不是单一的键值对。
D. my_dict.delete(key)
:在Python的标准库中,字典没有 delete
方法。因此,这个选项是不正确的。
15、执行下列Python代码的结果是?( )
>>> a = "3.1415926" >>> b = 6 >>> c = "<" >>> print("{0:{2}.{1}}".format(a,b,c))
A、
3.1415926
B、
003.14
C、 3.1415
D、
003.141
解析:
执行这段Python代码时,首先定义了三个变量a、b和c,其中a为字符串"3.1415926",b为整数6,c为字符串"<“。然后,使用字符串的format方法格式化输出。这里的”{0:{2}.{1}}“表示使用c作为填充字符,b作为小数点后的位数。因此,代码将输出字符串"3.14”,其中小数点后有两位数字,不足部分用"<"字符填充。所以正确答案为C。
16、字符串变量str = 'Wfall0343',执行语句print(str.find('3')),输出的结果是?( )
A、6
B、8
C、3
D、7
解析:
在Python中,字符串的find()方法用于查找子字符串在字符串中首次出现的位置的索引值。如果找到子字符串,则返回其起始位置的索引值;否则返回-1。在本题中,字符串变量str=‘Wfall0343’,执行语句print(str.find(‘3’))会查找字符’3’首次出现的位置的索引值。字符’3’首次出现在第6个位置(索引从0开始计数),因此输出结果为6。所以正确答案是A。
17、print('\x68')的结果是?( )
A、
\x68
B、68
C、x68
D、h
解析:
在Python中,print(‘\x68’)会输出字符’h’,因为在Python的字符串中,‘\x’表示一个十六进制的字符代码。’\x68’是字符’h’的十六进制ASCII代码。因此,print(‘\x68’)的结果是字符’h’,所以正确答案是D。
18、设str1 = '*@python@*', 语句print(str1[1:].strip('@'))的执行结果是?( )
A、 python@*
B、
python*
C、
*@python@*
D、
* python*
解析:
首先,我们来解析提供的代码 str1[1:].strip('@')
。这里涉及两个操作:字符串切片和 strip()
方法。
str1[1:]
: 这部分代码从str1
的第二个字符开始截取,即索引为 1 的字符开始,一直到字符串的末尾。因此,这部分操作后的结果是*@python@*
(去掉第一个字符 ‘*’)。.strip('@')
: 这个方法会移除字符串开头和结尾的所有特定字符(这里是 ‘@’)。因此,在*@python@*
的开头和结尾的 ‘@’ 都会被移除。
综合这两个操作,最终结果是 python@*
。因此,正确答案是 A 选项,即 python@\*
。
19、某Python程序段如下:
s=["seasons","spring","summer","fall","winter"] print(s[1][2:6])
程序运行后,输出的结果是?( )
A、 ring
B、
pring
C、
eason
D、
easo
解析:
程序中的列表s包含五个元素,当使用索引s[1]时,得到的是列表中的第二个元素,即"spring"。接着使用切片操作s[1][2:6],即从索引位置2开始到索引位置6之前的部分(注意切片操作不包含结束索引位置的值),所以输出的结果是"ring"。因此,正确答案是A。
20、某Python程序段如下:
lis=[11,22,33,44,55] lis[2],lis[3]=lis[3],lis[2] print(lis)
程序运行后,输出的结果是?( )
A、
[11,22,33,44,55]
B、
[11,22,22,33,55]
C、 [11,22,44,33,55]
D、
[11,33,33,44,55]
解析:
在Python中,lis[2],lis[3]=lis[3],lis[2]
这行代码实现了列表元素的交换。具体地,它首先将 lis[3]
的值赋给 lis[2]
和一个临时变量(这个临时变量保存了原来 lis[2]
的值),然后将原来 lis[2]
的值赋给 lis[3]
。因此,这行代码执行后,lis
的第三个和第四个元素的值会互换。给定的列表 lis=[11,22,33,44,55]
会变成 [11, 22, 44, 33, 55]
。所以,程序运行后的输出结果是 [11, 22, 44, 33, 55]
,对应选项 C。
21、已知列表Lista=[1,2,3,4],执行语句Lista=[2]+Lista后,列表Lista中的元素为?( )
A、
[3,4,5,6]
B、
[1,2,3,4,2]
C、
[1,2,2,3,4]
D、 [2,1,2,3,4]
解析:
在Python中,执行语句Lista=[2]+Lista
时,先将一个包含元素2
的新列表与原来的Lista
列表进行拼接。因此,原列表[1,2,3,4]
与新列表[2]
拼接后得到的列表为[2,1,2,3,4]
。所以,执行该语句后,列表Lista
中的元素为[2,1,2,3,4]
,选择D。
22、已知list1=list("php"),执行语句list1[2:]=list("Python")后,列表list1中的内容为?( )
A、
['p','h','p','P','y','t','h','o','n']
B、
['p','P','y','t','h','o','n']
C、 ['p','h','P','y','t','h','o','n']
D、
['P','y','t','h','o','n']
解析:
在Python中,执行语句list1[2:] = list(“Python”)会将list1从第三个元素开始(索引为2的元素,也就是’h’)替换为字符串"Python"中的字符。因此,原来的列表list1 = list(“php”)中的元素会被替换为"Python"中的字符。所以,执行该语句后,列表list1中的内容会变成[‘p’, ‘h’, ‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]。因此,正确答案是C。
23、某Python程序段如下:
import random a=[random.randint(1,5)*2 for i in range(5)] print(a)
程序运行后,输出结果不可能是?( )
A、
[4,4,8,10,8]
B、
[8,8,2,4,2]
C、 [2,5,6,8,4]
D、
[2,4,6,8,10]
解析:
根据给出的Python程序段,首先通过random.randint(1,5)
生成一个介于1到5之间的随机整数,然后乘以2得到偶数结果。由于随机数的特性,每次运行程序生成的列表中的数字都是随机的,但都是偶数。因此,选项C中的[2,5,6,8,4]不符合程序生成的偶数列表的规则,因为其中包含了奇数数字5。所以,程序运行后的输出结果不可能是选项C。
24、某Python程序段如下:
l= ["python" +i+"级" for i in "一二三四五六"] print(l[4])
程序运行后,输出结果是?( )
A、
python二级
B、
python三级
C、
python四级
D、 python五级
解析:
根据提供的Python程序段,列表l是通过一个列表生成式创建的,该生成式将字符串"python"与列表"一二三四五六"中的每个元素组合,并在它们之间加上"级"。因此,生成的列表l为:[“python一级”, “python二级”, “python三级”, “python四级”, “python五级”, “python六级”]。当执行print(l[4])
时,输出的是列表中的第五个元素,即"python五级"。因此,正确答案是D。
25、闰年是公历中的名词,分为普通闰年和世纪闰年。普通闰年是4年一次,若公历年份是4的倍数且不是100的倍数则为普通闰年(如2004年、2020年就是普通闰年),现在想输出1949年到今年(2024年)之间的所有普通闰年,正确的列表推导式是?( )
A、 print([i for i in range(1949,2025)if i %4==0 and i%100!=0])
B、
print([i for i in range(1949,2025)if i %4!=0 and i%100!=0])
C、
print([for i in range(1949,2025)if i %4==0 and i%100=0])
D、
print([for i in range(1949,2025)if i %4!=0 and i%100=0])
解析:
题目要求输出1949年到2024年之间的所有普通闰年。普通闰年的判断条件是公历年份是4的倍数且不是100的倍数。因此,正确的列表推导式应该是选择所有在1949年到2024年之间的年份,判断其是否满足普通闰年的条件。选项A的代码中,i % 4 == 0
判断年份是否是4的倍数,i % 100 != 0
判断年份是否是100的倍数,且范围设置正确,因此是正确的列表推导式。选项B中的条件判断错误,选项C和D的语法错误,都不是正确的列表推导式。
二、判断题
26、以下代码的输出结果是 48。( )
nums = range(1, 9)
result = sum([num for num in nums if num % 3 != 0]) * 2 - 6
A 正确
B 错误
解析:
首先,代码中的 nums = range(1, 9)
生成了一个从 1 到 8 的整数序列。接着,通过列表生成式 [num for num in nums if num % 3 != 0]
,筛选出不能被 3 整除的数。然后,对这些筛选出来的数求和,结果乘以 2 再减去 6,得到最终的结果。
不能被 3 整除的数在 1 到 8 的范围内是:1, 2, 4, 5, 7, 8。这些数的和是 27,乘以 2 得到 54,再减去 6,结果是 48。因此,代码的输出结果是 48,判断为正确。
27、在Python中,可以仅仅使用一对空的花括号{}来创建集合。( )
A 正确
B 错误
解析:
在Python中,空的花括号{}通常用于创建字典(dictionary),而不是集合(set)。要创建集合,可以使用花括号内的元素,如 {1, 2, 3}
,或者使用内置的 set()
函数,如 set()
或 set([1, 2, 3])
。因此,仅仅使用一对空的花括号来创建集合在Python中是错误的。
28、无法通过引用索引来访问集合中的元素,但是可以用for循环来遍历集合中的元素。( )
A 正确
B 错误
解析:
在Python中,集合(set)是一种无序的不重复元素序列。我们无法直接通过索引来访问集合中的特定元素,因为集合本身并不支持索引。但是,我们可以使用for循环来遍历集合中的每一个元素。因此,这个陈述是正确的。
29、科技社团将个人信息定义为元组,使用小括号,数据可以是不同的数据类型,各个数据之间用逗号隔开。( )
A 正确
B 错误
解析:
在Python中,元组是一种序列数据类型,通常用于存储一组有序的元素。个人信息可以表示为元组,使用小括号括起来,数据可以是不同的数据类型,各个数据之间用逗号隔开。例如,一个表示人员信息的元组可能包含姓名、年龄、性别等不同的数据类型。因此,该说法是正确的。
30、Jieba是优秀的中文分词第三方库,jieba.cut(s)精确模式,可以把文本精确的切分开,不存在冗余单词。( )
A 正确
B 错误
解析:
jieba.cut(s)的精确模式确实可以精确切分文本,但是在某些情况下,为了分词结果的连贯性,可能会保留一些冗余单词,因此该说法不完全准确。
31、字典中的键必须是唯一的,但值可以重复。( )
A 正确
B 错误
解析:
在Python的字典中,键(key)必须是唯一的,但值(value)可以重复。这是字典的基本特性之一。
32、print('It's a wonderful day!')的结果是It's a wonderful day!。( )
A 正确
B 错误
解析:
在Python中,print('It's a wonderful day!')
的作用是输出字符串"It’s a wonderful day!"到控制台,并不会返回该字符串本身。因此,题目的说法是错误的。
33、str="This is a disposable cup"
sub="is"
print(str.rfind(sub))的结果为5。( )
A 正确
B 错误
解析:
在Python中,字符串的 rfind()
方法返回子字符串在字符串中最后一次出现的索引位置。对于给定的字符串 str
和子字符串 sub
,str.rfind(sub)
会返回子字符串 is
在字符串 This is a disposable cup
中最后一次出现的位置。由于 is
在该字符串中的起始位置是3(从0开始计数),所以 str.rfind(sub)
的结果应该是3而不是5。因此,题目的陈述是错误的。
34、有列表a=[1,2,3],b=a*3,执行语句print(len(b))输出结果是9。( )
A 正确
B 错误
解析:
在Python中,b=a*3
这个语句是尝试将列表a与数字3相乘,这是不合法的操作,会抛出TypeError异常。因此,列表b并不会被成功创建,也就无法计算其长度。所以执行print(len(b))
会导致错误,而不是输出9。因此,题目的陈述是错误的。
35、小明想在变量a中存储26个小写字母,但他不想手动输入,可以使用列表推导式[chr(i+97)for i in range(26)]实现。( )
A 正确
B 错误
解析:
题目要求小明在变量a中存储26个小写字母,可以使用Python中的列表推导式来实现。列表推导式[chr(i+97) for i in range(26)]可以生成一个包含26个小写字母的列表。其中,chr(i+97)表示获取ASCII码表中从97(a)开始的后26个字符,即小写字母a到z。因此,该列表推导式可以满足题目的要求,故答案选A。
三、简答题
36、火柴棍游戏
用火柴棍拼成数字0~9,具体拼法如图所示:
编写Python程序,实现输入火柴棍的数量,输出符合该火柴棍数的三位数组合,若找不到,则输出“没有符合要求的数”,见样例,程序如下:
请在划线处填入合适代码。
code={0:6,1:2,2:5,3:5,4:4,5:5,6:6,7:3,8:7,9:6} num=int(input("请输入火柴棍数量:")) flag=False for i in range( ① ): if ② +code[i//10%10]+ ③ ==num: print("可以组成的三位数:",i,sep="") flag=True if ④ : print("可以组成的三位数:","没有符合要求的数",sep="")
参考答案:
①range(10):生成一个包含数字0到9的序列,因为我们要遍历所有可能的三位数组合。
②code[i%10]:取当前数字对应的火柴棍数量。由于我们是在遍历数字,所以用i%10来取当前数字对应的火柴棍数量。
③code[i//10]:取当前数字百位上的数字对应的火柴棍数量。由于i是从0到9遍历的,所以i//10可以取到百位上的数字,然后利用code字典找到对应的火柴棍数量。
④not flag:如果flag仍为False,则说明没有找到符合要求的数字组合。
解析:
- ①处需要生成一个包含数字0到9的序列,因为我们要遍历所有可能的三位数组合,所以填写range(10)。
- ②处需要取当前数字对应的火柴棍数量。由于我们是在遍历数字,所以用i%10来取当前数字(个位数)对应的火柴棍数量。
- ③处需要取当前数字百位上的数字对应的火柴棍数量。由于i是从0到9遍历的,所以i//10可以取到百位上的数字,然后利用code字典找到对应的火柴棍数量。
- ④处需要判断是否有符合要求的数字组合。如果flag仍为False,则说明没有找到符合要求的数字组合,此时应输出"没有符合要求的数"。
37、得分处理
智龙是一名篮球队的教练,为了方便对球员进行精准分析,他需要记录球队每个队员的得分,并按照得分从高到低进行排序。请你帮助他完成以下任务:
(1)创建一个空的列表 scores,用于存储队员的得分;
(2)使用循环,依次输入每个队员的得分,将得分添加到 scores 列表中;当输入“stop”时停止输入。
(3)使用 sorted() 函数对 scores 列表进行排序,得到一个新的列表 sorted_scores,按照得分从高到低排序;
(4)打印出排序后的队员得分。
程序代码如下,请你补全Python代码。
scores= ① while True: score = ② ("请输入队员的得分(输入stop字符串结束):") if score == "stop": ③ scores.append(int(score)) sorted_scores = ④ print("排序后的队员得分:", sorted_scores)
参考答案:
① [] (空列表)
② input
③ break
④ sorted_scores = sorted(scores, reverse=True)
解析:
- 创建一个空的列表用于存储队员的得分,可以直接使用Python的列表语法创建空列表,即“[]”。所以,①处应填 []。
- 使用循环输入每个队员的得分,可以使用Python的input函数获取用户输入。所以,②处应填 input。
- 当输入"stop"时停止输入,可以使用break语句跳出循环。所以,③处应填 break。
- 对scores列表进行排序,可以使用Python的sorted()函数。要求按照得分从高到低排序,可以使用reverse=True参数。所以,④处应填 sorted_scores = sorted(scores, reverse=True)。
38、知识竞赛活动
学校开展“学宪法"知识竞赛活动,其中有一项任务为完成“学宪法”答卷记得分。答卷含有5个客观题和5个主观题,其中客观题1-4题为单选题,第5题为多选题,单选题每题分值为2分;多选题全对得2分,漏选、少选得1分,多选错选不得分。为了提高改卷效率,学校信息技术组的老师设计并编写了一个Python小程序,输入客观题正确答案和答卷上的答案,即可计算得分。实现上述功能的Python程序如下,运行界面如图所示。
请输入客观题(5道)标准答案:AABDACD
请输入客观题(5道)题学生答案:ABBDAC
该学生客观题得分为:7分
实现上述功能的 Python 程序如下,请在划线处填入合适的代码。
def judge(x,y): f=True i=0 while i<len(y): if y[i] not in x: ① break i+=1 return f num=0 key=input("请输入客观题(5道)标准答案:") s=input("请输入客观题(5道)题学生答案:") for j in range(5): if j==4: if key[j:len(key)]==s[j:len(s)]: num+=2 elif ② : num+=1 else: if s[j]==key[j]: ③ print("该学生客观题得分为:"+ ④ +"分")
参考答案:
① f = False
② judge(key[j], s[j]) == True 或 judge(key[j], s[j]) 或 key[j] in s
③ num += 2 或 num += score_single_question(假设客观题每题分值为score_single_question)
④ str(num) 或 str(num)+“分”(假设num为整数)或 f"{num}分"(假设Python版本支持f-string格式化)
解析:
-
第一空:根据题目描述,如果学生的答案不在标准答案中,应该设置标志位f为False并跳出循环。因此填写的代码应该是将f设置为False。
-
第二空:这一空是多选题得分的判断逻辑。如果学生的答案中包含正确答案,应该得一分。因此可以使用函数judge来判断学生答案中是否包含正确答案,或者简单地通过统计学生答案中正确答案的数量来判断。如果学生的答案中包含正确答案的数量大于零,则得分。这里假设题目中的多选题判断逻辑是只要学生答案中包含正确答案即可得分。
-
第三空:对于客观题中的单选题部分,如果学生的答案与标准答案一致,应该增加分数。这里可以直接增加分数,假设客观题每题分值为score_single_question(这是一个假设的变量名),或者由于已经在循环外部对多选题进行了处理,这里可以不进行任何操作。
-
第四空:最后需要输出学生的得分。这里需要将分数转换为字符串格式并加上单位“分”。假设num为整数,可以直接使用str函数将分数转换为字符串格式并加上“分”。如果使用Python的f-string格式化功能,可以直接使用f"{num}分"来输出带分数的字符串。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!