7-1 求两点之间距离
定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干成员函数。 定义一个函数Distance(), 用于求两点之间的距离。
输入格式:
输入有两行: 第一行是第一个点的x坐标和y坐标; 第二行是第二个点的x坐标和y坐标。
输出格式:
输出两个点之间的距离,保留两位小数。
输入样例:
0 9 3 -4
输出样例:
13.34
import math
class Point():
def __init__(self,x,y):
self.x = x
self.y = y
def Distance(d1,d2):
dis = math.sqrt(((d1.x - d2.x) ** 2)+((d1.y - d2.y) ** 2))
print("{:.2f}".format(dis))
data1 = input().split()
data2 = input().split()
d1 = Point(int(data1[0]),int(data1[1]))
d2 = Point(int(data2[0]),int(data2[1]))
Point.Distance(d1,d2)
7-2 类的定义和使用
请定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干构造函数和一个移动的成员函数,可输出移动后新的坐标值。
输入:
第一行的两个数 分别表示 点的x坐标和y坐标。 第二行的两个数 分别表示 x和y方向移动的距离。
输出:
移动后的点的x坐标和y坐标。
输入样例:
1 5
2 5
输出样例:
3 10
class Point():
def __init__(self,x,y):
self.x = x
self.y = y
def prime(self,n):
result = Point(0,0)
result.x = self.x + n.x
result.y = self.y + n.y
print('{0} {1}'.format(result.x,result.y))
num1 = input().split()
num2 = input().split()
data1 = Point(int(num1[0]),int(num1[-1]))
data2 = Point(int(num2[0]),int(num2[-1]))
Point.prime(data1,data2)
7-3 优异生查询(类和对象)
题目: 编程实现查找优异生的功能——用户输入多个学生的成绩,输出总分最高的学生姓名和各科成绩
要求: 设计一个学生类(Student),包括
1)属性:姓名(name),数学成绩(mscore),语文成绩(cscore),英语成绩(escore);
2)方法:
构造方法,来构造每个具体的学生对象
计算总成绩方法getSum(self),返回三个成绩的和
获得优异生姓名,数学成绩,语文成绩,英语成绩的方法getBest(self),返回4个结果内容(优异生姓名,数学成绩,语文成绩,英语成绩)
输入格式:
通过4行输入:
第一行输入多个学生姓名,以空格分隔
第二行输入多个数学成绩,以空格分隔
第三行输入多个语文成绩,以空格分隔
第四行输入多个英语成绩,以空格分隔
注意:学生姓名个数要和成绩个数保持一致
输出格式:
在一行中,输出总分最高的学生及其各科科目成绩,以空格分隔。
输入样例:
在这里给出一组输入。例如:
Jack Tom Jim
95 84 32
90 75 45
85 90 67
输出样例:
在这里给出相应的输出。例如:
Jack 95 90 85
names=input().split()
mscores=list(map(int,input().split()))
cscores=list(map(int,input().split()))
escores=list(map(int,input().split()))
class Student:
def __init__(self,n,m,c,e):
self.n,self.total=n,m+c+e
self.m,self.c,self.e=m,c,e
def __lt__(self, other):
return self.total < other.total
def __str__(self):
return '%s %d %d %d' %(self.n,self.m,self.c,self.e)
s=[]
for i in range(len(names)):
s.append(Student(names[i],mscores[i],cscores[i],escores[i]))
s.sort()
print(s[-1])
7-4 新型计算器
题目:设计一个计算器,实现一个三维向量的加法,减法以及向量和标量的乘法和除法运算
提示:
1、定义类名为 VecCal,设计构造函数创建三维向量对象: def init(self, x=0,y=0,z=0) 用x,y,z指代三个维度的值
2、重写加法(+),减法(-),乘法(* )和整除除法(//)运算,实现向量的加减乘除
3、除法运算作异常处理,当输入标量数字是0时,除法结果为 (0,0,0)
加法示例:
def add(self, n): # 加法
result = VecCal() # 定义结果变量,也是一个三维向量,通过构造函数创建
result.X = self.X + n.X
result.Y = self.Y + n.Y
result.Z = self.Z + n.Z
return result # 返回 执行加法运算后的向量结果
输入格式:
第一行输入一个三维向量,逗号分隔,如:1,2,3
第二行输入另一个三维向量,逗号分隔:如:4,5,6
第三行输入一个数字, 如:3
输出格式:
(1, 2, 3) + (4, 5, 6) = (5, 7, 9)
(1, 2, 3) - (4, 5, 6) = (-3, -3, -3)
(1, 2, 3) * 3 = (3, 6, 9)
(1, 2, 3) / 3 = (0, 0, 1)
输入样例:
在这里给出一组输入。例如:
1,2,3
4,5,6
3
输出样例:
在这里给出相应的输出。例如:
(1, 2, 3) + (4, 5, 6) = (5, 7, 9)
(1, 2, 3) - (4, 5, 6) = (-3, -3, -3)
(1, 2, 3) * 3 = (3, 6, 9)
(1, 2, 3) / 3 = (0, 0, 1)
class VecCal(object):
def __init__(self,x=0,y=0,z=0):
self.X = x
self.Y = y
self.Z = z
def __add__(self,n):
result = VecCal()
result.X = self.X + n.X
result.Y = self.Y + n.Y
result.Z = self.Z + n.Z
return result
def __sub__(self,n):
result = VecCal()
result.X = self.X - n.X
result.Y = self.Y - n.Y
result.Z = self.Z - n.Z
return result
def __mul__(self,n):
result = VecCal()
result.X = self.X * n
result.Y = self.Y * n
result.Z = self.Z * n
return result
def __floordiv__(self,n):
result = VecCal()
result.X = self.X // n
result.Y = self.Y // n
result.Z = self.Z // n
return result
def __str__(self):
return '({0}, {1}, {2})'.format(self.X,self.Y,self.Z)
num1 = VecCal(*map(int,input().split(',')))
num2 = VecCal(*map(int,input().split(',')))
n=int(input())
print(num1,'+',num2,'=',num1+num2)
print(num1,'-',num2,'=',num1-num2)
print(num1,'*',n,'=',num1*n)
if n != 0:
print(num1,'/',n,'=',num1//n)
else :
print(num1,'/',n,'=','(0, 0, 0)')
7-5 学生类的使用
1.设计一个Student类,这个类包括 : 1) 姓名name,性别sex和成绩score三个实例数据 2) 以name,sex,score为参数的构造方法 3) 三个参数的get()方法 2,除此外再编写将字符串转化成Student类的实例的函数makestudent(studentstring) 3.做测试程序: 根据输入的数据,打印成绩最高分的信息及不及格的名单。 提示:输入多行数据,用sys模块的sys.stdin.readlines()方法实现(ctrl+D结束输入)
输入格式:
输入多行以逗号分隔开的字符串
输出格式:
打印最高分的所有数据,并且打印不及格的名单
输入样例:
在这里给出一组输入。例如:
mary,female,78
tom,male,65
susan,female,90
jack,male,23
johon,male,98
chris,female,44
zip,female,87
kiki,male,38
steven,male,58
kate,female,66
输出样例:
在这里给出相应的输出。例如:
the highest score: johon male 98.0
no pass:
jack
chris
kiki
steven
class Student:
def __init__(self, name, sex, score):
self.__name = name
self.__sex = sex
self.__score = score
def get_name(self):
return self.__name
def get_sex(self):
return self.__sex
def get_score(self):
return self.__score
@classmethod
def makestudent(self, studentstring):
for item in studentstring:
ret = item.strip().split(',')
name, sex, score = ret[0], ret[1], int(ret[2])
stu = Student(name, sex, score)
stu_list.append(stu)
return stu_list
if __name__ == '__main__':#这个方法防止别的脚本导入本脚本自动执行本脚本的代码删掉的我试过也可以
import sys
stu_list = list()
data_list = sys.stdin.readlines() # ['marry,female,78\n', 'tom,male,65']
Student.makestudent(data_list)
"""
1.获取最高分的数据
"""
length = len(stu_list)
no_pass_list=[]
for i in range(0, length - 1):
if stu_list[i].get_score() < 60:
no_pass_list.append(stu_list[i].get_name())
# print(stu_list[i].get_name())
for i in range(0, length - 1):
for j in range(0, length - i - 1):
if stu_list[j].get_score() < stu_list[j + 1].get_score():
stu_list[j], stu_list[j + 1] = stu_list[j + 1], stu_list[j]
print('the highest score: {} {} {:.1f}'.format(stu_list[0].get_name(), stu_list[0].get_sex(), stu_list[0].get_score()))
"""
2.获取不及格的名单
"""
print('no pass: ')
for i in no_pass_list:
print(i)
'''
for i in range(0, length - 1):
if stu_list[i].get_score() < 60:
print(stu_list[i].get_name())
'''
下面的是删掉的
class Student:
def __init__(self, name, sex, score):
self.__name = name
self.__sex = sex
self.__score = score
def get_name(self):
return self.__name
def get_sex(self):
return self.__sex
def get_score(self):
return self.__score
@classmethod
def makestudent(self, studentstring):
for item in studentstring:
ret = item.strip().split(',')
name, sex, score = ret[0], ret[1], int(ret[2])
stu = Student(name, sex, score)
stu_list.append(stu)
return stu_list
import sys
stu_list = list()
data_list = sys.stdin.readlines() # ['marry,female,78\n', 'tom,male,65']
Student.makestudent(data_list)
length = len(stu_list)
no_pass_list=[]
for i in range(0, length - 1):
if stu_list[i].get_score() < 60:
no_pass_list.append(stu_list[i].get_name())
# print(stu_list[i].get_name())
for i in range(0, length - 1):
for j in range(0, length - i - 1):
if stu_list[j].get_score() < stu_list[j + 1].get_score():
stu_list[j], stu_list[j + 1] = stu_list[j + 1], stu_list[j]
print('the highest score: {} {} {:.1f}'.format(stu_list[0].get_name(), stu_list[0].get_sex(), stu_list[0].get_score()))
print('no pass: ')
for i in no_pass_list:
print(i)
7-6 三维向量运算
设计一个三维向量类,实现向量加法、减法以及向量与标量的乘法和除法运算。后面添加下面代码完成:
输入样例:
输出样例:
(4, 6, 8)
(4, 6, 8)
(-2, -2, -2)
(3, 6, 9)
(1.5, 2.0, 2.5)
(1, 2, 2)
class Vecter:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __add__(self, other):
result = Vecter(0, 0, 0)
result.x = self.x + other.x
result.y = self.y + other.y
result.z = self.z + other.z
return result
def __floordiv__(self, n):
result = Vecter(0, 0, 0)
result.x = self.x // n
result.y = self.y // n
result.z = self.z // n
return result
def __truediv__(self, n):
result = Vecter(0, 0, 0)
result.x = self.x / n
result.y = self.y / n
result.z = self.z / n
return result
def __mul__(self, n):
result = Vecter(0, 0, 0)
result.x = self.x * n
result.y = self.y * n
result.z = self.z * n
return result
def __sub__(self, other):
result = Vecter(0, 0, 0)
result.x = self.x - other.x
result.y = self.y - other.y
result.z = self.z - other.z
return result
def show(self):
print('({0}, {1}, {2})'.format(self.x, self.y, self.z))
def main():
v1 = Vecter(1, 2, 3)
v2 = Vecter(3, 4, 5)
v3 = v1 + v2
v3.show()
v3 = v1.__add__(v2)
v3.show()
v4 = v1 - v2
v4.show()
v5 = v1 * 3
v5.show()
v6 = v2 / 2
v6.show()
v7 = v2 // 2
v7.show()
main()
7-7 继承类应用
创建一个名称为Square的类: 该类中定义私有的成员字段edge,定义该字段的set,get方法; 完成该类的构造方法; 该类包含方法Circumference(周长)和面积(Area); 定义子类正方体Cube类: 完成该类的构造方法; 实现该类的面积(Area)和体积(Volumn)方法。 在main中创建正方形对象,计算并显示其周长和面积;创建正方体对象,计算并显示其面积和体积。主程序调用main函数。
输入样例:
6
7
输出样例:
边长为6的正方形,面积= 36
边长为6的正方形,周长= 24
边长为7的立方体,面积= 294
边长为7的立方体,体积= 343
import math
class Square():
def __init__(self, edge):
self.__edge = edge
def edge_get(self):
return self.__edge
def edge_set(self, edge):
self.__edge = edge
def Circumference(self, edge):
return edge * 4
def Area(self, edge):
return edge ** 2
class Cube(Square):
def __init__(self, edge2):
super(Cube, self).__init__(edge=edge2)
def Area(self, edge):
return edge ** 2 * 6
def Volumn(self, edge):
return edge ** 3
data1 = int(input())
data2 = int(input())
some = Square(data1)
some.edge_set(data1)
print("边长为{}的正方形,面积= {}".format(data1, some.Area(data1)))
print("边长为{}的正方形,周长= {}".format(data1, some.Circumference(data1)))
some2 = Cube(data2)
some2.edge_set(data2)
print("边长为{}的立方体,面积= {}".format(data2, some2.Area(data2)))
print("边长为{}的立方体,体积= {}".format(data2, some2.Volumn(data2)))
7-8 有关队列操作
请实现一个MyQueue类,实现出队,入队,显示队列,求队列长度。
实现入队方法 push(int x); 实现出队方法 pop(); 实现求队列长度方法 size();实现显示队列方法:show() 。
输入格式:
每个输入包含1个测试用例。
每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。4:表示显示队列中所有元素。
输出格式:
对于操作1,将要添加的元素添加到队列的尾部
对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素,并将这个元素从队列中删除。
对于操作3,请输出队列长度。 每个输出项最后换行。
对于操作4,输出队列中每个元素,元素之间用空格分隔,最后一个元素后面没有空格。
输入样例:
在这里给出一组输入。例如:
9
1 23
1 34
3
4
2
1 56
2
3
1 90
输出样例:
在这里给出相应的输出。例如:
2
23 34
23
34
1
alist = []
class MyQueue:
def push(self,x):
alist.append(x)
def pop(self):
if len(alist) == 0:
print("Invalid")
else:
print(alist[0])
alist.pop(0)
def size(self):
print(len(alist))
def show(self):
for i in range(len(alist)):
if i != len(alist) - 1:
print(alist[i], end=' ')
else:
print(alist[i])
num = int(input())
for i in range(num):
some = input()
if ' ' in some:
lonst = some.split()
if int(lonst[0]) == 1:
MyQueue.push(alist,int(lonst[1]))
else:
if int(some) == 3:
MyQueue.size(alist)
elif int(some) == 2:
MyQueue.pop(alist)
elif int(some) == 4:
MyQueue.show(alist)
7-9 有关堆栈操作
请实现一个Stack类,实现堆栈初始化,进栈,出栈,显示堆栈数据,堆栈长度等. 实现进栈方法 push(int x); 实现出栈方法 pop(); 实现求堆栈长度方法 size();实现显示堆栈数据方法:show()。
输入格式:
输入包含多个测试用例,每个测试用例均为数字,第一个数 表示对应的操作。
是1 时,表示初始化一个堆栈对象,最大长度为10,1后面可带上用空格分隔的0-n个数,这些数据为初始化堆栈的数据(如果数据个数n大于10 ,则最大长度为n),其后 也可不带数据,表示初始化的是一个空堆栈。
是2,表示进栈操作,即从堆栈顶部(尾部)将数据添加到堆栈,所以2 后面还要带一个数,两数之间用空格分隔,当没有第2个数时,显示 “data error”,当进栈操作没有建立堆栈对象时显示 “stack is not exist”.当进堆栈操作时,堆栈数据达到最大长度时,则显示“The stack is full”
是3 : 表示出栈操作,即从堆栈顶部(尾部)将数据弹出并显示。当出栈操作没有建立堆栈对象时显示 “stack is not exist”.当出堆栈操作时,堆栈没有数据,则显示“The stack is Empty”
是4:表示显示堆栈中所有元素,元素之间用空格分隔,最后元素后面没有空格。同样 当显示操作没有建立堆栈对象时显示 “stack is not exist”。
是5 :表示显示堆栈的长度。同样 当显示长度操作没有建立堆栈对象时显示 “stack is not exist”。 是其它数字,则退出
输出格式:
参考输入格式中说明。对应不同的功能输出不同。
输入样例:
在这里给出一组输入。例如:
3
2
1 2 3 4 5
5
4
3
3
2 56
4
0
输出样例:
在这里给出相应的输出。例如:
stack is not exist
data error
4
2 3 4 5
5
4
2 3 56
class Stack:
def __init__(self, size = 10):
#使用列表存放栈的元素
self._content = []
#初始栈大小
self._size = size
#栈中元素个数初始化为0
self._current = 0
def push(self, v):
if self._current < self._size:
for i in v:
self._content.append(i)
self._current = self._current+1
else:
print('Stack Full!')
def pop(self):
if self._content:
self._current = self._current-1
return self._content.pop(-1)
else:
print('Stack is empty!')
def empty(self):
self._content = []
self._current = 0
def isEmpty(self):
return not self._content
def maxlen(self):
if sta.Size() < 10:
self._size = 10
else:
self._size = sta.Size()
return self._size
def Size(self):
return len(self._content)
def show(self):
for i in range(len(self._content)):
if i != len(self._content) - 1:
print(self._content[i], end=' ')
else:
print(self._content[i])
if __name__ == '__main__':
flag = 0
while flag == 0:
num = input()
if ' ' in str(num):
lostr = num.split()
if lostr[0] == '1':
sta = Stack()
sta.push(lostr[1:])
flag = 1
elif lostr[0] == '2':
print("data error")
else:
break
else:
num = int(num)
if num == 1:
Stack.empty()
flag = 1
elif num == 3:
print("stack is not exist")
elif num == 2:
print("data error")
elif num == 4:
print("stack is not exist")
elif num == 5:
print("stack is not exist")
else:
break
while flag == 1:
num = input()
if ' ' in num:
lostr = num.split()
if lostr[0] == '2':
if sta.Size() < sta.maxlen():
sta.push(lostr[1:])
else:
print("The stack is full")
else:
break
else:
if num == '2':
print("data error")
elif num == '3':
print(sta.pop())
elif num == '4':
if sta.isEmpty():
print("The stack is Empty")
else:
sta.show()
elif num == '5':
print(sta.Size())
else:
break
7-10 宿舍谁最高
学校选拔篮球队员,每间宿舍最多有4个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类Student,有身高height,体重weight等。
输入格式:
首先输入一个整型数n (1<=n<=1000000),表示n位同学。 紧跟着n行输入,每一行格式为:宿舍号,name,height,weight。 宿舍号的区间为[0,999999], name 由字母组成,长度小于16,height,weight为正整数。
输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。
输入样例:
在这里给出一组输入。例如:
7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115
输出样例:
在这里给出相应的输出。例如:
000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145
class Student:
def __init__(self, number, name, height, weight):
self.number = number
self.name = name
self.height = height
self.weight = weight
def __lt__(self, other):
if self.number < other.number:
return True
elif (self.number == other.number):
return self.height > other.height
else:
return False
def __str__(self):
return '{} {} {} {}'.format(self.number, self.name, self.height, self.weight)
alist = []
num = int(input())
for i in range(num):
lonst = input().split()
alist.append(Student(lonst[0], lonst[1], int(lonst[2]), int(lonst[3])))
alist.sort()
print(alist[0])
for i in range(1,num):
if alist[i - 1].number != alist[i].number:
print(alist[i])