目录
在 Python 编程学习的道路上,实战练习是巩固知识、提升技能的关键环节。本文将深入分析一系列涵盖基础数据结构与逻辑操作的 Python 练习题,帮助大家更好地理解和掌握 Python 编程的核心要点。
一、数字组合问题
题目描述
有 1,2,3,4,5,6,7,8 八个数字,能组成多少个互不相同且无重复数字的两位数?
代码实现
li = [1,2,3,4,5,6,7,8]
li2 = []
for i in range(1,9):
for j in range(1,9):
if i != j:
li2.append((i,j))
print(len(li2))
思路讲解
这段代码使用了嵌套循环来遍历数字。外层循环控制十位数字的选择(从 1 到 8),内层循环控制个位数字的选择(同样从 1 到 8)。通过判断i != j
来确保组成的两位数数字不重复。每次满足条件时,将这两个数字组成的元组(i, j)
添加到列表li2
中。最后,通过len(li2)
输出满足条件的两位数的数量。
二、字典操作综合练习
题目描述
给定字典dic = {'python': 95, 'java': 99, 'c': 100}
,完成以下操作:
- 求字典长度
- 修改 'java' 这个 key 对应的 value 值为 98
- 删除 c 这个 key
- 增加一个 key-value 对,key 值为 php, value 是 90
- 再次增加一个 key-value 对,key 值为 php, value 是 90(此步可检验重复 key 的处理)
- 获取所有的 key 值,存储在列表里
- 获取所有的 value 值,存储在列表里
- 判断 javascript 是否在字典中
- 获得字典里所有 value 的和
- 获取字典里最大的 value
- 获取字典里最小的 value
- 字典
dic1 = {'php': 97}
,将dic1
的数据更新到dic
中
代码实现
dic = {'python':95,'java':99,'c':100}
#字典长度
print(len(dic))
#请修改'java' 这个key对应的value值为98
dic['java'] = 98
print(dic)
#删除c这个key
dic.pop('c')
print(dic)
#增加一个key-value对,key值为 php, value是90
dic['php'] = 90
print(dic)
#获取所有的key值,存储在列表里
li_key = [key for key in dic.keys()]
print(li_key)
#获取所有的value值,存储在列表里
li_value = [value for value in dic.values()]
print(li_value)
#判断javascript是否在字典中
li_text=[key for key in dic.keys()]
if 'javascript' in li_text:
print(True)
else:
print(False)
#获得字典里所有value的和
li_sum = [value for value in dic.values()]
print(sum(li_sum))
#获取字典里最大的value
print(max(li_sum))
#获取字典里最小的value
print(min(li_sum))
#字典dic1 = {'php': 97},将dic1的数据更新到dic中
dic.update({'php':97})
print(dic)
思路讲解
- 字典长度:使用内置函数
len()
获取字典中键值对的数量。 - 修改值:通过直接赋值
dic['java'] = 98
来修改指定键'java'
对应的值。 - 删除键:使用字典的
pop()
方法删除指定的键'c'
及其对应的值。 - 增加键值对:通过直接赋值
dic['php'] = 90
向字典中添加新的键值对。由于字典中键是唯一的,再次添加相同键'php'
时,新值会覆盖旧值。 - 获取所有键:使用列表推导式
[key for key in dic.keys()]
将字典中的所有键提取出来并存储在列表li_key
中。 - 获取所有值:类似地,使用列表推导式
[value for value in dic.values()]
将字典中的所有值提取出来并存储在列表li_value
中。 - 判断键是否存在:先通过列表推导式获取所有键,再使用
in
关键字判断'javascript'
是否在键列表中。实际上,可以直接使用'javascript' in dic
来更简洁地判断。 - 计算值的和:先获取所有值的列表
li_sum
,再使用内置函数sum()
计算列表中所有元素的和。 - 获取最大和最小值:利用内置函数
max()
和min()
分别获取值列表li_sum
中的最大值和最小值。 - 更新字典:使用字典的
update()
方法将字典dic1
中的键值对更新到字典dic
中。如果有相同的键,dic1
中的值会覆盖dic
中的值。
三、学生名字录入与输出
题目描述
录入学生的名字,如果名字存在则回复人名已存在,无法录入,输入空字符串,则逆序输出已录入的名字列表。
代码实现
name = ["张三", "李四", "王五"]
add = input("请输入你要录入的名字:")
if len(add) == 0:
print(name[::-1])
elif add in name:
print("人名已存在,无法录入")
else:
name.append(add)
print("录入成功,当前列表为", name)
思路讲解
首先定义了一个已有的学生名字列表name
。然后通过input()
函数获取用户输入的名字add
。通过判断输入字符串的长度是否为 0 来决定是否逆序输出列表;如果输入名字在已有列表中,则提示名字已存在;否则将新名字添加到列表中并输出更新后的列表。
四、筛选列表元素
题目描述
创建一个包含 50 个数的列表,将列表中大于 30 的数据构成一个新的列表。
代码实现
li_number = [i for i in range(1,51)]
li_bigger = []
for number in li_number:
if number > 30:
li_bigger.append(number)
print(li_bigger)
思路讲解
首先使用列表推导式创建了一个包含 1 到 50 的数字列表li_number
。然后通过遍历li_number
,使用条件判断if number > 30
筛选出大于 30 的数字,并添加到新列表li_bigger
中。最后输出新列表。
五、统计单词重复次数
题目描述
用户输入一个英文句子,此处认为单词之间以空格为分隔符,并且不包含,和。打印出每个单词及重复次数。
代码实现
word = list(input("请输入一个英文句子:").split(" "))
answer_group = []
for i in word:
print(i, word.count(i))
思路讲解
首先使用input()
获取用户输入的句子,通过split(" ")
将句子按空格分割成单词列表word
。然后遍历单词列表,对于每个单词i
,使用word.count(i)
统计其在列表中出现的次数并打印出来。
六、数字列表求和
题目描述
已知一个数字列表,求所有元素和。例如:sum = [59, 54, 89, 45, 78, 45, 12, 96, 789, 45, 69]
代码实现
sum_list = [59, 54, 89, 45, 78, 45, 12, 96, 789, 45, 69]
var = 0
for i in sum_list:
var += i
print(var)
思路讲解
定义一个数字列表sum_list
,初始化一个变量var
为 0 用于累加。通过遍历列表,将每个元素累加到var
中,最后输出累加结果。
七、计算节目平均分数
题目描述
用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)。例如:scores = [9.8, 9.5, 9.9, 9.3, 8.9, 9.5, 9.6, 9.3, 9.4, 9.6]
代码实现
scores = [9.8, 9.5, 9.9, 9.3, 8.9, 9.5, 9.6, 9.3, 9.4, 9.6]
scores_li = scores.copy()
var = 0
for i in scores_li:
if i == max(scores):
scores_li.remove(i)
if i == min(scores):
scores_li.remove(i)
var += i
print(var / len(scores_li))
思路讲解
首先复制分数列表scores
到scores_li
,避免修改原始列表。通过遍历复制的列表,使用if
条件判断找到最高分和最低分并从列表中移除。同时,将剩余分数累加到变量var
中。最后,计算剩余分数的平均值并输出。
八、获取两个列表的公共元素
题目描述
有两个列表 A 和 B,使用列表 C 来获取两个列表中公共的元素。例如:A = [1, 'a', 4, 90]
,B = ['a', 8, 'j', 1]
--> C = [1, 'a']
代码实现
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
#法一
for i in A:
if i in B:
C.append(i)
print(C)
#法二
for i in A:
for j in B:
if i == j:
C.append(i)
print(C)
#法三
D = [i for i in A if i in B]
print(D)
思路讲解
- 方法一:遍历列表
A
,对于每个元素i
,判断其是否在列表B
中,如果在则添加到列表C
中。 - 方法二:使用两层嵌套循环,外层循环遍历列表
A
,内层循环遍历列表B
,当找到相等的元素时添加到列表C
中。这种方法效率较低,因为每个元素要被比较多次。 - 方法三:使用列表推导式,一行代码实现筛选出列表
A
中同时也在列表B
中的元素,并存储在新列表D
中。
九、输出闰年列表
题目描述
将 1970 - 2050 年所有的闰年输出。
代码实现
#法一
li3 = []
for i in range(1970,2051):
if i%4 == 0 and i%100 != 0:
li3.append(i)
print(li3, len(li3))
#法二
li4 = [i for i in range(1970,2051) if i%4 == 0 and i%100 != 0]
print(li4)
思路讲解
- 方法一:通过遍历 1970 到 2050 的所有年份,使用条件判断
if i%4 == 0 and i%100 != 0
来判断是否为闰年(能被 4 整除且不能被 100 整除的年份为闰年)。如果是闰年,则将其添加到列表li3
中,最后输出列表及其长度。 - 方法二:使用列表推导式,一行代码实现筛选出 1970 到 2050 之间的闰年并存储在列表
li4
中,然后输出列表。
通过对这些基础编程练习的深入分析,我们不仅掌握了 Python 中列表、字典等数据结构的操作,还学会了如何优化代码以提高效率。希望大家在今后的编程学习中,能够不断实践,将这些知识运用到实际项目中,提升自己的编程能力。