Python小屋练手④编程自测31-40
这是董付国老师的自测题的第四部分,31~40题
- 函数main接收一个正整数n,要求返回斐波那契数列中前n项的和。例如当n=4时,计算1、1、2、3四项之和为7。
1
2
3
4
5
6
7
8
9def 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) - 函数main接收一个字符串s和正整数n,要求返回字符串s重复n次之后的长字符串,如果只传递s就返回重复3次得到的字符串。
1
2def main(s, n=3):
return s*n - 函数main接收一个字符串s和正整数n,其中n的大小不超过s的长度,要求返回字符串s循环左移n位之后的结果。
1
2def main(s, n):
return s[n:]+s[0:n] - 类Number用来模拟整数类型的部分操作,要求构造方法可以接收一个整数,并且支持2个Number对象的加法运算,返回一个Number对象,使用print()内置函数输出Number对象时得到Number对象内部实际的值。main函数接收2个Number对象,返回一个Number对象。
1
2
3
4
5
6
7
8
9class 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 - 类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
16class 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) - 函数main接收任意多个表示电阻值的正整数,要求计算并返回这些电阻并联时的实际电阻值,结果保留1位小数。【多个电阻并联时,实际电阻的倒数为各个电阻值倒数之和】
1
2def main(*para):
return '{:.1f}'.format(1/sum([1/x for x in para])) - 函数main接收一个正整数n,要求判断其是否为黑洞数,如果是则返回True,否则返回False【黑洞数:各位数字所能组成的最大数与最小数之差恰好等于原来的数,比如954-459=495】
1
2
3
4
5
6
7
8
9
10def 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 - 函数main接收一个正整数n,要求判断其是否为水仙数,如果是则返回True,否则返回False【水仙数:如果一个k为正整数n的各位数字的k次方之和恰好等于原来的数字n,那么n为水仙花数,比如153=111+555+333】
1
2
3
4
5
6
7
8def 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 - 函数main接收一个包含若干整数的列表lst,要求返回其中所有数字绝对值之和。
1
2def main(lst):
return sum([abs(x) for x in lst]) - 函数main接收一个字符串s,要求返回一个元组,其第一个元素是s使用UTF8编码之后的字符串,第二个元素是使用GBK编码之后的字符串。如果参数s不是字符串,返回‘参数必须为字符串’
1
2
3
4
5def main(s):
try:
return ( s.encode("UTF-8"), s.encode("GBK") )
except:
return '参数必须为字符串'