文章目录
1.jmu-python-组合数据类型-2.坐标点分类 (10 分)
在上题(1.计算坐标点欧氏距离)的基础上。将每个点根据距离原点的远近分成两类,一类是小于r的点,一类是大于等于r的点。
步骤如下:
1.调用ClassifyPoints(points, r)函数根据输入的半径r进行分类,将所有**<r的点放入a列表,>=r的点放入b列表。然后将a,b列表以元组的方式返回赋值给pointsTuple。
2.将pointsTuple直接输出。
3.调用printPointsTuple(pointsTuple, r),将<r与>=r**的点集合分情况输出,输出还需包含每个点集的平均距离。
函数接口定义:
readPoint() #从一行以,分隔的数中读取坐标,放入元组并返回。如果相应位置无数据,按0处理。
distance(point) #计算point与原点的距离并返回,要math库中的函数
ClassifyPoints(points, r): #根据r将points中的点分成两类放入两个列表,距离小于r与大于等于r。然后将两个列表以元组的形式返回
avgDistance(pointList): #计算列表pointList中的所有点到原点的平均距离,可利用distance(p)函数
printPointsTuple(psTuple, r): #将元组psTuple中的数据按照输出样例格式输出。输出顺序由psTuple中点列表的顺序决定。
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
r = int(input())
points = []
for i in range(n):
p = readPoint()
points.append(p)
print('Point = {}, type = {}, distance = {:.3f}'.format(p,type(p),distance(p)))
pointsTuple = ClassifyPoints(points, r)
print("pointsTuple = {}".format(pointsTuple))
printPointsTuple(pointsTuple,r)
输入格式:
输入n,代表底下要输入n行点坐标。点坐标x,y,z以,分隔。坐标全部为整数。
输入r, 代表要以r作为分类依据。
注意:坐标以,分隔,相应位置可能无字符或者包含多个空格字符,读入时按照0进行处理。
输出格式:
见输出样例。注意:= < >=两侧均有一个空格,,后面要有一个空格。
printPointsTuple中计算的平均距离保留3位小数。输出顺序由psTuple中点列表的顺序决定。
输入样例:
5
5
1,1,1
,
2,3,5
3,1,3
5,
结尾无空行
输出样例:
Point = (1, 1, 1), type = <class ‘tuple’>, distance = 1.732
Point = (0, 0, 0), type = <class ‘tuple’>, distance = 0.000
Point = (2, 3, 5), type = <class ‘tuple’>, distance = 6.164
Point = (3, 1, 3), type = <class ‘tuple’>, distance = 4.359
Point = (5, 0, 0), type = <class ‘tuple’>, distance = 5.000
pointsTuple = ([(1, 1, 1), (0, 0, 0), (3, 1, 3)], [(2, 3, 5), (5, 0, 0)])
distance < 5, avgDistance = 2.030, points = [(1, 1, 1), (0, 0, 0), (3, 1, 3)]
distance >= 5, avgDistance = 5.582, points = [(2, 3, 5), (5, 0, 0)]
结尾无空行
import math
def readPoint():
t = input().split(",")
for i in range(len(t)):
try:
t[i] = int(t[i])
except:
t[i] = 0
return tuple(t)
return t
def distance(point):
sum = 0
for j in range(3):
sum = sum + point[j] ** 2
return math.sqrt(sum)
def ClassifyPoints(points, r):
list1 = []
list2 = []
list3 = []
for x in points:
d = distance(x)
if d < r:
list1.append(x)
else:
list2.append(x)
list3.append(list1)
list3.append(list2)
return tuple(list3)
def avgDistance(pointList):
s = 0
for i in pointList:
s += distance(i)
return s / len(pointList)
def printPointsTuple(psTuple, r):
min = psTuple[0]
max = psTuple[1]
print("distance < {}, avgDistance = {:.3f}, points = {}".format(r, avgDistance(min), min))
print("distance >= {}, avgDistance = {:.3f}, points = {}".format(r, avgDistance(max), max))
2.列表推导生成矩形(高教社,《Python编程基础及应用》习题4-9) (4 分)
实现一个Python3函数,使用列表推导语法生成m行n列的矩阵(二维列表),每个元素的值等于行号+列号。 其中,行号,列号从1开始计数。
函数接口定义:
def generateMatrix (m,n)
m: 1<m<100, int, 表示行数; n: 1<n<100, int, 表示列数。
裁判测试程序样例:
#测试程序
m = int(input())
n = int(input())
r = generateMatrix(m,n)
p = True
for i in range(m):
for j in range(n):
if r[i][j] != (i+j+2):
p = False
break
print(p)
#测试程序的正确输出:
True
测试程序输入样例:
3
8
结尾无空行
测试程序输出样例:
True
结尾无空行
def generateMatrix(m, n):
Matrix = []
for i in range(m):
l = []
for j in range(n):
l.append(i + j + 2)
Matrix.append(l)
return Matrix
# def generateMatrix(m, n):
# return [[x + y for y in range(1, n + 1)] for x in range(1, m + 1)]
3.求列表中和为n的整数对 (10 分)
本题要求实现一个函数pairSum(),带两个输入参数:一个值不重复的整数列表lst和一个整数n。输出列表中所有和为n的整数对的索引。
函数接口定义:
pairSum(lst, n)
lst是传入的整数列表,n为整数
裁判测试程序样例:
# 请在这里填写答案 */
def main():
pairSum([7, 8, 5, 3, 4, 6, 5], 11)
main()
输入样例:
无输入
结尾无空行
输出样例:
在这里给出相应的输出。例如:
0 4
1 3
2 5
5 6
def pairSum(lst, n):
for i in range(len(lst)-1):
for j in range(i+1, len(lst)):
if lst[i] + lst[j] == n:
print(i, j)
4.求最大和子列表 (20 分)
本题要求实现一个函数msslst(),带一个整数列表作为输入参数。要求函数计算并返回输入列表中的最大和子列表之和。最大和子列表是输入列表的子列表(切片),其各项之和最大。所有列表项都为负数,则最大和子列表为空子列表,空子列表的和定义为0。
函数接口定义:
msslst(lst)
lst为传入的整数列表。
裁判测试程序样例:
# 请在这里填写答案
def main():
s = input()
items = s.split()
lst = [eval(x) for x in items]
print(msslst(lst))
main()
输入样例1:
在这里给出一组输入。例如:
4 -2 -8 5 -2 7 7 2 -6 5
结尾无空行
输出样例1:
在这里给出相应的输出。例如:
19
结尾无空行
输入样例2:
在这里给出一组输入。例如:
3 4 5
结尾无空行
输出样例2:
在这里给出相应的输出。例如:
12
结尾无空行
输入样例3:
在这里给出一组输入。例如:
-2 -3 -5
结尾无空行
输出样例3:
在这里给出相应的输出。例如:
0
结尾无空行
def msslst(lst):
s = 0
for i in range(1, len(lst) + 1):
for j in range(len(lst) + 1 - i):
if sum(lst[j:j + i]) > s:
s = sum(lst[j:j + i])
return s
# def msslst(lst):
# max1 = 0
# lst_max = [0]
# for i in lst:
# max1 = max(max1 + i, i)
# lst_max.append(int(max1))
# return max(lst_max)
5.缩写期刊名 (10 分)
科研工作者经常要向不同的期刊投稿。但不同期刊的参考文献的格式往往各不相同。有些期刊要求参考文献所发表的期刊名必须采用缩写形式,否则直接拒稿。现对于给定的期刊名,要求按以下规则缩写: (1)长度不超过4的单词不必缩写; (2)长度超过4的单词仅取前4个字母,但其后要加“.”; (3)所有字母都小写。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试输入一个包含大小写字母和空格的字符串(长度不超过85),单词由若干字母构成,单词之间以一个空格间隔。
输出格式:
对于每组测试,在一行上输出缩写后的结果,单词之间以一个空格间隔。
输入样例:
2
Ad Hoc Networks
IEEE Transactions on Nanotechnology
输出样例:
ad hoc netw.
ieee tran. on nano.
t = eval(input())
s = []
for i in range(t):
s.append(list(input().split()))
for i in range(t):
l = ''
for j in range(len(s[i])):
if len(s[i][j]) <= 4:
l += s[i][j].lower() + ' '
else:
s[i][j] = s[i][j][:4]
l += s[i][j].lower() + '. '
print(l.strip())
6.输出<=n的全部回文数 (高教社,《Python编程基础及应用》习题4-5) (6 分)
数字121从左往右读与从右往左读是一样的,这种数称为回文数。请使用for循环以及切片方法设计一个程序, 找出>=0并且<=n的全部回文数。
注意:单个的数字0,数字1,… 数字9也认为是回文数。
输入格式:
n
输出格式:
多行输出,一行一个数
输入样例:
13
结尾无空行
输出样例:
0
1
2
3
4
5
6
7
8
9
11
n = eval(input())
for i in range(n + 1):
if str(i) == str(i)[::-1]:
print(i)
7.字典的应用-找出出现次数最多的字符串(高教社,《Python编程基础及应用》习题7-6) (3 分)
编写一个程序,从键盘读取未指定个数的字符串,一行一个,以字符串"q"为输入结束标志("q"不列入统计范围)。使用字典找出其中出现次数最多的字符串,打印该字符串及其出现次数。
注意:本题的测试用例中将保证只有一个字符串出现次数最多。
输入格式:
字符串1
字符串2
…
字符串n
q
输出格式:
字符串 出现次数
输入样例:
abc
abc
bcd
xxx
q
结尾无空行
输出样例:
abc 2
d = {}
while True:
s = input()
if s == 'q':
break
d[s] = d.get(s, 0) + 1
m = max(d.values())
for x, y in d.items():
if y == m:
print(x, y)
break
8.合并两个列表并去重 (6 分)
输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10; 合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。 可以使用以下实现列表alist的输入: alist=list(map(int,input().split())) 同时为保证输出结果一致,请将集合内元素排序之后再输出。 如对于列表alist,可输出sorted(alist)。
输入格式: 共两行,每一行都用来输入列表中的元素值,以空格隔开(可能不至一个空格 )。
输出格式: 共一行,以列表形式打印输出。
输入样例:
在这里给出一组输入。例如:
1 2 3
4 3 2
结尾无空行
输出样例:
在这里给出相应的输出。例如:
[1, 2, 3, 4]
alist = list(map(int, input().split()))
blist = list(map(int, input().split()))
for i in blist:
alist.append(i)
print(sorted(set(alist)))
# lis = list(set(alist + blist))
# print(sorted(lis))
9.奇偶数处理 (10 分)
这用户输入一系列整数,输入回车结束。将其中的奇数用 ‘+’ 连接输出,将其中偶数用 ‘-’ 连接输出。
输入格式:
每行输入一个正整数,输入回车结束输 入
输出格式:
两行,第一行输出用’-‘连接的偶数,第二行输出用’+'连接的奇数。
输入样例:
在这里给出一组输入。例如:
25
34
14
13
36
59
输出样例:
在这里给出相应的输出。例如:
34-14-36
25+13+59
list1, list2 = [], []
# n = input()
# while n != '':
# if n == '':
# break
# if int(n) % 2 == 0:
# list1.append(n)
# else:
# list2.append(n)
# n = input()
while True:
n = input()
if n == '':
break
if int(n) % 2 == 0:
list1.append(n)
else:
list2.append(n)
for i in list1[:-1]:
print(i, end="-")
print(list1[-1])
for j in list2[:-1]:
print(j, end="+")
print(list2[-1])
10.集合A-B (10 分)
求两个集合的差集。注意,同一个集合中不能有两个相同的元素。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入1行,每行数据的开始是2个整数n(0 < n ≤ 100)和m(0 < m ≤ 100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B。每两个元素之间以一个空格分隔。
输出格式:
针对每组测试数据输出一行数据,表示集合A-B的结果,如果结果为空集合,则输出“NULL”(引号不必输出),否则从小到大输出结果,每两个元素之间以一个空格分隔。
输入样例:
2
3 3 1 3 2 1 4 7
3 7 2 5 8 2 3 4 5 6 7 8
输出样例:
2 3
NULL
t = eval(input())
for i in range(t):
a, b = [], []
s = list(map(int, input().split(" ")))
n, m = s[0], s[1]
a = s[2:2 + n]
b = s[2 + n:]
# c = [item for item in a if item not in b]
c = set(a)-set(b)
c = sorted(c)
try:
for y in range(len(c) - 1):
print(c[y], end=" ")
print(c[-1])
except:
print("NULL")