Python小屋练手⑤编程自测题41-50

这是董付国老师的自测题的第五部分,41~50题

  1. 函数main接收若干字符串,如果第一个字符串包含从第二个往后的所有字符串,返回True,否则返回False。
    1
    2
    3
    4
    5
    6
    7
    def 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
  2. 函数main接收一个参数r,要求计算返回以r为半径的圆的面积,使用math模块中已经导入的圆周率PI,结果保留2位小数。如果参数r不是大于0的整数或实数,就返回字符串‘参数必须是大于0的整数或实数’。
    1
    2
    3
    4
    5
    from 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))
  3. 函数main接收一个包含若干正整数的列表lst,要求返回这些正整数首尾相接能够组成的最大数字。
    1
    2
    3
    4
    5
    6
    7
    8
    from 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)
  4. 假设其他共有n行n列小格子,在第一个小格子方1粒米,第二个小格子放2粒米,第三个小格子放4粒米,第四个小格子放8粒米,以此类推,以后每个小格子的米是前一个格子的2倍。函数main接收正整数n,计算n行n列期盼所有小格子里米粒的总数。
    1
    2
    3
    4
    5
    def main(n):
    total = 0
    for i in range(pow(n,2)):
    total += pow(2, i)
    return total
  5. 函数main接收包含若干字符串的列表lst,返回其中变成小写之后最大的字符串。如果参数lst不是列表或者其中的元素不都是字符串,返回字符串‘数据格式不正确’
    1
    2
    3
    4
    5
    def 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))]
  6. 函数main接收一个包含若干整数或实数的列表lst,要求返回其中出现次数最多的一个,如果有多余一个并列最多,就返回最大的一个。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def 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)
  7. 函数main接收表示三角形两个边长的实数a、b及表示它们家教的实数theta(单位为角度),要求根据余弦定理计算返回第三边长,保留一位小数。要求a和b都是大于0的实数,theta是介于(0,180)开区间的实数,否则返回‘数据不对’。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from 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 '数据不对'
  8. 函数main接收2个包含若干整数的列表vector1和vector2,要求检查两个列表是否长度相等且只包含整数或实数,如果是则计算并返回对应位置元素之差绝对值的和,否则返回字符串‘数据不对’。
    1
    2
    3
    4
    5
    6
    7
    8
    def 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 '数据不对'
  9. 函数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
    17
    def 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 '数据不对'
  10. 函数main接收一个正整数n,要求返回斐波那契数列中小于等于n的最大数。
    1
    2
    3
    4
    5
    6
    7
    def main(n):
    a,b = 0, 1
    while b < n:
    a, b = b, b+a
    if b == n:
    return b
    return a