Python小屋练手④编程自测31-40

这是董付国老师的自测题的第四部分,31~40题

  1. 函数main接收一个正整数n,要求返回斐波那契数列中前n项的和。例如当n=4时,计算1、1、2、3四项之和为7。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def main(n):
    if n == 1:
    return 1
    elif n == 2:
    return 2
    lst = [1, 1]
    for i in range(2,n):
    lst.append(lst[i-1]+lst[i-2])
    return sum(lst)
  2. 函数main接收一个字符串s和正整数n,要求返回字符串s重复n次之后的长字符串,如果只传递s就返回重复3次得到的字符串。
    1
    2
    def main(s, n=3):
    return s*n
  3. 函数main接收一个字符串s和正整数n,其中n的大小不超过s的长度,要求返回字符串s循环左移n位之后的结果。
    1
    2
    def main(s, n):
    return s[n:]+s[0:n]
  4. 类Number用来模拟整数类型的部分操作,要求构造方法可以接收一个整数,并且支持2个Number对象的加法运算,返回一个Number对象,使用print()内置函数输出Number对象时得到Number对象内部实际的值。main函数接收2个Number对象,返回一个Number对象。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Number:
    def __init__(self, value):
    self.value = value
    def __add__(self, another):
    return Number(self.value + another.value)
    def __str__(self):
    return str(self.value)
    def main(x, y):
    return x+y
  5. 类Number模拟一个整数或实数类的部分操作,要求支持接收一个整数或者实数然后创建一个Number对象(如果初始值不是整数或实数,则设置内部数据成员的值为整数0),为Number实现属性value并支持返回和修改Number对象内部数据成员的值,要求内部数据成员只能为整数或实数,如果试图修改为非整数或者非实数时,保持原来的值不变。main函数接收2个整数或实数x,y为参数。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Number:
    def __init__(self, value):
    if type(value) != int and type(value) != float:
    self.__value = 0
    else:
    self.__value = value
    def __set(self, value):
    if type(value) == int or type(value) == float:
    self.__value = value
    def __get(self):
    return self.__value
    value = property(__get, __set)
    def main(x, y):
    obj = Number(x)
    obj.value = y
    return (type(obj), obj.value)
  6. 函数main接收任意多个表示电阻值的正整数,要求计算并返回这些电阻并联时的实际电阻值,结果保留1位小数。【多个电阻并联时,实际电阻的倒数为各个电阻值倒数之和】
    1
    2
    def main(*para):
    return '{:.1f}'.format(1/sum([1/x for x in para]))
  7. 函数main接收一个正整数n,要求判断其是否为黑洞数,如果是则返回True,否则返回False【黑洞数:各位数字所能组成的最大数与最小数之差恰好等于原来的数,比如954-459=495】
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def main(n):
    lst = list(str(n))
    lst.sort()
    iMin = int(''.join(lst))
    lst.reverse()
    iMax = int(''.join(lst))
    if iMax - iMin == n:
    return True
    else:
    return False
  8. 函数main接收一个正整数n,要求判断其是否为水仙数,如果是则返回True,否则返回False【水仙数:如果一个k为正整数n的各位数字的k次方之和恰好等于原来的数字n,那么n为水仙花数,比如153=111+555+333】
    1
    2
    3
    4
    5
    6
    7
    8
    def main(n):
    lst = list(str(n))
    k = len(lst)
    nLst = [pow(int(x), k) for x in lst]
    if sum(nLst) == n:
    return True
    else:
    return False
  9. 函数main接收一个包含若干整数的列表lst,要求返回其中所有数字绝对值之和。
    1
    2
    def main(lst):
    return sum([abs(x) for x in lst])
  10. 函数main接收一个字符串s,要求返回一个元组,其第一个元素是s使用UTF8编码之后的字符串,第二个元素是使用GBK编码之后的字符串。如果参数s不是字符串,返回‘参数必须为字符串’
    1
    2
    3
    4
    5
    def main(s):
    try:
    return ( s.encode("UTF-8"), s.encode("GBK") )
    except:
    return '参数必须为字符串'