跳转至

Python 模拟考试 2 — 解析

📝 一、单选题(每题2分,共40分)

第1题

Python中,以下哪个不是合法的变量名?()

选项 内容
A _name
B my_var
C 2nd_value
D StudentAge

答案

C

📖 解析:

  • A 合法:下划线开头的变量名合法,常用于表示私有变量

  • B 合法:字母、数字、下划线组合合法

  • C 不合法:变量名不能以数字开头2nd_value 以数字2开头,语法错误

  • D 合法:大驼峰命名法完全合法

🔑 知识点:Python标识符规则

  1. 只能包含字母、数字、下划线

  2. 不能以数字开头

  3. 不能使用关键字

  4. 区分大小写

📌 记忆要点

数字不能开头,关键字不能当变量名


第2题

下列关于Python3中字符串的说法,正确的是()。

选项 内容
A 字符串属于可变数据类型
B 单引号和双引号定义的字符串没有区别
C 三引号只能用于定义多行注释
D 字符串可以用del删除其中某个字符

答案

B

📖 解析:

  • A 错误:字符串是不可变类型,任何\"修改\"操作都创建新字符串对象

  • B 正确:单引号'hello'和双引号"hello"在Python中完全等价

  • C 错误:三引号可定义多行字符串,也可做文档字符串(docstring),不只是注释

  • D 错误:字符串不可变,del只能删除整个变量,不能删除某个字符

🔑 知识点:字符串特性

  • 不可变:任何\"修改\"操作都创建新字符串

  • 引号等价:'a' == "a"

  • 三引号:多行字符串 / 文档字符串 / 多行注释


第3题

表达式 len("Hello世界") 的结果是()。

选项 内容
A 5
B 6
C 7
D 8

答案

C

📖 解析:

  • Python3中字符串以Unicode编码,len()统计的是字符个数,不是字节数

  • "Hello世界" = 5个英文字母 + 2个中文字符 = 7个字符

  • 如果用utf-8编码的字节数则是 5+6=11字节,但len()不统计字节

🔑 知识点:len()函数与字符串编码

  • len() 统计字符数,不是字节数

  • Python3中一个中文字符=1个字符长度

  • 区分 len(s)len(s.encode('utf-8'))


第4题

下列关于Python列表的说法,错误的是()。

选项 内容
A 列表中的元素可以是不同类型
B 列表可以使用负数索引访问元素
C 列表是不可变数据类型
D 列表可以使用append()方法添加元素

答案

C

📖 解析:

  • A 正确:列表是异构容器,元素可以是任意类型

  • B 正确:负数索引从末尾开始,lst[-1]是最后一个元素

  • C 错误:列表是可变数据类型,可以增删改元素

  • D 正确append()是列表的常用方法,在末尾添加元素

🔑 知识点:可变与不可变类型

可变 不可变
list int/float/str
dict tuple
set frozenset

第5题

以下关于函数返回值的说法,正确的是()。

选项 内容
A 函数必须有return语句
B 没有return语句的函数返回None
C 函数只能返回一个值
D return语句只能出现在函数末尾

答案

B

📖 解析:

  • A 错误:函数可以没有return语句

  • B 正确:没有return或return后无值,函数默认返回None

  • C 错误return a, b 返回元组,实际上可以返回多个值

  • D 错误:return可出现在函数任何位置,执行到即返回

📌 记忆要点

无return → 返回None;return可多处出现


第6题

执行下列代码后,输出结果是()。

Python
1
2
3
def func(a, b=3, c=5):
    return a + b + c
print(func(1, 2))
选项 内容
A 6
B 8
C 9
D 报错

答案

B

📖 解析:

  • func(1, 2) → a=1, b=2(覆盖默认值3), c=5(使用默认值)

  • 计算:1 + 2 + 5 = 8

  • 默认参数在被调用时若提供了新值则覆盖

🔑 知识点:默认参数

  • 定义时赋默认值:def f(a, b=3, c=5)

  • 调用时若省略则用默认值,否则覆盖

  • 默认参数必须放在非默认参数之后


第7题

关于Python中全局变量和局部变量,下列说法错误的是()。

选项 内容
A 在函数内部定义的变量是局部变量
B 在函数外部定义的变量是全局变量
C 函数内部可以直接修改全局变量的值
D 使用global关键字可以在函数内声明全局变量

答案

C

📖 解析:

  • A 正确:函数内部定义的变量作用域限于函数内部

  • B 正确:函数外定义的变量是全局变量

  • C 错误:函数内部不能直接修改全局变量,必须用global声明后才能修改

  • D 正确global x 声明后可以在函数内修改全局变量x

🔑 知识点:作用域规则

  • 函数内可读取全局变量,但修改需要global声明

  • 不用global时,赋值操作会创建同名局部变量


第8题

以下代码的运行结果是()。

Python
s = "abcdef"
print(s[1:4])
选项 内容
A abc
B bcd
C bcde
D abcd

答案

B

📖 解析:

  • 切片[1:4]表示从索引1开始,到索引4之前结束(左闭右开)

  • s[1]=\'b\', s[2]=\'c\', s[3]=\'d\' → 结果为"bcd"

🔑 知识点:字符串切片

  • s[start:end] → 左闭右开[start, end)

  • s[start:end:step] → 带步长的切片

  • 负数索引:s[-1]表示最后一个字符


第9题

下列表达式中,结果为True的是()。

选项 内容
A 3 \> 2 \> 1
B 3 > 2 > 2
C 1 and 0
D not True or False

答案

A

📖 解析:

  • A 正确:Python支持链式比较,3 > 2 > 1 等价于 (3>2) and (2>1)True and TrueTrue

  • B 错误3 > 2 > 2(3>2) and (2>2)True and FalseFalse

  • C 错误1 and 00(and返回第一个为假的值,或最后一个值)

  • D 错误not True or FalseFalse or FalseFalse

🔑 知识点:链式比较和逻辑运算

  • Python链式比较:a > b > c(a>b) and (b>c)

  • and:全真返回最后一个真值,遇到假则返回该假值

  • or:遇到真则返回该真值,全假返回最后一个假值


第10题

下列关于Python字典的说法,错误的是()。

选项 内容
A 字典中的键必须是唯一的
B 字典中的值可以是任意类型
C 字典是有序的数据结构(Python 3.7+)
D 字典的键可以是列表

答案

D

📖 解析:

  • A 正确:字典键必须唯一,重复键会覆盖旧值

  • B 正确:值可以是任意类型,包括列表、字典等

  • C 正确:Python 3.7+字典保证插入顺序

  • D 错误:字典的键必须是不可变类型,列表是可变的,不能做键

🔑 知识点:字典键的类型要求

  • 可做键:int/float/str/tuple/frozenset(不可变类型)

  • 不可做键:list/dict/set(可变类型)

  • 原因:键需要能计算hash值,可变对象无法hash


第11题

表达式 type({}) 的返回值是()。

选项 内容
A <class 'set'>
B \<class \'dict\'\>
C <class 'list'>
D <class 'tuple'>

答案

B

📖 解析:

  • {} 在Python中表示空字典,不是空集合

  • 空集合必须用 set() 创建

  • type({})<class 'dict'>

  • type(set())<class 'set'>

📌 记忆要点

{} = 空字典,set() = 空集合


第12题

以下代码的运行结果是()。

Python
1
2
3
4
x = [1, 2, 3]
y = x
y.append(4)
print(len(x))
选项 内容
A 3
B 4
C 报错
D 不确定

答案

B

📖 解析:

  • y = x引用赋值,y和x指向同一个列表对象

  • y.append(4) 修改的是这个共享对象

  • 因此x也变为[1,2,3,4]len(x) = 4

🔑 知识点:引用与拷贝

  • y = x → 浅拷贝(引用),修改y影响x

  • y = x.copy()y = x[:] → 创建新列表,修改y不影响x

  • y = copy.deepcopy(x) → 深拷贝,递归复制嵌套对象


第13题

下列哪个不是Python的关键字?()

选项 内容
A elif
B pass
C main
D del

答案

C

📖 解析:

  • elif:else if的缩写,条件语句关键字

  • pass:空操作占位符关键字

  • main不是关键字,Python没有main关键字(C语言才有)

  • del:删除变量/元素的关键字

📌 记忆要点

Python用if __name__ == '__main__':而非main关键字


第14题

以下代码的运行结果是()。

Python
a = [1, 2, 3, 4, 5]
print(a[::2])
选项 内容
A [1, 2, 3]
B [1, 3, 5]
C [2, 4]
D [5, 3, 1]

答案

B

📖 解析:

  • a[::2] 等价于 a[0:len(a):2]

  • 从索引0开始,步长为2:取索引0→1, 2→3, 4→5

  • 结果:[1, 3, 5]

🔑 知识点:切片步长

  • s[start:end:step] 完整语法

  • ::2 → 从头到尾,步长2(隔一个取一个)

  • [::-1] → 反转序列


第15题

表达式 'Hello'.replace('l', 'L', 1) 的结果是()。

选项 内容
A HeLLo
B HELLO
C HeLlo
D hello

答案

C

📖 解析:

  • replace(old, new, count) 中count指定替换次数

  • 'Hello'.replace('l', 'L', 1) → 只替换第1个\'l\'为\'L\'

  • H-e-l-l-o → H-e-L-l-o → "HeLlo"

🔑 知识点:replace()方法

  • 不指定count:替换所有匹配

  • 指定count:只替换前count个

  • 返回新字符串,原字符串不变(字符串不可变)


第16题

以下关于Python异常处理的说法,正确的是()。

选项 内容
A try语句块可以单独使用
B except子句只能有一个
C else子句在发生异常时执行
D finally子句无论是否发生异常都会执行

答案

D

📖 解析:

  • A 错误try必须搭配exceptfinally,不能单独使用

  • B 错误:可以有多个except子句,分别捕获不同异常

  • C 错误else子句在没有发生异常时执行

  • D 正确finally无论是否异常都会执行,常用于资源释放

🔑 知识点:异常处理结构

子句 执行时机
try 始终执行
except 发生异常时
else 无异常时
finally 始终执行

第17题

表达式 list(range(1, 10, 3)) 的结果是()。

选项 内容
A [1, 4, 7]
B [1, 4, 7, 10]
C [3, 6, 9]
D [1, 3, 6, 9]

答案

A

📖 解析:

  • range(1, 10, 3) → 起点1,终点10(不含),步长3

  • 生成序列:1, 4, 7(下一个10 ≥ 10,停止)

  • list() 转换为列表

🔑 知识点:range()函数

  • range(stop) → 0到stop-1,步长1

  • range(start, stop) → start到stop-1,步长1

  • range(start, stop, step) → 自定义步长

  • range对象是惰性的,不占大量内存


第18题

关于Python中的import语句,下列说法错误的是()。

选项 内容
A import math 导入整个math模块
B from math import sqrt 只导入sqrt函数
C import math as m 给math模块取别名m
D from math import * 只导入__all__列表中指定的内容

答案

D

📖 解析:

  • A 正确import math 导入模块的所有内容,通过math.xxx访问

  • B 正确from math import sqrt 只导入sqrt,可直接使用

  • C 正确as给模块取别名,简化调用

  • D 错误from math import * 导入模块中所有公开名称,但如果模块定义了__all__则按__all__导入;若没有__all__则导入所有不以_开头的名称。说\"只\"导入__all__不够准确

📌 记忆要点

import * 不推荐使用,容易命名冲突


第19题

以下代码的运行结果是()。

Python
1
2
3
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print(s1 & s2)
选项 内容
A {1, 2, 3, 4}
B {2, 3}
C {1, 4}
D 报错

答案

B

📖 解析:

  • & 是集合的交集运算符

  • s1 \& s2 → 两个集合的公共元素 → {2, 3}

🔑 知识点:集合运算

运算符 含义 方法
& 交集 intersection()
| 并集 union()
- 差集 difference()
^ 对称差集 symmetric_difference()

第20题

执行 print("abc123".isalnum()) 的结果是()。

选项 内容
A True
B False
C abc123
D 报错

答案

A

📖 解析:

  • isalnum() 判断字符串是否全部由字母或数字组成

  • "abc123" 全部为字母+数字 → True

  • 注意:"abc 123".isalnum()False(含空格)

  • 类似方法:isalpha()(全字母)、isdigit()(全数字)

📌 记忆要点

isalnum() = 全是字母或数字,空格/符号都返回False


✅ 二、判断题(每题1分,共14分)

第1题

Python中,列表和元组的主要区别是列表可变而元组不可变。

答案

✅ 正确

解析: 列表(list)是可变序列,可以增删改元素;元组(tuple)是不可变序列,创建后不能修改。这是两者最核心的区别。


第2题

Python中,break语句只能用于循环语句中,不能用于其他地方。

答案

✅ 正确

解析: break只能用于forwhile循环中,用于提前终止循环。如果在循环外使用break会报SyntaxError


第3题

在Python中,3 + 4j是合法的复数表示。

答案

✅ 正确

解析: Python支持复数类型,3 + 4j中3是实部,4j是虚部。jJ表示虚数单位。可以用type(3+4j)验证为<class 'complex'>


第4题

print()函数的end参数默认值是换行符\n

答案

✅ 正确

解析: print()默认end='\n',即每次输出后自动换行。可以通过end=''end=' '等修改。


第5题

字典的items()方法返回的是一个列表。

答案

❌ 错误

解析: Python3中items()返回的是视图对象dict_items),不是列表。视图对象是动态的,字典变化时视图也变化。可以用list(d.items())转为列表。


第6题

continue语句的作用是跳出整个循环。

答案

❌ 错误

解析: continue的作用是跳过当前这一次循环的剩余语句,直接进入下一次循环。跳出整个循环用的是break


第7题

Python中的pass语句什么都不做,只是一个占位符。

答案

✅ 正确

解析: pass是空操作占位语句,用在语法上需要语句但逻辑上暂不需要操作的地方,如空函数体、空类定义等。


第8题

range(0)range(0, 0) 都会生成空序列。

答案

✅ 正确

解析: range(0) → 从0到-1(不可能),空序列。range(0, 0) → 从0到-1(不可能),空序列。两者等价。


第9题

字符串方法find()如果找不到子串则返回-1。

答案

✅ 正确

解析: find()找不到返回-1,找到返回起始索引。注意:index()找不到则抛出ValueError异常,这是两者的区别。


第10题

Python中,== 运算符比较的是两个对象的内存地址。

答案

❌ 错误

解析: == 比较的是值是否相等is 才比较**内存地址(标识)**是否相同。例如 [1,2] == [1,2] → True,但 [1,2] is [1,2] → False(两个不同对象)。


第11题

函数的默认参数值只在函数定义时计算一次。

答案

✅ 正确

解析: 默认参数值在函数定义时计算并存储,不在每次调用时重新计算。这导致可变默认参数(如def f(a=[]))会\"记忆\"上次的修改,是一个常见陷阱。


第12题

在Python中,00.0""[](){} 的布尔值都是False

答案

❌ 错误

解析: 00.0""[]() 的布尔值是False,但{}空字典,布尔值也是False。所以看似全对……但注意:空集合set()也是False。而None也是False。此题12个值全部为False,答案应为✅正确。

修正:此题答案为✅ 正确,上述所有值的bool()结果都是False


第13题

使用with open()语句打开文件后,不需要手动调用close()方法。

答案

✅ 正确

解析: with语句是上下文管理器,退出with块时自动调用close(),即使发生异常也会关闭文件。这是推荐的文件操作方式。


第14题

sorted()函数会对原列表进行排序并返回None。

答案

❌ 错误

解析: sorted()返回一个新的排序列表,不修改原列表。而list.sort()是对原列表原地排序,返回None


✏️ 三、程序填空题(每题10分,共30分)

第1题:冒泡排序

题目: 使用冒泡排序对列表进行升序排列。

Python
lst = [64, 34, 25, 12, 22, 11, 90]
n = len(lst)
for i in range(n):
    for j in range(0, n - i - 1):
        #**********begin1**********
        _______
        #**********end1**********
            #**********begin2**********
            _______
            #**********end2**********
print("排序后:", lst)

✅ 答案

  • begin1: if lst[j] > lst[j + 1]:

  • begin2: lst[j], lst[j + 1] = lst[j + 1], lst[j]

📖 解析:

  • 冒泡排序核心:相邻元素比较,如果前面的比后面大就交换

  • lst[j] > lst[j+1] 判断是否需要交换(升序)

  • Python支持元组解包交换:a, b = b, a

🔑 知识点:冒泡排序

  • 外层循环控制轮数,内层循环控制每轮比较

  • 每轮将最大的元素\"冒泡\"到末尾

  • 时间复杂度:O\(n²\)


第2题:统计字符

题目: 统计字符串中字母、数字和其他字符的个数。

Python
s = input("请输入字符串:")
letters = 0
digits = 0
others = 0
for ch in s:
    #**********begin1**********
    _______
    #**********end1**********
        letters += 1
    #**********begin2**********
    _______
    #**********end2**********
        digits += 1
    else:
        others += 1
print("字母:%d, 数字:%d, 其他:%d" % (letters, digits, others))

✅ 答案

  • begin1: if ch.isalpha():

  • begin2: elif ch.isdigit():

📖 解析:

  • isalpha() 判断字符是否为字母

  • isdigit() 判断字符是否为数字

  • 都不满足则归入\"其他\"

🔑 知识点:字符串判断方法

方法 功能
isalpha() 是否全为字母
isdigit() 是否全为数字
isalnum() 是否全为字母或数字
isspace() 是否全为空白字符
isupper() 是否全为大写
islower() 是否全为小写

第3题:斐波那契数列

题目: 输出斐波那契数列的前n项。

Python
n = int(input("请输入项数:"))
a, b = 0, 1
count = 0
#**********begin1**********
_______
#**********end1**********
    print(a, end=" ")
    #**********begin2**********
    _______
    #**********end2**********
    count += 1

✅ 答案

  • begin1: while count < n:

  • begin2: a, b = b, a + b

📖 解析:

  • while count < n 控制输出n项

  • a, b = b, a + b 利用元组解包同时更新a和b

  • 斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, ...

🔑 知识点:斐波那契数列

  • 定义:F\(0\)=0, F\(1\)=1, F\(n\)=F\(n\-1\)+F\(n\-2\)

  • 迭代法优于递归法(避免重复计算)

  • Python元组解包实现简洁的变量交换


🔧 四、程序改错题(每题10分,共40分)

第1题:回文判断

题目: 判断输入的字符串是否为回文串。

Python
def is_palindrome(s):
    left = 0
    right = len(s)
    #**********begin1**********
    while left < right:        # ❌ 错误1
    #**********end1**********
        if s[left] != s[right]:
            #**********begin2**********
            return "是回文"    # ❌ 错误2
            #**********end2**********
        left += 1
        right -= 1
    #**********begin3**********
    return "不是回文"          # ❌ 错误3
    #**********end3***********

s = input("请输入字符串:")
print(is_palindrome(s))

✅ 答案

  • 错误1: right = len(s)right = len(s) - 1

  • 错误2: return "是回文"return "不是回文"

  • 错误3: return "不是回文"return "是回文"

📖 解析:

  • 错误1len(s) 是字符串长度,但最大索引是 len(s)-1,所以right应初始化为 len(s)-1

  • 错误2:当 s[left] != s[right] 时说明不匹配,应返回\"不是回文\"

  • 错误3:循环正常结束说明所有字符都匹配,应返回\"是回文\"

🔑 知识点:回文判断

  • 回文:正读反读相同,如\"abcba\"

  • 双指针法:左指针从0开始,右指针从末尾开始

  • 另一种方法:s == s[::-1]


第2题:列表去重

题目: 对列表进行去重并保持原顺序。

Python
def remove_duplicates(lst):
    #**********begin1**********
    result = {}                # ❌ 错误1
    #**********end1**********
    for item in lst:
        #**********begin2**********
        if item not in result: # ❌ 错误2(此处逻辑可保留,但需配合修正1)
        #**********end2**********
            result.append(item)
    return result

original = [3, 1, 2, 3, 2, 1, 4, 5, 4]
#**********begin3**********
print(remove_duplicates(original))  # ❌ 错误3:输出格式
#**********end3***********
# 期望输出: 去重后: [3, 1, 2, 4, 5]

✅ 答案

  • 错误1: result = {}result = []

  • 错误2: if item not in result: → 保持不变(配合列表使用正确)

  • 错误3: print(remove_duplicates(original))print("去重后:", remove_duplicates(original))

📖 解析:

  • 错误1{} 创建的是字典,应用[]创建列表

  • 错误2not in 对列表和字典都可用,配合修正1后逻辑正确

  • 错误3:题目要求输出格式为\"去重后: [3, 1, 2, 4, 5]\"

🔑 知识点:去重方法对比

方法 保持顺序 示例
列表遍历 见本题
list(set(lst)) 简单但丢失顺序
dict.fromkeys(lst) Python3.7+字典保序

第3题:温度转换

题目: 将华氏温度转换为摄氏温度(公式:C = \(F \- 32\) / 1.8)。

Python
def f2c(f):
    #**********begin1**********
    c = f - 32 / 1.8           # ❌ 错误1:运算优先级
    #**********end1**********
    return c

#**********begin2**********
f = input("输入华氏温度:")    # ❌ 错误2:未转换类型
#**********end2***********
celsius = f2c(f)
#**********begin3**********
print("摄氏温度为:" + celsius) # ❌ 错误3:字符串拼接
#**********end3***********

✅ 答案

  • 错误1: c = f - 32 / 1.8c = (f - 32) / 1.8

  • 错误2: f = input("输入华氏温度:")f = float(input("输入华氏温度:"))

  • 错误3: print("摄氏温度为:" + celsius)print("摄氏温度为:" + str(celsius))print("摄氏温度为:%.1f" % celsius)

📖 解析:

  • 错误132 / 1.8 会先计算(除法优先级高于减法),导致计算错误,需要加括号

  • 错误2input() 返回字符串,必须转换为数值类型

  • 错误3celsius 是浮点数,不能直接用+拼接字符串

🔑 知识点:运算优先级 \& 类型转换

  • 算术优先级:() \> ** \> * / \> + -

  • input() 始终返回字符串,需用 int()float() 转换

  • 字符串拼接用 str() 转换,或用 f-string / % 格式化


第4题:学生成绩管理

题目: 定义学生类,包含姓名和成绩,并计算平均成绩。

Python
class Student:
    #**********begin1**********
    def _init_(self, name, score):  # ❌ 错误1
    #**********end1**********
        self.name = name
        self.score = score

    def get_info(self):
        return f"{self.name}: {self.score}"

students = []
#**********begin2**********
students.append(Student("张三", 85)  # ❌ 错误2
#**********end2***********
students.append(Student("李四", 92))
students.append(Student("王五", 78))

total = 0
for s in students:
    #**********begin3**********
    total += Student.score          # ❌ 错误3
    #**********end3***********

avg = total / len(students)
print(f"平均成绩: {avg}")

✅ 答案

  • 错误1: def _init_def __init__ (双下划线)

  • 错误2: Student("张三", 85) → 末尾缺少右括号 )

  • 错误3: Student.scores.score (用实例名而非类名)

📖 解析:

  • 错误1:构造方法名必须是 __init__(双下划线),_init_(单下划线)不是特殊方法

  • 错误2:括号不匹配,append(Student( 嵌套后缺少一个 )

  • 错误3Student.score 访问的是类属性,应使用实例 s.score

🔑 知识点:类与对象

  • __init__ 是双下划线,不是单下划线

  • 访问实例属性用 实例名.属性名

  • 类名访问的是类属性(共享),实例名访问的是实例属性(独有)


💻 五、程序设计题(每题13分,共26分)

第1题:猜数字游戏

题目: 编写程序实现猜数字游戏:

  1. 程序随机生成1~100之间的整数

  2. 用户输入猜测的数字

  3. 如果猜大了提示\"太大了\",猜小了提示\"太小了\",猜对了提示\"恭喜你猜对了!\"

  4. 显示用户总共猜了几次

  5. 输入0可以提前退出游戏

参考答案

Python
    import random

    def guess_number():
        target = random.randint(1, 100)
        count = 0

        while True:
            guess = int(input("请输入你猜的数字(1-100, 输入0退出):"))

            if guess == 0:
                print(f"游戏退出!答案是{target},你猜了{count}次")
                break

            count += 1

            if guess > target:
                print("太大了!")
            elif guess < target:
                print("太小了!")
            else:
                print(f"恭喜你猜对了!你总共猜了{count}次")
                break

    guess_number()

📖 解析:

  • random.randint(1, 100) 生成1~100的随机整数

  • while True 实现循环猜测

  • count 计数器记录猜测次数

  • break 退出循环

🔑 知识点

  • random.randint(a, b) 返回[a, b]范围内的随机整数

  • while True + break 是常见的循环控制模式

  • 输入验证:int() 转换输入


第2题:学生成绩统计

题目: 编写程序实现以下功能:

  1. 输入若干个学生的姓名和成绩,存入字典(姓名为键,成绩为值)

  2. 输入空行结束输入

  3. 计算并输出:平均成绩、最高分及对应学生姓名、最低分及对应学生姓名

  4. 输出成绩从高到低排序的结果

示例输出:

Python
1
2
3
4
平均成绩: 82.5
最高分: 李四 95
最低分: 王五 67
成绩排序: 李四:95, 张三:85, 王五:67

参考答案

Python
    def score_statistics():
        scores = {}

        while True:
            line = input("请输入姓名和成绩(空行结束):")
            if line == "":
                break
            parts = line.split()
            name = parts[0]
            score = int(parts[1])
            scores[name] = score

        if not scores:
            print("未输入数据")
            return

        # 计算平均成绩
        total = sum(scores.values())
        avg = total / len(scores)

        # 找最高分和最低分
        max_name = max(scores, key=scores.get)
        min_name = min(scores, key=scores.get)

        # 按成绩从高到低排序
        sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)

        # 输出结果
        print(f"平均成绩: {avg}")
        print(f"最高分: {max_name} {scores[max_name]}")
        print(f"最低分: {min_name} {scores[min_name]}")

        result = ", ".join(f"{name}:{score}" for name, score in sorted_scores)
        print(f"成绩排序: {result}")

    score_statistics()

📖 解析:

  • 字典存储姓名-成绩对,键唯一保证每人一条记录

  • max(d, key=d.get) 按值找最大键,返回姓名

  • sorted(d.items(), key=lambda x: x[1], reverse=True) 按值降序排序

  • join() 格式化输出排序结果

🔑 知识点

  • max()/min()key 参数指定比较规则

  • sorted()key 参数用lambda自定义排序

  • dict.items() 返回键值对视图,可迭代

  • sum() 快速求和,len() 计数


知识点覆盖总结

题型 知识点
单选1-5 变量命名、字符串特性、len()、列表可变性、函数返回值
单选6-10 默认参数、作用域、切片、链式比较、字典键类型
单选11-15 type()、引用拷贝、关键字、切片步长、replace()
单选16-20 异常处理、range()、import、集合运算、字符串判断方法
判断1-7 列表元组区别、break、复数、print参数、items()、continue、pass
判断8-14 range空序列、find()、==vs is、默认参数、布尔值、with、sorted()
填空1-3 冒泡排序、字符分类、斐波那契
改错1-4 回文判断、列表去重、温度转换、类定义
编程1-2 random模块猜数字、字典成绩统计