CCF-GESP 等级考试 2025年6月认证Python二级真题解析

1 单选题(每题 2 分,共 30 分)

第1题 2025年4月19日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类似于计算机的( )。

A. 处理器                       B. 存储器                      C. 输入设备                             D. 输出设备

解析:答案:C。所有传感器都用于采集数据,属于输入设备,故选C

第2题 小杨购置的计算机使用一年后觉得内存不够用,想购置一个容量更大的内存条,这时需要的内存条是( )。

A. RAM                           B. ROM                        C. CACHE                               D. EPROM

解析:答案:A。内存条属于随机存储器(RAM),故选A

第3题 下面Python代码执行后的输出是( )。

  1. a, b, c = 3, 4, 5
  2. print(a ** 2 + b * b == c ** 2)

A. True                            B. true                           C. 9                                          D. 10

解析:答案:Aa**2+b*b=3**2+4*4=25c**2=5**2=25,所以a**2+b*b == c**2结果为True。故选A

第4题 下面Python代码用于获得正整数的第3位数,如1234则输出2。如果是一位数或两位数,则输出0。横线处应 填入的代码是( )。

  1. N = int(input("请输入正整数:"))
  2. print(________________)

A. N % 1000 // 100        B. N // 1000 % 100      C. N / 1000 // 100                   D. N % 1000 / 100

解析:答案:A。获得正整数的第3位数,可将该数整除100,再取个位数;或取该数的后3位,再整除100N // 100 % 10,或N % 1000 // 100,故选A

第5题 下面的Python代码用于判断输入的正整数N是否为质数,其说法正确的是( )。

  1. N = int(input("请输入正整数:"))
  2. if N <= 1:
  3.     print(f"{N}不是质数")
  4. elif N == 2:
  5.     print(f"{N}是质数")
  6. elif N % 2 == 0 or N % 3 == 0:
  7.     print(f"{N}不是质数")
  8. else:
  9.     for i in range(2, N):
  10.         if N % i == 0:
  11.             print(f"{N}不是质数")
  12.             break
  13.     else:
  14.         print(f"{N}是质数")

A. 如果输入2,则将先输出2是质数,然后输出2不是质数,因此程序存在错误

B. 删除break,对程序执行结果没有影响

C. 每个if语句只能有一个elif子句,所以本程序有语法错误

D. 如果输入15,程序中的循环不会被执行

解析:答案:DA. 如果输入2,然后输出2不是质数,但不会输出2不是质数。B. 删除break,第10行的for循环会正常结束,第15行会被执行,如N不是质量,仍会输出N是质数。C. 每介if语句可以有多个elif,程序能正常执行。D. 如果输入15,第7行条件成立,直接输出15不是质数,因此循环不会被执行,正确。故选D

第6题 今天星期六,其后第N天星期几?如果是星期一到星期六输出形如:星期1、星期2等,星期天则输出星期 天。下面的Python代码用于完成上述要求,横线处应填上的代码是( )。

  1. N = int(input())
  2. remainder = __________________
  3. if remainder == 0:
  4.     print(f"星期六后第{N}天是星期天")
  5. else:
  6.     print(f"星期六后第{N}天是星期{remainder}")

A. (N + 6) / 7                 B. (N + 6) // 7                 C. N % 7                           D. (N + 6) % 7

解析:答案:D。由第4~7行可知,星期天remainder0,星期一~星期六remainder1~6,故可将星期六后第N表示为“6+N”星期几 % 7求,7 % 7=0(1~6) % 7 = (1~6)。所以完整表达式为(6+N) % 7。故选D。另A. 结果为浮点数,不符要求,B. 整除结果为商而不是余数,C. 今天是星期六没有关系。

第7题 下面的Python代码执行后其输出是( )。

  1. Sum = 0
  2. for i in range(1, 10):
  3.     Sum += i
  4.     if i % 2:
  5.         continue
  6.     if i % 7:
  7.         break
  8. print(Sum)

A. 45                              B. 28                             C. 3                                    D. 0

解析:答案:Ci % 2表示i不能整除2(i能整除2i % 2 = 0,等价为false)i % 7表示i不能整除7(i能整除7i % 7 = 0,等价为False)i1时,Sum1Sum=1,第4行条件成立continue到下一循环i=2Sum2Sum=3,第4行条件不成立(i % 2 = 0,等价false),第6行条件成立(i % 7 = 2,非0等价为Ture)中断跳出循环,显示Sum,故选C

第8题 下面Python代码执行后其输出是( )。

  1. for i in range(1, 12):
  2.     for j in range(1, i):
  3.         if i * j % 2 == 1:
  4.             break
  5. else:
  6.     print(i * j)

A. 110                             B. 22                            C. 11                                D. 没有输出

解析:答案:Ci =1时内循环不执行(i=1j=1j<i不成立)i=2…10时,i*j为偶数则执行内循环,否则中断内循环。当i=11时,当j=1i * j % 2 == 1成立,此时j=1,中断内循环,i不包含终点12,结束外循环i=11,外层循环正常结束执行else子句,所以执行第6行时i=11j=1,输出i*j=11,选C

第9题 下面Python代码执行后输出是( )。

  1. cnt = 0
  2. for i in range(-99, 100, 2):
  3.     cnt = 1 + cnt
  4. print(cnt)

A. 101                              B. 100                            C. 99                               D. 98

解析:答案:B。循环变量i-99步长为2100,共100次。cnt加了1001,故选B

第10题 下面Python代码执行后输出是( )。

  1. for i in range(1, 10):
  2.     if i % 3 != 0:
  3.         print("A", end = "#")
  4.         continue
  5.     else:
  6.         break
  7.     print("0", end = "#")
  8. else:
  9.     print("1")

A. A#A#                          B. A#0#A#0                   C. A#A#1                           D. A#0#A#0#1

解析:答案:A。虽然循环为9次,但实际,第3(i=3)(i % 3 != 0)不成立,就中断循环。不管是continue还是break,都不会执行第7print("0", end='#');i=1时执行print("A", end="#")输出A#continue直接返回到下一轮循环,此时i=2,执行print("A", end="#")输出A#continue直接返回到下一轮循环,此时i=3i % 3 != 0不成立,执行break中断跳出循环,因为非正常结束循环,不会执行第89行,没有输出。故选A

第11题 下面Python代码执行后的输出是( )。

  1. for i in range(3):
  2.     for j in range(i):
  3.         print(i, j, end = "-", sep = '#')
  4. print("END")

A. 0#0-1#0-2#0-2#1-END                                B. 0#0-1#0-1#1-2#0-2#1-2#2-3#0-3#1-3#2-END

C. 0#0-1#0-1#1-2#0-2#1-2#2-END                 D. 1#0-2#0-2#1-END

解析:答案:Di=0,内循环不执行没有输出,i=1,内循环1次,输出1#0-i=2,内循环2次,输出2#0-2#1-,然后结束循环,输出END,合并输出1#0-2#0-2#1-END。选D

第12题 下面Python代码执行后,将输出不能被3整除且除以5余数为2的数。下列选项不能实现的是( )。

  1. for i in range(100):
  2.     if ___________________________:
  3.         print(i)

A. i % 3 != 0 and i % 5 == 2                                   B. i % 3 and i % 5 == 2

C. i % 3 and not(i % 5 != 2)                                    D. not(i % 3) and i % 5 == 2

解析:答案:Di % 3 != 0表示i不能被3整除,i % 3也表示i不能被3整除(i能被3整除,i%3=0,等价false)not(i % 3) 表示i能被3整除(i能被3整除,i%3=0,等价falsenot为否,则等价为ture)not(i % 5 != 2)表示i除以5余数为2A. (i % 3 != 0) && (i % 5 == 2)表示i不能被3整除且i除以5余数为2B. (i % 3) && (i % 5 == 2)表示i不能被3整除且i除以5余数为2C. (i % 3) && not(i % 5 != 2)表示i不能被3整除且i除以5余数为2D. not(i % 3) && (i % 5 == 2)表示i能被3整除且i除以5余数为2,所以不能实现输出不能被3整除且除以5余数为2的数的是D。故选D

第 13 题 下面Python代码用于判断一个大于0的正整数是几位数,横线处应填入代码先后是( )。

  1. N = int(input("请输入大于0的正整数:"))
  2. cnt = 0
  3. while __________:
  4.  cnt += 1
  5.  ____________
  6. print(cnt)

A.

  1. N > 1
  2. N = N // 10

B.

  1. N > 1
  2. N /= 10

C.

  1. N == 0
  2. N //= 10

D.

  1. N > 0
  2. N //= 10

解析:答案:D。判断一个大于0的正整数是几位数,可以将此数整除10,结果再整除10,直到整除的结果为0时能整除的次数就是该正整数的位数。A. 条件为N>1少计数一;B. 条件为N>1少计数一位,浮点数除,主版位数也不正确;C4行填N==0,因为N>0所以循环不会执行,不会计数。D正确。选D

第14题 判断一个数是否为自守数。自守数的定义是如果一个数的平方其尾数与该数相同,则为自守数,如25的平方是625,其尾数是25,所以25是自守数。相关说法错误的是( )。

  1. N = int(input("输入一个正整数:"))
  2. N1, M1 = N, N * N
  3. Flag = True
  4. while N1 > 0:
  5.     if N1 % 10 != M1 % 10:
  6.         Flag = False
  7.         break
  8.     else:
  9.         N1, M1 = N1 // 10, M1 // 10
  10. if Flag == True:
  11.     print(f"{N}的平方是{N * N},是自守数")
  12. else:
  13.     print(f"{N}的平方是{N * N},不是自守数")

A. 如果Flag在循环中不被改为False,则说明该数是自守数

B. 代码 if N1 % 10 != M1 % 10: 用于判断其个位数是否相等,如果不等,则表明不是自守数

C. 代码 N1, M1 = N1 // 10, M1 // 10 将把个位数去掉

D. 将 N1 > 0 改为 N > 0 效果相同

解析:答案:D。程序通过Flag=TureFlag=False来表示是否是自守数,先默认Flag=True,当判断不是自守数时将Flag置为FalseA.循环N1的每一位与M1对应每一位是否不相等,如到循环结束仍不成立,Flag在循环中不被改为false,则说明该数是自守数,所以A正确;B. if N1 % 10 != M1 % 10: 用于判断其个位数是否相等,如果不等,则表明不是自守数,正确;C.N1 = N1 // 10, M1 = M1 // 10 N1M1的个位数去掉,正确;D. 如将N1 > 0改为N > 0,由于循环中没有修改N的语句,所以循环将成为无限循环,得不到结果。所以D判断一个数是否为自守数不能实现。故选D

第15题 下面Python代码实现输出如下图形,相关说法错误的是( )。

  1. line_number = int(input("请输入层数:"))
  2. now_number = 0
  3. for row in range(1, line_number + 1):
  4.     for i in range(row):
  5.         print(now_number, end = "")
  6.         now_number += 1
  7.         if now_number == 10:
  8.             now_number = 0
  9.     print()

A. 代码 now_number = 0 移动到外层循环之下,内层循环之上,且与内层循环的for对齐,效果维持不变

B. 代码 now_number += 1 修改为 now_number = 1 + now_number 效果维持不变

C. 将代码 now_number == 10 调整为 now_number > 9 效果维持不变

D. 将最后一行的print()修改为print(""),效果维持不变

解析:答案:AA. 如将now_number = 0移动到外层循环之下,内层循环之上,且与内层循环的for对齐,则每行将从0重新计数,得不到题目给出的图形,故错误;B. now_number += 1修改为now_number = 1 + now_number,两者等价,效果维持不变;C. now_number == 10调整为now_number > 9,由于now_number=10之后就改为0now_number不可能超过10,所以now_number == 10now_number > 9等价;D. print()修改为print(""),输出效果等价,都是换行。故选A

2 判断题(每题 2 分,共 20 分)

第1题 现在,人们参加各种闭卷考试时通常都不允许将智能手机、平板电脑等带入考场,因为智能手表通常都有嵌 入操作系统及通信等功能,所以也不允许携带入考场。( )

解析:正确。智能手表因为具有嵌入操作系统及通信等功能,通讯功能风险:1.智能手表普遍具备蓝牙、Wi-Fi或蜂窝网络功能,可实现实时信息收发(如接收答案、传输试题),即使关机或断网,其硬件模块仍存在作弊隐患。2.‌信息存储与计算能力:可存储公式、文档、图片等考试相关资料,或内置计算器、单位换算等工具,违反"仅依靠知识储备答题"的原则。3.‌隐蔽性高,监管困难:部分智能手表外观与普通手表相似,监考人员难以快速甄别功能;其屏幕切换、震动提醒等特性可能用于传递作弊信号,所以也不允许随身携带。

第2题 在Python代码中,假设N为正整数,如果N小于10,则 N // 10 其值为0,大于10则是舍弃个位数的数。( )

解析:正确。Python//为整除,N//10即去除个位数(不计余数只保留商),如N<10则只有一位数,N//100,故正确。

第3题 下列Python代码执行后,其输出为 3 2 1 。( )

  1. a, b, c = 1, 2, 3
  2. a, b, c = c, b, a
  3. print(a, b, c)

解析:正确。第1行对应赋值(属元组赋值)a=1,b=2,c=3,第2行仍是对应赋值(属元组赋值)a=c=3,b=b=2,c=a=3,所以输出3 2 1。故正确。

第4题 Python表达式 4 ** 0.5 ** 2 接近 1.414 ,则说明幂运算符是右结合,即从右向左计算,先计算 0.5 ** 2 ,其值与4进行幂运算。( )

解析:正确。幂运算符**为右结合。4 ** 0.5 ** 2等价4 ** ( 0.5 ** 2) = 4 ** 0.25 = 1.4142135623730951。故正确。

第5题 下面Python执行时将报错,因为变量a的类型从字符串型变到了整数型。( )

  1. a = "123"
  2. a = 456
  3. print(a)

解析:错误。在Python中,变量是可以动态改变其类型的,这是Python的一大特点,被称为鸭子类型”(duck typing)。这意味着你可以将一个变量赋值为一个整数,然后又赋值为一个字符串,甚至是另一个复杂的数据结构,如列表或字典,而没有事先声明变量类型。题目所示程序能正常运行,不会报错,运行结果输出456

第6题 下面Python代码执行时如输入99.99,将输出 及格 两个汉字。( )

  1. score = input("请输入学生成绩:")
  2. if score < 60:
  3.     print("不及格")
  4. else:
  5.     print("及格")

解析:错误。Pythoninput()对任何输入都按字符串接收,故score为字符型变量,第2行的score<60将导致类型错误(TypeError),不能正常运行。

第7题 下面的Python代码执行后,将输出6次 CCF 。( )

  1. i, j = 0, 0
  2. while i < 3:
  3.     while j < 2:
  4.         print("CCF")
  5.         j += 1
  6.     i += 1

解析:错误。第1轮外循环变量i=0,内循环变量j=0,执行两次,输出2 CCF,结束内循环时j=2,继续循环,内循环因j<2不成立而不执行循环体,故只输出2CCF,而不是6 CCF

第8题 下面的Python代码执行后将输出200次 GESP 。( )

  1. for i in range(20):
  2.     for j in range(10):
  3.         print("GESP")

解析:正确。外循环循环20次,内循环循环10次,合计第3行执行200次,输出200 GESP,故正确。

第9题 将下面Python代码中的 range(5, 1, -1) 调整为 range(1, 5) 输出结果相同,因为5到1与1到5的求和相同。( )

  1. tnt = 0
  2. for i in range(5, 1, -1):
  3.     tnt += i
  4. print(tnt)

解析:错误。题目所示程序的输出为5+4+3+2=14(不含1)。调整后程序的输出为1+2+3+4=10(不含5),两者和不相同。

第10题 为实现如下效果,即 N行N列 字符。当输入是奇数时,中间列为 * ,其他是 - ;当输入是偶数时,则中间两 列是 * ,其他是 - 。字符阵列后的代码能实现其效果。( )

  1. 5
  2. --*--
  3. --*--
  4. --*--
  5. --*--
  6. --*--

  1. N = int(input())
  2. for i in range(N):
  3.     for j in range(N):
  4.         if j == N // 2 or j == (N-1) // 2:
  5.             print("*",end="")
  6.         else:
  7.             print("-",end="")
  8.     print()

解析:正确。如果N为奇数,j0N-1(不含N),中间列编号为N//2,即N整除2,也就是如N=5,中间列j=2,此时N/2(N-1)/2都等于2。如果N为偶数,j0N-1(不含N),中间两列编号除N//2,即N整除2外,还有其前一列,也就是如N=6,中间两列j=2j=3,此时N//2=3(N-1)//2=2。所以题目给出的程序第4行能满足“当输入是奇数时,中间列为 * ,其他是-;当输入是偶数时,则中间两列是 * ,其他是-”的要求。故正确。

3 编程题(每题 25 分,共 50 分)

3.1 编程题1

  • 试题名称:数三角形
  • 时间限制:1.0 s
  • 内存限制:512.0 MB

3.1.1 题目描述

直角三角形有两条直角边与一条斜边,设两条直角边的长度分别为a,b,则直角三角形的面积为\frac{ab}{2}。 请你计算当直角边长a,b均取不超过n的正整数时,有多少个不同的面积为整数的直角三角形。直角边长分别为a,b和a’,b’的两个直角三角形相同,当且仅当a=a’,b=b’或者a=b’,b=a’。

3.1.2 输入格式

一行,一个整数 ,表示直角边长的最大值。

3.1.3 输出格式

输出一行,一个整数,表示不同的直角三角形数量。

3.1.4 样例

3.1.4.1 输入样例1

  1. 3

3.1.4.2 输出样例1

  1. 3

3.1.4.3 输入样例2

  1. 5

3.1.4.4 输出样例2

  1. 9

3.1.5 数据范围

对于所有测试点,保证1≤n≤100。

3.1.6 编写程序思路

分析:a,b为不超过n的正整数,即1a≤n1b≤n,但如果1a≤n1b≤n,则会使部分三角形重复(相同),要使产生的三角形不重复(不相同)a≤b≤n。面积为整数的直角三角形的判定式为a*b/2为整数,即a*b % 2 == 0。完整程序如下:

n = int(input())

cnt = 0
for a in range(1, n+1):
    for b in range(a, n+1):
        if a * b % 2 == 0: #确保面积为整数
            cnt += 1
print(cnt)

3.2 编程题2

  • 试题名称:幂和数
  • 时间限制:3.0 s
  • 内存限制:512.0 MB

3.2.1 题目描述

对于正整数n,如果n可以表为两个2的次幂之和,即n=2^{x}+2^{y}(x,y均为非负整数),那么称n为幂和数。 给定正整数l,r,请你求出满足l≤n≤r的整数n中有多少个幂和数。

3.2.2 输入格式

一行,两个正整数l,r,含义如上。

3.2.3 输出格式

输出一行,一个整数,表示l,r之间幂和数的数量。

3.2.4 样例

3.2.4.1 输入样例1

  1. 2 8

3.2.4.2 输出样例1

  1. 6

3.2.4.3 输入样例2

  1. 10 100

3.2.4.4 输出样例2

  1. 20

3.2.5 数据范围

对于所有测试点,保证1≤l≤r≤10^{4}

3.2.6 编写程序思路

分析:二级认证标准中未要求数学幂次方函数pow(),故不用pow(),可用幂运算符号**,本例既不用幂函数pow(),也不用幂运算符号**2x=1×2×2×⋯×2x2相乘,可用1循环乘x2实现。1≤a≤b≤rnl循环到r。设a=2^{x},可用a=1; for i=1;i<=x; i++) a*=2; 求得,b=2^{y},可用b=a; for i=1;i<=y; i++) b*=2; 求得。nl循环到r,循环求ab,当a+b<=n时判n==a+b,如成立计数,并n循环到下一轮。完整程序如下:

l, r = [int(i) for i in input().split()]# 输入两个数作为左右边界数
tot = 0
for n in range(l, r+1):
    a = 1;
    Flag = False;
    while a <= n: #求a=2^x
        b = a;
        while a + b <= n: #求b=2^y, 当a+b>n结束
            if n == a + b: #找到了符合条件的2^x(a)和2^y(b)
                Flag == True #设置标志
                tot += 1 #并计数加1
                break
            b *= 2 #增加2的一次方,相当于2^y中的y=y+1
        if Flag: break #找到了符合条件的a和b, 进入下一轮n循环
        a *= 2 #增加2的一次方,相当于2^x中的x=x+1
print(tot)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值