Python学习笔记:第三章 模块与包专项考核

本文为Python学习的模块与包部分的专项考核,包括五个问答题目:检查字符串特殊符号、输出日期范围、计算3D点间距离、正整数阶乘数字和以及多种斐波那契数列实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

考核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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值