1.
【问题描述】
以下程序的功能是:统计某个给定范围[L,R]内的所有整数中,数字9出席的次数,比如给定范围[88,99]中9出现12次
【输入形式】
输入两个正整数,前一个小于后一个,空格分隔
【输出形式】
输出一个整数,统计结果
【样例输入】
88 99
【样例输出】
12
代码:
s = input().split()
L, R = int(s[0]), int(s[1])
total = 0
for i in range(L,R+1):
while i !=0:
if i % 10 == 9:
total += 1
i = (i-i%10)/10
print(total)
2.最大公约数
【问题描述】
以下程序的功能是:输入两个正整数a和b,调用函数gcd求a和b最大公约数
【输入形式】
输入一行,内容是用逗号隔开的2个正整数整数。
【输出形式】
最大公约数
【样例输入】
18,27
【样例输出】
9
代码:
def gcd(x,y):
n = 0
if a<b:
for x in range(1,a+1):
if a%x==0 and b%x==0:
if x>n:
n=x
if b<a:
for x in range(1,b+1):
if a%x==0 and b%x==0:
if x>n:
n=x
return n
a,b = eval(input())
print(gcd(a,b))
3.继承
【问题描述】以下代码设计了一个名为Pet的宠物类,该类有两个属性name和age,并有打印名字和年龄的show()成员方法,然后定义了一个Dog类,Dog类是Pet类的子类,有name、age、color三个属性,利用继承的性质,实现了对象相关信息的输出。
【输入形式】
无
【输出形式】
输出三行,分别是name:具体值,age:具体值,color:具体值
【样例输入】
无
【样例输出】
name: 旺财
age: 3
color: golden
代码:
class Pet:
def __init__(self,name,age):
self.name,self.age = name,age
def show(self):
print("name:",self.name,"\nage:",self.age)
#定义子类
class Dog(Pet):
def __init__(self,name,age,color):
#调用父类的构造函数对属性name,age赋值
Pet.__init__(self,name,age)
self.color = color
def show(self):
super().show()
print("color:",self.color)
myPet = Dog("旺财",3,"golden")
myPet.show()
4.计算期末考试的最低分数
【问题描述】
python期末综合成绩的计分规则为:
1、两次课堂测试每次10分,共20分
2、平时成绩10分
3、期末考试成绩占70%
4、如果期末考试成绩没上40分,则按照期末考试成绩计算总成绩。
请根据录入的两次课堂测试成绩、平时成绩和期末成绩,计算该学生的综合成绩
请该生期末考试至少要得到多少分,才有可能及格?
【输入形式】
输入一行,逗号隔开
第一次课堂测试成绩,第二次课堂测试成绩,平时成绩,期末考试的成绩
【输出形式】
输出两行
第一行为该学生的期末综合成绩,保留两位小数
第二行为该学生期末考试至少要得到多少分,才有可能及格?保留两位小数
【样例输入】
10,10,10,78
【样例输出】
84.60
42.86
代码:
e = input().split(',')
a,b,c,d = int(e[0]),int(e[1]),int(e[2]),int(e[3])
total=a+b+c
x=(60-total)/0.7
if d < 40:
print('{:.2f}'.format(d))
print(f'{x:.2f}')
else:
total1 = total + d*0.7
print(f'{total1:.2f}')
print(f'{x:.2f}')
5.坚持的力量
【问题描述】
1951年,毛泽东主席题词“好好学习,天天向上”,成为激励一代一代中国人奋发图强的金典短语。下面我们通过代码算算“天天向上”有多强大的力量。一学期有n天,以第一天的能力值为基数,记为1.0,当好好学习时,能力比前一天提升千分之五,当不认真学习时(躺平)能力下降千分之一。问一学期每天努力和一学期每天躺平放任,一学期下来能力值相差多少?
【输入形式】
输入一学期的天数
【输出形式】
输出向上和躺平的能力值和能力差值,保留2位小数,输出形式采用等式,具体看样例
【样例输入】
148
【样例输出】
2.09 - 0.86 = 1.23
【样例说明】
2.09表示148天好好学习后的能力值,0.86表示躺平后的能力值,1.23是二者的差值,输出均采用保留两位小数的形式输出。
代码:
a = float(input())
xue = 1
tang = 1
for x in range(int(a)):
xue = xue*1.005
tang = tang*0.999
print('{:.2f} - {:.2f} = {:.2f}'.format(xue,tang,xue-tang))
6.题库:组合数字
【问题描述】从键盘输入两个整数n和m(要求n<m),编程求出由n到m(不包含m)中的整数组合而成的所有不含重复数字的三位数。若n和m的输入不合法或者没有符合条件的三位数则提示输出“illegal input"。
【输入形式】输入一行,内容为两个以空格分隔的整数,分别表示n和m。
【输出形式】以空格分隔输出所有符合条件的三位数。
【样例输入】1 4
【样例输出】123 132 213 231 312 321
【样例输入】2 4
【样例输出】illegal input
【样例输入】0 3
【样例输出】102 120 201 210
代码:
n,m = map(int,input().split())
if 0<=n<m<=10 and (m-n)>=3 :
for i in range(n,m):
for j in range(n,m):
for k in range(n,m):
if i!=j and i!=k and j!=k and i!=0:
print(i,j,k,sep='',end=' ')
else:
print('illegal input')
7.成绩排序
【问题描述】
给出班里某门课程的成绩文件test5.csv(utf-8编码),每行为每个学生的名字和他的成绩, 中间用逗号隔开。请你按成绩从高到低对数据排序输出,如果有相同分数则名字字典序小的在前(按名字升序)排序。
【输入形式】
输入来自文件
【输出形式】
把成绩按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
【样例输入】
文件内容如下时:
Kitty,80
Tom,28
Hanmeimei,90
Joey,92
Tim,28
【样例输出】
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
Tom 28
代码:
with open('test5.csv', 'r', encoding='utf-8') as f:
data = [line.strip().split(',') for line in f.readlines()]
data_sorted = sorted(data, key=lambda x: (-int(x[1]), x[0]))
for row in data_sorted:
print(row[0], row[1])
8.福到了
“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。
输入格式:
输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。
输出格式:
输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。
输入样例 1:
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@
输出样例 1:
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $
输入样例 2:
& 3
@@@
@
@@@
输出样例 2:
bu yong dao le
&&&
&
&&&
代码:
#方法一:
ch,n=input().split()
n = int(n)
s = ''
for x in range(n):
s += input() + '\n'
res = s[::-1]
if res.strip() == s.strip():
print('bu yong dao le')
print(res.replace('@',ch))
#方法二:
lst = input().split()
ch,n = lst[0],int(lst[1])
grid = [input() for i in range(n)]
gridT = grid[::-1]
gridRev = [lstT[::-1] for lstT in gridT]
if gridRev == grid: print('bu yong dao le')
gridRR = [[ch if c != ' ' else ' ' for c in lstT]for lstT in gridRev]
print(*([''.join(lstT) for lstT in gridRR]),sep='\n')
9.编写函数计算f(i) = 1/2 + 2/3 + 3/4 + ... + i/(i+1)
【问题描述】
编写函数计算f(i) = 1/2 + 2/3 + 3/4 + ... + i/(i+1)
函数接口定义:
def f(i)
i为正整数,返回结果浮点数。
【样例输入】
5
【样例输出】
3.5500
代码:
def f(i):
if i==1:
return 1/2
r = (i/(i+1))+f(i-1)
return r
v=int(input())
print("%.4f" % f(v))
10.设计Shape基类及Circle, Rectangle继承类
【问题描述】
设计一个基类Shape,包括:
名为sName的属性(图形名称);
构造函数应对sName属性进行初始化。
设计Shape的继承类Rectangle, 包括:
长,宽两个属性;
构造函数调用Shape的构造函数,并初始化长,宽两个属性;
getArea()成员函数计算并返回矩形面积。
设计Shape的继承类Circle,包括:
半径属性;
构造函数调用Shape的构造函数,并初始化半径属性;
getArea()成员函数计算并返回圆形面积。
注意:请结合程序以理解题目对类的接口的要求。
【样例输入】
Jupyter
12.1
9.9
Moon
3.3
【样例输出】
shape0
Rect Jupyter,Area: 119.79
Circle Moon,Area: 34.21
代码:
class Shape():
def __init__(self,sName):
self.sName = sName
class Rectangle():
def __init__(self,sName,wide,height):
self.sName = sName
self.wide = wide
self.height = height
def getArea(self):
return self.wide*self.height
class Circle():
def __init__(self,sName,r):
self.sName = sName
self.r = r
def getArea(self):
return 3.1415926*(self.r)**2
s1 = Shape("shape0")
s = input() #Name of Rectangle
w = float(input()) #Width of Rect
h = float(input()) #Height of Rect
r1 = Rectangle(s,w,h)
s = input() #Name of Circle
r = float(input()) #Radius of Circle
c1 = Circle(s,r)
print(s1.sName)
print("Rect %s,Area: %.2f" % (r1.sName,r1.getArea()))
print("Circle %s,Area: %.2f" % (c1.sName,c1.getArea()))
11.类与对象-两点之间距离
【问题描述】
定义Point类实现三维坐标点。定义dist_from方法实现两点之间距离的计算。
【输入形式】输入两行,第一行是第一个点的坐标值,第二行是第二个点的坐标值。坐标值x, y, z之间用空格隔开。
【输出形式】距离
【样例输入】
0 0 0
1 1 1
【样例输出】
1.73205
代码:
import math
class Point():
def __init__(self,x,y,z):
self.x = x
self.y = y
self.z = z
def dist_from(self,other):
return math.sqrt((self.x-other.x)**2+(self.y-other.y)**2+(self.z-other.z)**2)
x1, y1, z1 = input().split()
x1 = float(x1)
y1 = float(y1)
z1 = float(z1)
p1 = Point(x1, y1, z1)
x2, y2, z2 = input().split()
x2 = float(x2)
y2 = float(y2)
z2 = float(z2)
p2 = Point(x2, y2, z2)
print("%.2f"%p1.dist_from(p2))
12.百人搬百砖/百钱买百鸡 - 实验9 循环进阶
【问题描述】
百人搬百砖问题是中国古代百钱买百鸡问题的另一种表达形式。
工地搬砖,男人一人搬3块,女人一人搬2块,小孩两人搬1块。n个人搬n块砖,总共有哪些搬法?
请参考伪代码将下述程序补充完整,并上机调试运行。
注意:程序还应确保小孩数可以整数2,即小孩数必须为偶数。
代码:
N = int(input("请输入N:"))
iCount = 0
for men in range(N+1):
for women in range(N+1):
for children in range(N+1):
if children == N-men-women and children%2==0 and men*3+women*2+children/2==N:
print(f"找到解:men={men},women={women},children={children}")
iCount += 1
print("解的数量:",iCount)
13.题库:打印拐形图案
【问题描述】
打印一个如样例输出所示的拐形图案。
【输入形式】
一个整数n,表示图案的总行,1<=n<20
【输出形式】
一个图案
【样例输入】
6
【样例输出】
代码:
n = eval(input())
#生成每行均为最后一行的一个二维列表
lst = [[chr(ord("A")+j) for j in range(n)] for x in range(n)]
for i in range(n):
for j in range(i+1,n):
lst[i][j] = chr(ord("A")+i)
#打印输出第i行
print(''.join(lst[i]))
14.设计学生类,使用类对象属性来记录学生对象的数量
【问题描述】
设计一个名为Student的学生类:
使用名为count的类对象属性来记录Student对象的个数;
构造函数中初始化学号及姓名两个属性,并对count属性加1;
析构函数(__del__)中对类对象属性count减1。
说明:请阅读测试样例程序来理解题目对类的接口要求。
【样例输入】
3
【样例输出】
学生数量: 2
Code1 Name1
Code2 Name2
代码:
class Student:
count = 0
def __init__(self,code,name):
self.code = code
self.name = name
Student.count += 1
def __del__(self):
Student.count -= 1
n = int(input()) #输入学生数量,数量大于1
s = []
for i in range(n):
s.append(Student("Code"+str(i),"Name"+str(i)))
del s[0] #删除一个学生,导致count减1
print("Student Count:",Student.count)
for x in s:
print(x.code,x.name)
15.考拉兹猜想
【问题描述】
考拉兹猜想(Collatz conjecture)又称奇偶归一猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2。 如此循环,最终都能得到1。编写一个程序,输入一个正整数,打印其考拉兹序列。
【输入形式】
1个>1的正整数
【输出形式】
以逗号分隔的考拉兹序列。
【样例输入】
5
【样例输出】
16,8,4,2,1
代码:
n = int(input())
while True:
if n%2==1:
n = n*3+1
print(int(n),end=',')
elif n%2==0:
n /= 2
if n==1:
print('1')
break
else:
print(int(n),end=',')
16.打印三角形
【问题描述】
编写一个程序,输入一奇数n(2<n<80),表示最长一行的*号个数,打印如下三角形:
*
***
*****
*******
*********
***********
*************
***************
该三角形为直角三角形,其底边上“*”号个数为n。上图为输入15时的输出。
【输入形式】
从标准输入读取一个奇数,表示要打印的最长行的*号数。
【输出形式】
向标准输出打印一个三角形,如上图所示。并且在最后一行末也输出一个回车。
代码:
a = int(input())
for x in range(1,a+1,2):
print('*'*x)
17.输出下一秒
【问题描述】编写一个程序,输出当前时间的下一秒。
【输入形式】用户在第一行按照小时:分钟:秒的格式输入一个时间。
【输出形式】程序在下一行输出这个时间的下一秒。
【样例输入】23:59:59
【样例输出】0:0:0
【样例说明】用户按照格式输入时间,程序输出此时间的下一秒。
代码:
a = input().split(':')
h = int(a[0])
m = int(a[1])
s = int(a[2])
s = s+1
if s == 60:
s=0
m += 1
if m == 60:
m=0
h += 1
if h == 24:
h=0
print(h,':',m,':',s,sep='')
18.题库:统计水果消费购买次数和总金额
【问题描述】
小王的最近几天的水果消费清单如下所示(若没有消费记录,输入为"None"),每条记录的格式类似如下,以"None"结束,每条数据是水果名和消费额,空格隔开:
apple 25.0
pear 8.0
apple 5.0
pear 2.0
banana 10.0
orange 30.0
None
题目要求:
1. 输出小王最近购买过哪些水果及其购买次数(整数)和总金额(保留两位小数)。(排序规则:先按购买金额降序,再按购买次数降序,都相同的话按水果名升序)
【样例输入】
apple 25.0
pear 8.0
apple 5.0
pear 2.0
banana 10.0
orange 30.0
None
【样例输出】
apple 2 30.00
orange 1 30.00
pear 2 10.00
banana 1 10.00
【样例说明】
输入为不定行,以"None"结束,每条数据是水果名和消费额,空格隔开
输出为不定行,每行依次为:水果名、购买次数(整数)、总金额(保留两位小数)。
(排序规则:先按购买金额降序,再按购买次数降序,都相同的话按水果名升序)
--------------------------------------------------------------------
从标准输入录入信息,存储到字典CostInfo里,字典结构如下:
{'apple': [2, 0.8], 'pear': [2, 10.0], 'b': [1, 10]} value为一个列表,存储购买次数和总金额
代码:
zong = {}
a = input()
while a!='None':
f,n = a.split()
n = float(n)
if f not in zong:
zong[f] = [1,n]
else:
zong[f][0] += 1
zong[f][1] += n
a = input()
zong = sorted(zong.items(),key=lambda x:(-int(x[1][1]),-int(x[1][0]),x[0]))
for i,j in zong:
print(i,j[0],f'{j[1]:.2f}')
19.题库:天干地支中国年
【问题描述】
干支纪年法是中国历法上自古以来就一直使用的纪年方法。干支是天干和地支的总称。把干支顺序相配正好六十为一周,周而复始,循环更替。公元后年份可以按如下规则转换:按照公元年份-3后除以10,得余数可得对应天干,天干对应余数数字:甲1,乙2,丙3,丁4,戊5,己6,庚7,辛8,壬9,癸0。公元年份-3后除以12,得余数可得对应地支,地支对应余数:子1,丑2,寅3,卯4,辰5,巳6,午7,未8,申9,酉10,戌11,亥0。十二生肖是十二地支的形象化代表,即子(鼠)、丑(牛)、寅(虎)、卯(兔)、辰(龙)、巳(蛇)、午(马)、未(羊)、申(猴)、酉(鸡)、戌(狗)、亥(猪),由地支可以看出属相年。
编程实现,输入一个公元年份,输出干支纪年和属相年
【输入形式】
输入公元年份
【输出形式】
分两行分别输出干支纪年和属相年
【样例输入】
2021
【样例输出】
辛丑年
牛年
【样例说明】
系统中文输出需在程序前加上下列代码: (作者未用到本方法,读者可尝试)
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
sys.stdin = io.TextIOWrapper(sys.stdin.buffer,encoding='utf-8')
代码:
tian = ['癸','甲','乙','丙','丁','戊','己','庚','辛','壬']
di = ['亥','子','丑','寅','卯','辰','巳','午','未','申','酉','戌']
shengxiao = ['猪','鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗']
nian = input()
nian = int(nian)
t = (nian-3)%10
d = (nian-3)%12
print(tian[t],di[d],'年',sep='')
print(shengxiao[d],'年',sep='')
20.题库:嵌套列表元素求和
【问题描述】
输入一个嵌套列表,嵌套层次不限,求列表元素的和。这个列表的每个元素是整数。
【输入形式】
嵌套列表
【输出形式】
整数
【样例输入】
[1,2,3,[4,5,6,7],8]
【样例输出】
36
代码:
def sumlist(nums):
n = 0
for x in nums:
if type(x) is int:
n = n + x
if type(x) == list:
n = n + sumlist(x)
return n
nums = eval(input())
sumv = sumlist(nums)
print(sumv)
21.题库:嵌套列表元素加权求和
【问题描述】
输入一个嵌套列表,嵌套层次不超过5层,根据层次,求列表元素的加权和,权是指元素在嵌套列表中的层次。第一层每个元素的权值为:元素值*1,第二层每个元素的权值为:元素值*2,第三层每个元素的权值为:元素值*3, ...,依此类推!
【输入形式】
按照列表的形式输入,每个元素是一个整数
【输出形式】
整数
【样例输入】
[1,2,[3,4,[5,6],7],8]
【样例输出】
72
【样例说明】
元素1,2,8是列表的第一层,所以其权是1。3,4,7 处于列表的第二层,其权是2。5,6处于列表的第三层,其权是3。所以列表元素的加权和为:
(1+2+8)*1+(3+4+7)*2+(5+6)*3=72
代码:
def sumlist(L,m):
sum=0
for ch in L:
if isinstance(ch, int):
sum += ch * m
for ch in L:
if isinstance(ch, list):
sum += sumlist(ch,m+1)
return sum
nums = eval(input())
addv = sumlist(nums, 1)
print(addv)
22.题库:找出列表中缺失的数字
【问题描述】
读入一个长度为n-1的整数列表,这个列表的所有元素都是按照递增顺序排列,且每个数字都是唯一的,每个数字都在范围0~n-1之内。0~n-1范围内的n个数字中有且只有一个数字不在该列表中。请找出这个数字。
【输入形式】
输入一个包含n-1个数字的列表,元素不重复且按升序排列,包括方括号,列表元素逗号分隔。
【输出形式】
输出找到的数字
【样例输入1】
[0,1,3]
【样例输出1】
2
【样例输入2】
[0,1,2,3,4,5]
【样例输出2】
6
【样例说明】
第1个样例输入的列表长度为3,也就是完整的列表应该是4个元素。0~3之间的每个数字只能出现一次,且必须出现一次。经查找缺了数字2。
第2个样例输入的列表长度为6,也就是完整的列表应该是7个元素。0~6之间的每个数字只能出现一次,且必须出现一次。经查找缺了数字6。
代码:
def missNumber(nums):
b = list(range(len(nums)+1))
for x in b:
if x not in nums:
return x
nums = eval(input())
number = missNumber(nums)
print(number)
23.题库:找出两个列表的相同元素(不使用集合),且去除重复元素。
【问题描述】
已知两个列表,可能包含有相同元素,请找出两个列表的相同元素,并放入新的列表。打印新列表。输出结果中没有重复元素,如果两个列表中没有相同元素则输出[]。
【输入形式】
第一行输入第一个列表,包括方括号,元素之间用逗号分隔
第二行输入第二个列表。
【输出形式】
如果存在相同元素,非降序输出列表元素
如果不存在相同元素则输出[]
【样例输入1】
[1,2,3,4,5]
[2,3,4,5,6]
【样例输出1】
[2, 3, 4, 5]
【样例输入2】
[1,2,3,4,5]
[7,8,9,10,11]
【样例输出1】
[]
代码:
nums1 = eval(input()) # 输入列表
nums2 = eval(input())
nums1.sort() # 排序
nums2.sort()
arr = []
i = j = 0
while i < len(nums1) and j < len(nums2): # 相互比较开始
if nums1[i] < nums2[j]:
i += 1
elif nums1[i] > nums2[j]:
j += 1
else:
arr.append(nums1[i])
i += 1
j += 1
for x in arr:
while arr.count(x) > 1:
arr.remove(x)
print(arr) # 输出