考核01:
问答题 (20分) 编写函数,检查字符串是否包含除了数字和字母(含大小写)之外的特殊符号。例如字符串learnpython110*7%%99hello,如果作为此函数的参数,则返回True
老师参考:
import re
def is_specific_char(s):
char_re = re.compile(r'[^a-zA-Z0-9.]')
string = char_re.search(s)
return bool(string)
s = 'learnpython110*7%%99hello'
print(is_specific_char(s))
# output
# True
小编参考:
def check_str(s):
import re
res = re.findall('[^a-zA-Z0-9]+', s)
return len(res) > 0
s = 'learnpython110*7 % %99hello'
f = check_str(s)
print(f)
考核02:
问答题 (20分) 假设开始日期是2019年12月25日,结束日期是2020年1月10日,编写程序,以诸如%Y-%m-%d(2019-12-26)的形式,输出开始日期到结束日期的所有日期(含开始和结束日期当天).
老师参考:
from datetime import timedelta, date
def daterange(date1, date2):
for n in range(int ((date2 - date1).days)+1):
yield date1 + timedelta(n)
start_dt = date(2019, 12, 25)
end_dt = date(2020, 1, 10)
for dt in daterange(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d"))
小编参考:
def output_date():
import datetime
stime = '2019-12-25'
etime = '2020-01-10'
start = datetime.datetime.strptime(stime, '%Y-%m-%d')
end = datetime.datetime.strptime(etime, '%Y-%m-%d')
while start <= end:
print(start.strftime('%Y-%m-%d'))
start += datetime.timedelta(days=1)
output_date()
考核03:
问答题 (20分) 编写程序,计算三维坐标中的点x = (5, 6, 7)和y = (8, 9, 9)之间的距离。
老师参考:
import math
x = (5, 6, 7)
y = (8, 9, 9)
distance = math.sqrt(sum([(a - b) ** 2 for a, b in zip(x, y)]))
小编参考:
def distance(x, y):
import math
d = (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2
return round(math.sqrt(d), 2)
a = (5, 6, 7)
b = (8, 9, 9)
d = distance(a, b)
print(d)
考核04:
问答题 (20分) 编写程序,计算正整数的阶乘,并将阶乘的结果中各个数字相加,最后得到其和。例如,6!= 720,7+2+0=9。
老师参考:
import math
def compute(n):
n = math.factorial(n)
ans = sum(int(c) for c in str(n))
return ans
小编参考:
def fac_sum(n):
from functools import reduce
s2 = str(reduce(lambda x, y: x*y, range(1, n+1)))
sums = 0
for i in s2:
sums = sums + int(i)
print(sums)
fac_sum(6)
考核05:
问答题 (20分) 至少用2种方法实现斐波那契数列。
老师参考:
# 法1:递归
def fib(n):
if n in (0, 1):
return n
return fib(n-1) + fib(n-2)
lst = [fib(i) for i in range(0, 10)]
print(lst)
# 法2:for循环
def fib2(n):
result = [0, 1]
for i in range(n-2):
result.append(result[-2] + result[-1])
return result
lst = fib2(10)
print(lst)
# 法3:while循环
def fib3(n):
a = 0
b = 1
i = 0
result = []
while i < n:
result.append(a)
a, b = a + b, a
i += 1
return result
print(fib3(10))
# 法4: 迭代器对象
class Fibs:
def __init__(self, max):
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = sefl.b, self.a + self.b
return fib
fibs = Fibs(100000)
lst = [fibs.__next__() for i in range(10)]
print(lst)
# 法5: 生成器
def fibs5():
prev, curr = 0, 1
while True:
yield prev
prev, curr = curr, prev + curr
import itertools
print(list(itertools.islice(fibs5(), 10)))
# 法6:矩阵
import numpy as np
def fib6(n):
F = np.mat([[1, 1], [1, 0]])
return pow(F, n)[0, 0]
lst = [fib6(i) for i in range(10)]
print(lst)
小编参考:
def fac_1(n):
result = [0, 1]
if n < 2:
return result
for i in range(n-2):
result.append(result[-1] + result[-2])
return result
def fac_2(n):
result = [0, ]
x, y = 0, 1
i = 1
while i < n:
result.append(y)
x, y = y, x+y
i += 1
return result
def fac_3(n):
def fac_tmp(n):
if n == 1 or n == 2:
return 1
else:
return fac_tmp(n-1) + fac_tmp(n-2)
result = [0, ]
for i in range(n-1):
i += 1
result.append(fac_tmp(i))
return result
n = 8
print(fac_1(n))
print(fac_2(n))
print(fac_3(n))