函数main()接收一个包含若干整数的列表lst,要求返回一个新列表,新列表包含原列表lst中的唯一元素(重复的元素只保留一个),并且所有元素保持在原列表中首次出现的相对顺序。例如,调用函数main([1,2,3,1,4])会输出[1,2,3,4]。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。不能使用循环结构和任何形式的推导式。
# 解题思路:使用集合的唯一性去除重复元素,使用sorted保留相对位置
def fun(lst):
new_list = sorted(set(lst), key=lst.index)
return new_list
lst = [1, 5, 3, 1, 4, 5]
print(fun(lst))
山东省新高考政策中,考生必考科目有语文、数学、英语,然后需要在物理、化学、生物地理、历史、政治这6科中任选3个科目,自主选择的3个科目按等级分计入高考成绩。把每个科目的卷面原始成绩参照正态分布原则划分为8个等级,确定每个考生成绩所处的比例和等级,然后把原始成绩转换为对应的等级成绩。考生原始成绩所处的位次越靠前,计算得到的等级成绩越高。原始成绩的等级划分与等级成绩的对应关系如下:A等级(排名前3%)>[91,100];B+等级(3%-10%)>[81,90];B等级(10%-26%)>[71,80];C+等级(26%-50%)>[61,70];c等级(50%-74%)>[51,60];D+等级(74%-90%)>[41,501;D等级(90%-97%)>[31,401;E等级(97%-100%)>[21,30]。例如,小明选了化学,卷面原始成绩为77分,全省选考化学成绩从高到低排序后,小明的分数落在前3%-10%这个区间,这个区间内的最高分和最低分分别为79和70分,对应的等级成绩区间为[81,90],那么转换为等级成绩之后小明的分数为(77-70)/(79-70)*(90-81)+81=88分,小明最终成绩为88分。
函数main()接收参数score、grade、high、low分别表示考生卷面原始分数、所处等级、该等级卷面原始分数的最高分和最低分,要求计算并返回考生的等级成绩,结果保留最多3位小数。例如,main(77,‘B+’,79,70)返回88.0。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。
#从示例入手
grades = {'A': (91,100), 'B+': (81,90), 'B': (71,80),\
'C+': (61,70), 'C': (51,60), 'D+': (41,50),\
'D': (31,40), 'E': (21,30)}
def Score(score, grade, high, low):
grade_low,grade_high = grades[grade]
score_f = (score-low) / (high-low)*(grade_high-grade_low)+grade_low
return score_f
if __name__ == '__main__':
print(Score(77, 'B+', 79, 70))
函数main()接收一个包含若干整数的列表lst,要求判断列表中是否存在重复的整数。如果列表中所有整数完全一样则返回整数0,如果列表中的所有整数互不相同则返回整数1,如果列表中有部分整数相同则返回整数2。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。
#判断分支练习
def T_list(lst):
lst_l = len(lst)
set_l = len(set(lst))
if set_l == 1:
return 0
elif set_l == lst_l:
return 1
else:
return 2
if __name__ == '__main__':
lst1 = [1, 2, 3, 4, 5]
lst2 = [1, 2, 2, 5, 5]
lst3 = [1, 1, 1]
print(T_list(lst1))
print(T_list(lst2))
print(T_list(lst3))
函数main()接收两个正整数start和stop,要求返回区间[start,stop]上能够被17整除的最大正整数,如果没有这样的正整数就返回字符串’不存在"。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。
def demo(start,stop):
if (not isinstance(start,int)) or (not isinstance(start,int)) or (start<0) or (stop<0) or(stop<start):
return ('参数错误')
n = stop
while n >= start:
if n%17 ==0:
return n
n -= 1
else:
return('不存在')
if __name__ == '__main__':
print(demo(17,17))
编写程序,模拟报数游戏。有n个人围成一圈,从0到n-1按顺序编号,从第一个人开始从1到k报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。函数main()接收一个表示初始编号的列表1st和一个正整数k,要求返回上述游戏中最后一个人的原始编号。删除代码中的pass语句,替换为自己的代码,完成预期的功能。
from itertools import cycle
#圈子游戏
def func(lst, k):
#切片,以免影响原来的数据
t_lst = lst[:]
#游戏一直进行到只剩下最后一个人
while len(t_lst)>1:
#创建cycle对象
c= cycle(t_lst)#创建一个循环迭代器,无限循环遍历列表中的元素
#从1到k报数
for i in range(k):
t = next(c)
#一个人出局,圈子缩小
index = t_lst.index(t)
t_lst = t_lst[index+1:] + t_lst[:index]
#游戏结束
return t_lst[0]
lst = list(range(1,11))
print(func(lst,3))
函数main()接收两个datetime日期时间对象dt1和dt2,要求返回二者之间相差的总秒数,结果应为大于等于8的实数。例如,main(datetime(2021,2,3,7,52,15),datetime(20212,3,7,52,50))返回35.0,main(datetime(2021,2,2,2,2,2),datetime(2020,2,2,2,22))返回31622400.0,main(datetime(2021,2,3,7,52,0),datetime(2021,2,4,7,52,0))返回86400.0。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。
from datetime import datetime
def totalseconds_diff(dt1, dt2):
time_difference = (dt2 - dt1).total_seconds() #计算两个对象之间的总秒数差异。这里的差异:如果dt2在dt1之前,则是负数。
return abs(time_difference) #取绝对值
dt1 = datetime(2021,2,3,7,52,15)
dt2 = datetime(2021,2,3,7,52,50)
print(totalseconds_diff(dt1, dt2))
dt1 = datetime(2021,2,2,2,2,2)
dt2 = datetime(2020,2,2,2,2,2)
print(totalseconds_diff(dt1, dt2))
dt1 = datetime(2021,2,3,7,52,0)
dt2 = datetime(2021,2,4,7,52,0)
print(totalseconds_diff(dt1, dt2))
函数main()接收一个任意类型参数obi,检查其是否为迭代器对象,是则返回True,否则返回False。所谓迭代器对象,是指同时具有特殊方法__iter__()
和__next__()
的对象,例如生成器对象、map对象、enumerate对象、zip对象等都是迭代器对象。例如,main(enumerate(‘Python’))返回True.删除下面代码中的pass语句,替换为自己的代码,完成要求的功能
def is_iterator(obj):
'''
getattr()是一个Python内置函数,用于获取对象的属性值。函数的作用是从指定的对象中获取属性的值。如果属性存在,则返回属性的值;如果属性不存在,则根据情况返回默认值或者抛出AttributeError异常。
callable()是一个Python内置函数,用于检查对象是否可调用
'''
if callable(getattr(obj, '__iter__', None)) and callable(getattr(obj, '__next__', None)):
return True
else:
return False
# 示例测试
lst = [1, 2, 3]
print(is_iterator(lst)) # False
it = iter(lst)
print(is_iterator(it)) # True
在下面的代码中,函数main()用来计算并返回表达式ax+b的值,但要求使用outer类的对象来实现,不能在main()函数中直接计算。例如,main(3,5,7)返回37+5的结果26。阅读下面的代码,根据main()函数中的调用语句分析outer类可能的实现,删除pass语句替换为自己的代码,完成预期的功能。不能导入任何模块,不能修改main()函数中的代码。
class outer:
def __init__(self,a,b):
self.a = a
self.b = b
def __call__(self, x):
return self.a * x + self.b
def func(a, b, x):
return outer(a,b)(x)
print(func(3,5,7))
函数main()接收两个表示从坐标原点出发的二维向量的元组vector1和vector2,例如(3,0)表示从坐标原点(0,0)到坐标(3,0)的向量,要求返回两个向量vector1和vector2的夹角(单位为度,数值大小在0到180之间),并且要求结果恰好保留2位小数,例如向量(3,0)和(0,4)的夹角为90.00。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。代码已导入的标准库对象不是必须使用的,可以自己决定是否使用。
from operator import mul
from math import acos,degrees
def vector_angle(vector1, vector2):
ax, ay = vector1
bx, by = vector2
dot_product = mul(ax, bx) + mul(ay, by) #点积
#求模长
from math import sqrt
norm_a = sqrt(ax ** 2 + ay ** 2)
norm_b = sqrt(bx ** 2 + by ** 2)
#求夹角
cos_theta = dot_product / (norm_a * norm_b)
theta_rad = acos(cos_theta)
theta_deg = degrees(theta_rad)
return '{:.2f}'.format(theta_deg)
vector1 = (3, 0)
vector2 = (0, 4)
print(vector_angle(vector1, vector2))
函数main()接收一个元组digits作为参数,元组digits中每个元素都是range(10)范围内的数字,要求把digits中的数字按顺序拼接为一个整数,digits中第一个元素的数字为结果整数的最高位,最后一个元素的数字为结果整数的最低位。例如,main((1,2,3,4))返回1234。
删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。不能使用for循环,不能使用lambda表达式,不能导入任何模块,要求使用int()、map()函数。
def demo(digits):
result = int(''.join(map(str, digits)))
return result
digits = (1,4,3,5)
print(demo(digits))
函数main()接收一个任意字符串s,检查字符串s是否长度恰好为11且都为数字字符,返回True或False。删除下面代码中的pass语句,完成要求的功能。已导入的标准库re不是必须使用的,是否使用可以自己决定。
def func(s):
result = re.findall('\d',s)
if len(result)== 11:
return True
else:
return False
s = '12345678910'
print(func(s))
函数main()接收一个正整数参数num,要求返回其二进制形式中最多有多少个连续的1。例如,main(9875716481)返回4,因为9875716481的二进制形式为0b1001001100101000110111100110000001,其中最多有4个连续的1。删除下面代码中的pass语句,替换为自己的代码,完成要求的功能。已导入的re模块不是必须用的,是否使用可以自己决定。
import re
def func(num):
s = str(bin(num))
# print(s)
for i in range(len(s)):
result = re.findall('1*', s)
if result:
longest_match = max(result, key=len)
return len(longest_match)
print(func(9875716481)) #答案为4