Python小屋练手⑤编程自测题41-50
这是董付国老师的自测题的第五部分,41~50题
- 函数main接收若干字符串,如果第一个字符串包含从第二个往后的所有字符串,返回True,否则返回False。
1
2
3
4
5
6
7def main(s1, s2, *s3):
if s1.find(s2) == -1:
return False
for i in range(len(s3)):
if s1.find(s3[i]) == -1:
return False
return True - 函数main接收一个参数r,要求计算返回以r为半径的圆的面积,使用math模块中已经导入的圆周率PI,结果保留2位小数。如果参数r不是大于0的整数或实数,就返回字符串‘参数必须是大于0的整数或实数’。
1
2
3
4
5from math import pi as PI
def main(r):
if type(r) != float and type(r) != int or r < 0:
return '参数必须是大于0的整数或实数'
return '{:.2f}'.format(PI * pow(r,2)) - 函数main接收一个包含若干正整数的列表lst,要求返回这些正整数首尾相接能够组成的最大数字。
1
2
3
4
5
6
7
8from itertools import permutations
def main(lst):
nLst = list(permutations(lst))
strV = ''.join(map(str, nLst[0]))
for i in range(1, len(nLst)):
if strV < ''.join(map(str,nLst[i])):
strV = ''.join(map(str,nLst[i]))
return int(strV) - 假设其他共有n行n列小格子,在第一个小格子方1粒米,第二个小格子放2粒米,第三个小格子放4粒米,第四个小格子放8粒米,以此类推,以后每个小格子的米是前一个格子的2倍。函数main接收正整数n,计算n行n列期盼所有小格子里米粒的总数。
1
2
3
4
5def main(n):
total = 0
for i in range(pow(n,2)):
total += pow(2, i)
return total - 函数main接收包含若干字符串的列表lst,返回其中变成小写之后最大的字符串。如果参数lst不是列表或者其中的元素不都是字符串,返回字符串‘数据格式不正确’
1
2
3
4
5def main(lst):
if not isinstance(lst, list) or not all(isinstance(x, str) for x in lst):
return '数据格式不正确'
nLst = [x.lower() for x in lst]
return lst[nLst.index(max(nLst))] - 函数main接收一个包含若干整数或实数的列表lst,要求返回其中出现次数最多的一个,如果有多余一个并列最多,就返回最大的一个。
1
2
3
4
5
6
7
8
9
10def main(lst):
t_dict = {}
for i in lst:
t_dict[i] = lst.count(i)
max_value = max(t_dict.values())
max_key = []
for k, v in t_dict.items():
if v == max_value:
max_key.append(k)
return max(max_key) - 函数main接收表示三角形两个边长的实数a、b及表示它们家教的实数theta(单位为角度),要求根据余弦定理计算返回第三边长,保留一位小数。要求a和b都是大于0的实数,theta是介于(0,180)开区间的实数,否则返回‘数据不对’。
1
2
3
4
5
6
7
8
9
10
11
12
13from math import cos, radians
def main(a, b, theta):
try:
a = float(a)
b = float(b)
theta = float(theta)
if a > 0 and b > 0 and 0 < theta < 180:
return '{:.1f}'.format( pow( (pow(a,2) + pow(b,2) - \
2 * a * b * cos(radians(theta))), 0.5 ) )
else:
return '数据不对'
except:
return '数据不对' - 函数main接收2个包含若干整数的列表vector1和vector2,要求检查两个列表是否长度相等且只包含整数或实数,如果是则计算并返回对应位置元素之差绝对值的和,否则返回字符串‘数据不对’。
1
2
3
4
5
6
7
8def main(vector1, vector2):
if isinstance(vector1, list) and isinstance(vector2, list) \
and all(isinstance(x, (int, float)) for x in vector1) \
and all(isinstance(x, (int, float)) for x in vector2) \
and len(vector1) == len(vector2):
return sum(list(map(lambda x, y: abs(x-y), vector1, vector2)))
else:
return '数据不对' - 函数main接收一个表示百分制成绩的实数score,要求返回对应的字母等级。A对应于[90,100],B对应于[80,89],C对应于[70,79],D对应于[60,69],F对应于[0,59],其他参数值一律返回字符串‘数据不对’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17def main(score):
try:
score = float(score)
if 90 <= score <= 100:
return 'A'
elif 80 <= score <= 89:
return 'B'
elif 70 <= score <= 79:
return 'C'
elif 60 <= score <=69:
return 'D'
elif 0 <= score <=59:
return 'F'
else:
return '数据不对'
except:
return '数据不对' - 函数main接收一个正整数n,要求返回斐波那契数列中小于等于n的最大数。
1
2
3
4
5
6
7def main(n):
a,b = 0, 1
while b < n:
a, b = b, b+a
if b == n:
return b
return a