目录
基本操作
题目一
1.考生文件夹下存在一个文件PY101.py,请写代码替换横线,不修改其他代码,实现以下功能:键盘输入正整数n,按要求把输
出到屏幕,格式要求:宽度为25个字符,等号字符(=)填充,右对齐,带千位分隔符。如果输入正整数超过25位,则按照真实长度输
出。
例如:键盘输入正整数n为1234,屏幕输出====================1,234
#请完善如下代码
#在______填入语句
s=input()
print("{_____}".format(_____))
参考答案
s=input()
print("{:=>25,}".format(eval(s)))
解析
这题主要考察format()这个函数和eval()
格式控制标记包括: <填充> <对齐> <宽度><, ><.精度><类型>等六个字段,这些字段都是可选的, 可以组合使用。填充常跟对齐一 起使用,^、<、>分别是居中、左对齐、右对齐,后面带宽度, :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
题目二
2.获得用户输入的一个字符串,将字符串逆序输出,同时紧接着输出字符串的个数,请完善PY102.py中代码。
#请完善如下代码
#在______填入语句
s=input()
print(_______(1)_________)
print(_______(2)_________)
参考答案
s=input()
print(s[::-1],end='')
print(len(s))
解析
-
s=input()- 这一行代码从用户那里获取输入的字符串,并将其存储在变量s中。 -
print(s[::-1])- 这一行代码打印出s的反转。字符串可以使用切片操作符[start:stop:step]进行切片,其中start是起始索引,stop是结束索引,step是步长。在这个例子中,我们将start和stop都留空,表示从字符串的开头到结尾,step为-1,表示从右到左反转字符串。 -
print(len(s))- 这一行代码打印出s的长度。len()函数用于获取字符串的长度,即它包含的字符数。
题目三
3.获得用户输入的以逗号分隔的三个数字,记为a、b、c,以为起始数值,b为差,c为数值的数量,
请完善PY103.py中代码
#请完善如下代码
#在______填入语句
a, b, c = _______(1)_________
ls = []
for i in range(c):
ls._______(2)_________
print(ls)
参考答案
a, b, c = [int(x) for x in input().split(',')]
ls = []
for i in range(c):
ls.append(a+(i*b))
print(ls)
解析
根据题目要求和给出的提示代码,用户输入的是以逗号分隔的三个数字,则需要先用splt0方法将字符串分隔形成列表,再用for循环遍历该列表将字符串类型转换成数字类型
向列表中增加元素用append()方法。本题输出的是以a为起始数值,b为差的等差递增数列,c为数列中数值的数量,则for i in range(c)中i的值是从0到c-1的整数。那么数列中第i个数为a+(i*b)
简单应用
题目四
使用turtle库的turtle.fd0函数和turtle..seth0函数绘制一个边长为40像素的正12边形,在考生文件夹下给出了程序框架文件PY201py,在横线处补充代码,不得修改其他代码。效果如下图所示。

#请在空格处补充代码
import turtle
turtle.pensize(2)
d=0
for i in range(1, _______(1)_________):
_______(2)_________
d += _______(3)_________
turtle.seth(d)
参考答案
import turtle
turtle.pensize(2)
d=0
for i in range(1,13):
turtle.fd(40)
d += 30
turtle.seth(d)
解析
- 导入turtle库:
import turtle - 设置画笔粗细为2:
turtle.pensize(2) - 初始化一个角度变量d为0:
d=0 - 循环12次,每次执行以下操作: a. 向前移动40像素:
turtle.fd(40)b. 将角度变量d增加30度:d += 30c. 将画笔的方向设置为当前角度变量d的值:turtle.seth(d) - 循环结束后,完成了正12边形的绘制。
题目五
5.计算两个列表s和t对应元素乘积的和(即向量积),补充PY202.py文件。
1s=[111,222,333,444,555,666,777,888,999]
It=[999,777,555,333,111,888,666,444,222]
#请补充若干行代码,完成向量积运算
ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
s = 0
________________
________________
print(s)
参考答案
ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
s = 0
for i in range(len(ls)):
s+=ls[i] * lt[i]
print(s)
解析
这段代码首先定义了两个列表ls和lt,分别包含了一些整数。
然后通过循环遍历ls列表,使用range()函数和len()函数获取ls列表的长度,循环次数为列表长度。在循环体中,使用+=操作符将s变量加上ls[i] * lt[i]的值,其中i为当前循环次数,表示获取到的当前元素在列表中的下标。
最后,将累加结果输出到屏幕上,即完成了计算两个列表对应元素的乘积之和的操作。
题目六
6.某班学生评选一等奖学金,学生的10门主干课成绩存在考生文件夹下文件sc0r.txt中,每行为一个学生的信息,分别记录了学
生学号、姓名以及10门课成绩,格式如下:
1820161043郑珉搞68 66 83 77 56 73 61 69 66 78
1820161044沈红伟91 70 81 91 96 80 78 91 89 94
.....
从这些学生中选出奖学金候选人,条件是:①总成绩排名在前10名;②全部课程及格(成绩大于等于60)。
问题一
6.1给出按总成绩从高到低排序的前10名学生名单,并写入文件candidate0.txt,每行记录一个学生的信息,分别为学生学号、姓名以及10门课成绩。补充考生文件夹下文件PY301-1.py,完成这一功能。
# 请在...处使用多行代码替换
#
# 注意:其他已给出代码仅作为提示,可以修改
L=[] #L中的元素是学生原始成绩和总成绩
... #此处可多行
L.sort(key=lambda x:x[-1],reverse=True) #按学生总成绩从大到小排序
... #此处可多行
参考答案
L=[]
fo = open("score.txt", "r")
fi = open("candidate0.txt", "w")
lines = fo.readlines()
for line in lines:
line = line.strip()
student = line.split(' ')
sum = 0
for i in range(1,11):
sum += int(student[-i])
student.append(str(sum))
L.append(student)
L.sort(key=lambda x:x[-1],reverse=True)
for i in range(10):
fi.write(' '.join(L[i][:-1]) + '\n')
fo.close()
fi.close()
解析
-
定义一个空列表 L。
-
打开名为 "score.txt" 的文件,并将其读入到一个列表 lines 中。
-
对于 lines 列表中的每一行,进行如下操作:
a. 删除行末的换行符,得到一个去掉换行符的字符串 line。
b. 将 line 字符串按照空格进行分割,得到一个包含学生信息的列表 student。
c. 定义一个变量 sum 并初始化为 0,然后对学生的最后十门课程的成绩进行累加,将结果赋值给 sum。
d. 将 sum 转换为字符串,并将其添加到 student 列表中作为最后一个元素。
e. 将 student 列表添加到列表 L 中。
-
对列表 L 进行排序,排序的关键字为每个学生的最后一个元素(即总分数),排序顺序为从大到小。
-
打开名为 "candidate0.txt" 的文件,将排名前十的学生信息写入文件中,每行信息以空格分隔。
-
关闭文件 "score.txt" 和 "candidate0.txt"。
需要注意的是,这段代码中使用了一些 Python 的高级特性,例如 lambda 表达式、列表推导式和列表排序函数 sort(),如果对这些概念不熟悉的话,可能需要先学习一下相关知识
问题二
6.2读取文件candidate(0.txt,从中选出候选人,并将学号和姓名写入文件candidate.txt,格式如下:
电
1010112161722张三
1010112161728李四
......
'''
输入文件 : candidate0.txt
输出文件 : candidate.txt
'''
参考答案
fo = open("candidate0.txt", "r")
fi = open("candidate.txt", "w")
L = [] # 存储候选人
lines = fo.readlines()
for line in lines:
line = line.strip()
student = line.split(' ')
for i in student[-10:]:
if int(i) < 60:
break
else:
L.append(student[:2])
for i in L:
fi.write(' '.join(i) + '\n')
fo.close()
fi.close()
解析
-
打开名为 "candidate0.txt" 的文件,并将其读入到一个列表 lines 中。
-
定义一个空列表 L,用于存储筛选出来的学生信息。
-
对于 lines 列表中的每一行,进行如下操作:
a. 删除行末的换行符,得到一个去掉换行符的字符串 line。
b. 将 line 字符串按照空格进行分割,得到一个包含学生信息的列表 student。
c. 对学生信息列表中的最后十门课程的成绩进行遍历,如果有成绩低于 60 分,则跳出循环;否则,将学生的姓名和学号信息添加到 L 列表中。
-
遍历列表 L 中的每个学生信息,将学生的姓名和学号信息以空格分隔的形式写入名为 "candidate.txt" 的文件中。
-
关闭文件 "candidate0.txt" 和 "candidate.txt"。
需要注意的是,在步骤 3.c 中使用了 Python 的循环语句 for 和循环控制语句 break 和 else。具体地,当循环中没有执行 break 语句时,就会执行 else 语句块中的代码,因此只有当学生的最后十门课程的成绩均不低于 60 分时,才会将其添加到 L 列表中。
文章提供了几个Python编程题目,涉及基本输入输出、字符串反转、等差数列生成、图形绘制(turtle库)以及列表操作。题目涵盖了用户输入处理、字符串切片、数字格式化、列表推导式、文件读写以及条件判断等概念,旨在检验和提升读者的Python编程能力。
3489

被折叠的 条评论
为什么被折叠?



