
「GESP练题小程序艾墨舟编程小先锋」专为GESP考生打造的免费题库。涵盖图形化/Python/C++全真题,支持真题模考、考前预测、错题整理与学习统计,一站式攻克客观题。
---✨ 第1题 ✨---
题目:2026年春节联欢晚会上一个武术表演节目《武 BOT 》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备 ( ) 。
A. 用于检测重心的重力传感器
B. 预装的 AI 算法程序
C. 接收动作指令的遥控器
D. 拍摄其他机器人的摄像头
考查知识点:计算机基础知识 - 输入设备概念
解析:
输入设备是指向计算机系统输入数据和信息的设备,用于将外部信息转换为计算机可以处理的信号。
答案:B
---✨ 第2题 ✨---
题目:下面代码用来找出输入的 N 个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是( )。
Max = 0
N = int(input())
while(N):
val = int(input())
if val > Max: #L1
Max = val
N -= 1
print(Max)
A. 圆形框
B. 椭圆形框
C. 平行四边形框
D. 菱形框
考查知识点:流程图 - 基本图形符号
解析:
在流程图中,不同形状的框代表不同的含义:
- 椭圆形框:表示流程的开始或结束
- 平行四边形框:表示输入/输出操作
- 菱形框:表示判断/选择结构
- 矩形框:表示处理步骤
- 圆形框:通常用作连接符
L1标记的代码行是 if val > Max:,这是一个条件判断语句,在流程图中应该用菱形框表示。
if val > Max: 是条件判断,应该使用菱形框。 |
答案:D
---✨ 第3题 ✨---
题目:有关下面 Python 的说法,正确的是 ( ) 。
PI = 3.1415926
print(PI)
A. 为了方便初学者,print(PI)和print(pi)效果相同,即变量的大小写不敏感
B. print(PI)修改为print(Pi)能正常执行
C. 不能用 PI 做变量名,因为要保存圆周率这个常量
D. 将程序中 PI 全部改写为 Pai,将能正常执行,不会报错
考查知识点:Python基础语法 - 变量命名规则、大小写敏感
解析:
Python是大小写敏感的语言,变量名区分大小写。变量命名需要遵循标识符规则:以字母或下划线开头,由字母、数字、下划线组成,不能是Python关键字。
PI和pi是两个不同的变量名。 | |
Pi | |
PI | |
PI全部改为Pai后,变量名一致,程序能正常执行。 |
答案:D
---✨ 第4题 ✨---
题目:下面选择项中,与 Python 表达式 not (x > 5 and y <= 10) 等价的是 ( ) 。
A. x <= 5 and y > 10
B. x > 5 or y <= 10
C. x <= 5 or y > 10
D. not x > 5 and not y <= 10
考查知识点:逻辑运算 - 德摩根定律
解析:
根据德摩根定律:not (A and B) 等价于 (not A) or (not B)。
原表达式:not (x > 5 and y <= 10)
应用德摩根定律:(not (x > 5)) or (not (y <= 10))
简化:(x <= 5) or (y > 10)
and 关系,不是 or 关系,与原表达式不等价。 | |
(not A) and (not B),而德摩根定律是 (not A) or (not B),不等价。 |
答案:C
---✨ 第5题 ✨---
题目:某同学执行 Python 代码 print((0.1 + 0.2) == 0.3) 时输出 False,其原因是 ( ) 。
A. Python 的 + 运算符在处理小数时存在 bug
B. 0.1 、 0.2 和 0.3 在计算机中无法用二进制浮点数精确表示,导致 0.1 + 0.2 的结果与 0.3 存在微小误差
C. == 运算符不能用于比较浮点数,只能用于整数
D. 因为 0.1 + 0.2 的数学结果不等于 0.3
考查知识点:浮点数精度 - 二进制浮点数表示限制
解析:
计算机使用二进制浮点数表示小数,而0.1、0.2、0.3在二进制中是无限循环小数,无法精确表示,存在舍入误差。0.1+0.2的结果与0.3有微小的差异,导致 == 比较为False。
== | |
答案:B
---✨ 第6题 ✨---
题目:下面的 Python 代码执行后其输出是 ( ) 。
tnt = 0
for i in range(5):
for j in range(i):
tnt += 1
print(tnt, end = "#")
print(tnt)
A. 0#1#3#6#10#10
B. 1#2#3#4#5#6#7#8#9#10#10
C. 10#10
D. 10
考查知识点:嵌套循环 - range()函数、循环变量范围
解析:
分析代码执行过程:
- 外层循环 i 取值:0, 1, 2, 3, 4
- 内层循环 j 取值:range(i) 当 i=0 时为空,i=1时为[0],i=2时为[0,1],i=3时为[0,1,2],i=4时为[0,1,2,3]
- tnt 累加次数:0+1+2+3+4 = 10次
执行过程:
1. i=0: 内层循环0次,tnt=0,打印"0#"
2. i=1: 内层循环1次,tnt=1,打印"1#"
3. i=2: 内层循环2次,tnt=3,打印"3#"
4. i=3: 内层循环3次,tnt=6,打印"6#"
5. i=4: 内层循环4次,tnt=10,打印"10#"
6. 循环结束后打印tnt值:10
答案:A
---✨ 第7题 ✨---
题目:下面的 Python 代码执行之后的输出是 ( ) 。
for i in range(-2, 2):
if not i % 3:
print(i, end = "#")
A. 0#
B. -2#-1#1#
C. -1#0#
D. -2#0#1#
考查知识点:range()函数、取模运算、逻辑非运算
解析:
- range(-2, 2) 生成序列:-2, -1, 0, 1(不包含2)
- i % 3 计算 i 除以3的余数
- not i % 3 当余数为0时结果为True,否则为False
- 余数为0意味着 i 能被3整除
检查每个i值:
- i=-2: -2 % 3 = 1 (Python中负数的取模:-2 % 3 = 1),not 1 = False,不打印
- i=-1: -1 % 3 = 2,not 2 = False,不打印
- i=0: 0 % 3 = 0,not 0 = True,打印"0#"
- i=1: 1 % 3 = 1,not 1 = False,不打印
最终输出:0#
答案:A
---✨ 第8题 ✨---
题目:下面的 Python 代码执行后其输出是 ( ) 。
cnt = 0
for i in range(1, 5):
for j in range(i):
print(j, end = "#")
break
else:
print(i*j)
A. 0#0#1#0#1#2#0#1#2#3#12
B. 0#0#1#0#1#2#0#1#2#3#
C. 0#
D. 1#
考查知识点:循环控制 - break语句、for-else结构
解析:
分析代码执行过程:
1. 外层循环 i=1
2. 内层循环 range(1) 生成 [0],j=0,打印"0#"
3. 执行 break,立即终止当前循环(外层循环)
4. 由于循环是通过 break 终止的,不执行 else 部分
注意:break 只终止它所在的最内层循环,但这里 break 在外层循环体内,所以终止的是外层循环。
最终输出:0#
答案:C
---✨ 第9题 ✨---
题目:下面 Python 代码执行后其输出是 ( ) 。
count = 0
for i in range(1, 4):
for j in range(1, 5):
if j == 3:
continue
if i == 2:
break
count += 1
print(count)
A. 2
B. 4
C. 6
D. 8
考查知识点:嵌套循环控制 - continue和break语句
解析:
分析代码执行过程:
- 外层循环 i 取值:1, 2, 3
- 内层循环 j 取值:1, 2, 3, 4
- 当 j == 3 时,continue 跳过本次循环剩余部分,不执行 count += 1
- 当 i == 2 时,break 终止内层循环
详细执行:
1. i=1:
- j=1: j!=3, i!=2, count=1
- j=2: j!=3, i!=2, count=2
- j=3: j==3, continue跳过
- j=4: j!=3, i!=2, count=3
2. i=2:
- j=1: j!=3, i==2, break终止内层循环
3. i=3:
- j=1: j!=3, i!=2, count=4
- j=2: j!=3, i!=2, count=5
- j=3: j==3, continue跳过
- j=4: j!=3, i!=2, count=6
最终count=6
答案:C
---✨ 第10题 ✨---
题目:下面 4 个选项中,与下面 Python 代码输出结果相同的是 ( ) 。
i = 0
while i < 5:
print(i)
i += 1
A.
for i in range(5):
print(i)
B.
for i in range(1, 5):
print(i)
C.
for i in range(6):
print(i)
D.
for i in range(0, 6):
print(i)
考查知识点:循环结构 - while循环与for循环的等价转换
解析:
原代码:
- i从0开始
- 当i<5时循环
- 每次打印i,然后i加1
- 打印的i值为:0, 1, 2, 3, 4
for i in range(5): print(i) | range(5) |
for i in range(1, 5): print(i) | range(1,5) |
for i in range(6): print(i) | range(6) |
for i in range(0, 6): print(i) | range(0,6) |
答案:A
---✨ 第11题 ✨---
题目:下面 Python 代码执行后输出是( )。
n = 10
while n > 0:
n -= 1
if n % 3 == 0:
continue
if n == 5:
break
print(n)
A. 0
B. 5
C. 6
D. 7
考查知识点:循环控制 - while循环、continue和break语句
解析:
分析代码执行过程:
n初始值为10,循环条件n>0
执行过程:
1. n=10: n-=1 → n=9, n%3==0 → continue跳过print
2. n=9: n-=1 → n=8, n%3!=0, n!=5, print(8)
3. n=8: n-=1 → n=7, n%3!=0, n!=5, print(7)
4. n=7: n-=1 → n=6, n%3==0 → continue跳过print
5. n=6: n-=1 → n=5, n%3!=0, n==5 → break终止循环
打印的值:8和7,最后打印的是7(最后一次成功打印的值)
注意:题目问的是代码执行后输出是什么,代码输出的是8和7(分两行),但选项中没有这个组合。重新检查:
- 实际上,代码执行时,当n=5时遇到break,循环终止,所以只打印了8和7
- 但题目可能只问最后一个打印的值,或者是代码有误?
仔细看代码结构:print(n) 在循环内,每次符合条件的n都会被打印。已打印的值是8和7。但选项是单个数字,可能题目有歧义。
根据常见考题模式,可能是问循环结束后n的值是多少?但代码最后没有打印n。
从选项看:循环结束后n的值是5(因为n=5时break),但5没有被打印。
可能题目本意是问循环结束后n的值?但代码中没有打印n的语句。
根据代码逻辑,循环结束后n=5,但这不是输出。输出是8和7。
检查选项:A.0 B.5 C.6 D.7
如果问最后一个打印的值,是7。
答案:D
---✨ 第12题 ✨---
题目:下面 Python 代码执行后,其输出是( )。
cnt = 0
for i in range(5):
i = -i
for j in range(i, -i):
cnt += 1
print(cnt)
A. 5
B. 15
C. 20
D. 30
考查知识点:嵌套循环 - range()函数、循环变量修改
解析:
分析代码执行过程:
外层循环 i 取值:0,1,2,3,4(来自range(5))
但在循环体内,i = -i 将i取负
详细执行:
1. 外层i=0: i=-0=0, range(0,0)为空,cnt加0次
2. 外层i=1: i=-1, range(-1,1)生成-1,0,cnt加2次
3. 外层i=2: i=-2, range(-2,2)生成-2,-1,0,1,cnt加4次
4. 外层i=3: i=-3, range(-3,3)生成-3,-2,-1,0,1,2,cnt加6次
5. 外层i=4: i=-4, range(-4,4)生成-4,-3,-2,-1,0,1,2,3,cnt加8次
总次数:0+2+4+6+8 = 20
答案:C
---✨ 第13题 ✨---
题目:某学校图书馆的借阅卡号由6位数字组成。前5位是顺序编号,第6位是校验码,用于防止输错。校验码规则如下:将前5位数字相加,然后除以10的余数,就是第6位数字。如卡号123455的前5位之和为15,除以10的余数是5,故第6位为5。下面的 Python 代码用于判断卡号是否正确,横线处应填入的代码是 ( ) 。
N = int(input("请输入卡号:"))
order_num = N // 10 # 获得前5位顺序号,假设录入一定为6位正整数
check_num = N % 10 # 获得最后一位
tnt = 0 # 保存前5位之和
for i in range(5):
________________
order_num //= 10
if __________________:
print("符合校验规则")
else:
print("不符合校验规则")
A.
tnt += order_num // 10
tnt // 10 == check_num
B.
tnt += order_num % 10
tnt % 10 == check_num
C.
tnt = order_num % 10 + tnt
tnt % 10 = check_num
D.
tnt = order_num % 10
tnt // 10 == check_num
考查知识点:循环与取模运算 - 数字位分离、校验码计算
解析:
需要计算前5位数字之和,然后判断和除以10的余数是否等于校验码。
算法步骤:
1. 从order_num中逐位取出数字(从个位开始)
2. 累加到tnt中
3. 每次循环 order_num //= 10 去掉已处理的个位
4. 循环5次处理前5位
5. 判断 tnt % 10 == check_num
tnt += order_num // 10tnt // 10 == check_num | order_num // 10 |
tnt += order_num % 10tnt % 10 == check_num | order_num % 10 取个位数字,累加。tnt % 10 计算余数与校验码比较。 |
tnt = order_num % 10 + tnttnt % 10 = check_num | =,不是比较==,语法错误。 |
tnt = order_num % 10tnt // 10 == check_num |
答案:B
---✨ 第14题 ✨---
题目:下面的 Python 代码执行后其输出的数字图形是( )。
for i in range(1, 5):
for j in range(1, i + 1):
print(j, end='')
print()
A.
1
12
123
1234
B.
1
22
333
4444
C.
1
21
321
4321
D.
4
34
234
1234
考查知识点:嵌套循环 - 数字图形输出
解析:
分析代码:
- 外层循环 i 取值:1,2,3,4
- 内层循环 j 取值:range(1, i+1),即1~i
- 打印j的值,不换行
- 内层循环结束后换行
输出结果:
i=1: 打印1
i=2: 打印12
i=3: 打印123
i=4: 打印1234
答案:A
---✨ 第15题 ✨---
题目:某学校举办"校园演讲比赛",每位选手由8位评委打分(分数为0~10的整数),且每位评委必须打分。计分规则:若至少有5位评委给出大于等于6分,则成绩有效,最终得分为所有8位评委的总分;否则记为0分。以下程序通过键盘依次输入8个分数,并计算最终得分。横线处应填入( )。
total_score = 0 # 所有分数之和
high_count = 0 # ≥6分的评委数量
for i in range(8):
score = int(input("请输入评委分数:"))
____________________
if score >= 6:
________________
if high_count >= 5:
print(total_score)
else:
print(0)
A.
total_score += score
high_count += 1
B.
total_score += score
high_count += score
C.
high_count += 1
total_score += score
D.
total_score *= score
high_count *= 1
考查知识点:循环与条件判断 - 累加求和、计数
解析:
需要实现的功能:
1. 累加所有分数到total_score
2. 统计≥6分的评委数量到high_count
注意:无论分数是否≥6,都需要累加到total_score。只有当score≥6时,high_count才加1。
total_score += scorehigh_count += 1 | |
total_score += scorehigh_count += score | |
high_count += 1total_score += score | |
total_score *= scorehigh_count *= 1 |
答案:A
---✨ 第16题 ✨---
题目:小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )
A. 正确
B. 错误
考查知识点:计算机基础知识 - 操作系统概念
解析:电话手表具有多种功能(时间显示、通话、信息收发),需要管理硬件资源和协调多个任务,这通常需要操作系统的支持。现代智能手表一般都运行特定的操作系统(如Wear OS、watchOS等)。
答案:A
---✨ 第17题 ✨---
题目:Python代码print(4 ** 2 == 2 * 2 ** 2)执行后的输出是True。 ( )
A. 正确
B. 错误
考查知识点:运算符优先级 - 幂运算优先级
解析:
计算表达式:
- 4 ** 2 = 16
- 2 ** 2 = 4(先计算幂运算)
- 2 * 4 = 8(再计算乘法)
- 16 == 8 结果为False
注意:幂运算**的优先级高于乘法*。
答案:B
---✨ 第18题 ✨---
题目:下面的 Python 代码执行时将报错,因为10是整数类型,a是布尔类型。由于类型不同,不能进行加法运算。( )
a = True
print(10 + a)
A. 正确
B. 错误
考查知识点:数据类型转换 - 布尔类型与整数的运算
解析:
在Python中,布尔类型是整数类型的子类,True对应1,False对应0。布尔值可以与整数进行算术运算,运算时True转换为1,False转换为0。
10 + True = 10 + 1 = 11,不会报错。
答案:B
---✨ 第19题 ✨---
题目:下面 Python 代码执行后将输出0-3-6-9-。 ( )
for i in range(10):
if i % 3:
continue
print(i, end = "-")
A. 正确
B. 错误
考查知识点:循环控制 - continue语句、取模运算
解析:
分析代码:
- range(10) 生成0~9
- i % 3 计算i除以3的余数
- if i % 3: 当余数不为0时(非零值为True),执行continue跳过本次循环剩余部分
- 只有当i%3==0时,才执行print
i能被3整除的值:0,3,6,9
输出:0-3-6-9-
答案:A
---✨ 第20题 ✨---
题目:执行下面的 Python 代码,其语句 print(N) 将被执行 0 次或极多次(即死循环)。( )
N = input()
while N:
print(N)
A. 正确
B. 错误
考查知识点:循环控制 - while循环条件、输入类型
解析:
分析代码:
- input() 返回字符串类型
- while N: 当N非空字符串时条件为True
- 循环体内没有修改N的值,如果输入非空字符串,将无限循环
- 如果输入空字符串(直接回车),N为空字符串,条件为False,循环0次
所以print(N)可能执行0次(输入空字符串),也可能无限执行(输入非空字符串)。
答案:A
---✨ 第21题 ✨---
题目:在下面的 Python 代码中,删除 continue 不影响执行效果。( )
for i in range(10):
i += 1
continue
print(i)
A. 正确
B. 错误
考查知识点:循环控制 - continue语句的作用
解析:
分析代码:
- continue 会跳过本次循环剩余部分,直接进入下一次循环
- print(i) 在 continue 之后,永远不会执行
- 删除 continue 后,print(i) 会被执行,输出1~10
所以删除continue会影响执行效果。
答案:B
---✨ 第22题 ✨---
题目:下列 Python 代码用于计算从 1 到 N (含 N )的所有正整数中,数字 3 出现的总次数。当N = 40时,共有14 个 3 ,包括 3 、 13 、 23 、 30-39 ,其中 33 计两次,共计 14 个 3 。将代码while i != 0改为while i执行结果相同。 ( )
N = int(input("请输入正整数N:"))
cnt = 0 # 保存3的个数
for i in range(1, N + 1):
while i != 0:
if i % 10 == 3:
cnt += 1
i //= 10
print(cnt)
A. 正确
B. 错误
考查知识点:循环条件 - while循环的终止条件
解析:
分析代码:
- while i != 0: 当i不等于0时循环
- while i: 当i为非零值时循环(在Python中,0为False,非零为True)
- 对于正整数i,两种条件等价:i!=0 和 i 都是True
- 当i被除到0时,两种条件都变为False,循环终止
所以两种写法在功能上等价。
答案:A
---✨ 第23题 ✨---
题目:下面的 Python 代码执行将不会有输出,因为内层循环 j 总是 0 开始,i * j % 10 == 0将会被满足,执行 break,故而不会执行代码中的 else 子句部分。( )
for i in range(1, 10):
for j in range(i):
if i * j % 10 == 0:
break
else:
print(i*j)
A. 正确
B. 错误
考查知识点:循环控制 - for-else结构、break语句
解析:
分析代码:
- 外层循环 i 取值:1~9
- 内层循环 j 取值:0~(i-1)
- 当 i*j % 10 == 0 时执行break
- for-else结构:当循环正常完成(未遇到break)时执行else部分
检查是否总是满足 ij % 10 == 0:
当j=0时,i0=0,0%10==0,总是满足,所以总是执行break。
因此else部分永远不会执行,没有输出。
答案:A
---✨ 第24题 ✨---
题目:下列 Python 代码执行后将输出 1#4#9#16#16。( )
for i in range(1, 5):
for j in range(1, i + 1):
if i * j % 10 == 0:
break
else:
print(i * j, end = "#")
else:
print(i * j)
A. 正确
B. 错误
考查知识点:嵌套循环控制 - 多层for-else结构
解析:
分析代码执行过程:
外层循环 i 取值:1,2,3,4
内层循环 j 取值:1~(i)
外层循环正常结束,执行外层else: print(i*j),此时i=4,j=4,打印16
答案:A
---✨ 第25题 ✨---
题目:下面 Python 代码执行后输出如左图所示,将f" {i*j}"修改为f"{i*j:3}"即可实现右图输出。( )
左图输出(当前代码):
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
右图输出(期望输出):
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
代码:
for i in range(1, 10):
for j in range(1, 10):
print(f" {i*j}", end = "")
print()
A. 正确
B. 错误
考查知识点:字符串格式化 - f-string格式规范
解析:
当前代码:f" {i*j}" 在结果前加一个空格,但数字位数不同时对齐不整齐。
修改为:f"{i*j:3}" 表示输出占3个字符宽度,右对齐。这样个位数前有2个空格,十位数前有1个空格,可以对齐。
但右图显示的是每个数字占3位,右对齐,与:3的效果一致。
:3 |
答案:A
---✨ 第26题 ✨---
题目:编程题1:数数
题目描述:
对于正整数n,如果n的所有数位中包含恰好3个2,Alice会认为这个正整数是美丽的。例如,正整数222中包含3个2,所以222是美丽的;正整数221中包含2个2,所以221不是美丽的;正整数2233中包含2个2,所以2233不是美丽的。
Alice想知道正整数left到正整数right(包括left和right)中有多少美丽的正整数,你能帮她数一数吗?
输入格式:
输入共两行,第一行为正整数left,第二行为正整数right。
输出格式:
输出一行,包含一个整数ans,表示left到right中有ans个美丽数。
样例输入:
2221
2223
样例输出:
2
样例解释:
2221到2223中,2222与2223是美丽的,2221不是美丽的。
数据范围:
保证1 ≤ left ≤ right ≤ 100000。
考查知识点:循环、数字位分离、计数
解题思路:
1. 遍历从left到right的每个整数
2. 对每个整数,统计其数位中数字2出现的次数
3. 统计方法:不断除以10取个位,判断是否为2,然后去掉个位
4. 如果数字2恰好出现3次,则计数器加1
5. 输出计数器的值
参考代码:
left = int(input()) # 范围开始
right = int(input()) # 范围结束
total_count = 0 # 美丽数的总数量
for i in range(left, right + 1):
count2 = 0 # 记录i中2的数量,每次循环清零
num = i # 使用临时变量,避免修改循环变量
while num > 0:
if num % 10 == 2: # 得到个位数,并判断是否为2
count2 += 1 # 如果为2,count2累加1
num //= 10 # 去除个位数后的新数
if count2 == 3: # 判断2的数量是否为3
total_count += 1 # 2的数量为3,美丽数,累加1
print(total_count) # 输出美丽数的数量
复杂度分析:
- 时间复杂度:O(n * d),其中n = right - left + 1,d为数字的平均位数。在数据范围(1≤n≤100000)内,d最大为6,可以接受。
- 空间复杂度:O(1),只使用了常数个变量。
---✨ 第27题 ✨---
题目:编程题2:画画
题目描述:
输入一个正整数n,你需要绘制一个n行n列的正方形,绘制规则如下:
- 正方形的四个顶点使用 + 绘制;
- 除顶点外,第1行与第n行使用 - 绘制;
- 除顶点外,第1列与第n列使用 | 绘制;
- 正方形内部使用 * 绘制。
输入格式:
一行,一个正整数n。
输出格式:
输出共n行,表示对应的正方形。
样例输入:
5
样例输出:
+---+
|***|
|***|
|***|
+---+
数据范围:
保证3 ≤ n ≤ 50。
考查知识点:嵌套循环、条件判断、字符输出
解题思路:
1. 使用双重循环遍历n行n列
2. 根据位置(i,j)决定输出的字符:
- 四个顶点:(0,0), (0,n-1), (n-1,0), (n-1,n-1) 输出 '+'
- 第一行或最后一行(非顶点):输出 '-'
- 第一列或最后一列(非顶点):输出 '|'
- 其他位置:输出 '*'
3. 每行结束后换行
参考代码:
n = int(input()) # 输入n行n列的n值
for i in range(n): # 一共n行,循环n次
for j in range(n): # 一共n列,循环n次
# 判断是否在第一列或最后一列
if j == 0 or j == n - 1:
# 判断是否在第一行或最后一行(顶点)
if i == 0 or i == n - 1:
print('+', end='')
else:
print('|', end='')
else: # 不是第一列也不是最后一列
# 判断是否在第一行或最后一行
if i == 0 or i == n - 1:
print('-', end='')
else:
print('*', end='')
print() # 一行结束,换行
复杂度分析:
- 时间复杂度:O(n^2),需要遍历n行n列。
- 空间复杂度:O(1),只使用了常数个变量。
注意事项:
1. 注意边界条件的判断顺序,先判断列再判断行,确保顶点正确处理
2. 使用end=''避免自动换行,每行结束后手动print()换行
3. 题目保证n≥3,所以内部至少有一行一列需要填充'*'
总结:
本次GESP Python二级认证试题涵盖了计算机基础知识、Python基础语法、流程控制、循环结构、条件判断、数据类型、运算符优先级、字符串格式化等多个知识点。编程题考查了实际问题解决能力,需要考生熟练掌握循环嵌套、条件判断和字符输出等基本编程技能。通过本次试题解析,考生可以更好地理解GESP二级考试的考点和难度,为备考提供参考。