1、递归函数
递归函数是一种在函数内部调用自身的函数。递归是一种强大的编程方法,常用于解决那些可以分解为更小、更简单的问题的问题。递归函数通常遵循以下定义:
- 基本案例(Base Case):递归函数必须有一个或多个基本情况,这些情况是函数不再调用自身就能直接求解的条件。基本情况是递归的停止条件,防止函数无限地调用自身。
- 递归步骤(Recursive Step):在递归步骤中,函数调用自身来处理一个规模更小的子问题。递归步骤通常会逐步接近基本情况。
- 递归调用(Recursive Call):递归函数内部对自身的调用
例题:
兔子的数量以这样的方式增长:每个月的兔子数量等于它前一个月的兔子数量加它前两个月的兔子数量,即f(n)=f(n-1)+f(n-2)。假设第1个月的兔子有2只,第2个月的兔子有3只,你能使用递归的方法求得第n个月的兔子有多少只吗?
- 已知:第1个月和第二个月的兔子数量
- 递归公式:f(n)=f(n-1)+f(n-2)
- 思路:调用自身函数得到前1个月和前2个月的兔子数量,到第一个月和第二个月时可以带入具体的值,将结果带入得到最终的数量
def rabbit_count(n):
if n == 1:
rcount = 2
elif n == 2:
rcount = 3
else:
rcount = rabbit_count(n-1) + rabbit_count(n-2)
return rcount
n = int(input())
print(rabbit_count(n))
2、定义一个类,实现相应功能
2.1 案例1
请为牛客网的员工创建一个Employee类,包括属性有姓名(name)、(salary),并设置初始化。同时该类包括一个方法printclass,用于输出类似'NiuNiu‘s salary is 4000, and his age is 22'的语句。
请根据输入的name与salary为该类创建实例e,并调用printclass方法输出信息,如果没有年龄信息则输出错误信息"Error! No age"。
根据输入的年龄为实例e直接添加属性age等于输入值,再次调用printclass方法输出信息。(printclass方法中建议使用try...except...结构)
import sys
#定义一个类
class Employee:
#初始化一个类
def __init__(self,name,salary):
self.name = name
self.salary = salary
def printclass(self):
try:
print(f"{self.name}'salary is {self.salary}, and his age is {self.age}")
except:
print("Error! No age")
name = str(input())
salary = int(input())
#创建一个实例
e = Employee(name,salary)
#调用函数
e.printclass()
age = int(input())
#增加一个属性
e.age = age
#重新调用函数
e.printclass()
""" 输入:
NiuNiu
8000
22 """
""" 输出:
Error! No age
NiuNiu'salary is 8000, and his age is 22 """
2.2 案例2
请为牛客网的员工创建一个Employee类,包括属性有姓名(name)、(salary),并设置初始化。同时该类包括一个方法printclass,用于输出类似'NiuNiu‘s salary is 4000, and his age is 22'的语句。
请根据输入的信息为Employee类创建一个实例e,调用hasattr方法检验实例有没有属性age,如果存在属性age直接调用printclass输出,否则使用setattr函数为其添加属性age,并设置值为输入后,再调用printclass输出。
import sys
class Employee:
def __init__(self,name,salary):
self.name = name
self.salary = salary
def printclass(self):
print(f"{self.name}'s salary is {self.salary}, and his age is {self.age}")
name = input()
salary = input()
age = input()
e = Employee(name,salary)
if hasattr(e,'age'):
e.printclass()
else:
print("False")
setattr(e,'age',age)
e.printclass()
3、正则表达式
3.1 正则查找网址
输出网址从开头匹配到第一位不匹配的范围
import re
print(re.match(r"https://www","https://www.Nowcoder.com").span())
#输出:(0,11)
re.match 是 Python 的 re 模块中的一个函数,用于在字符串的起始位置进行正则表达式的匹配。(1) 匹配模式:
re.match 只会在字符串的开始位置尝试匹配正则表达式,如果字符串的开头与正则表达式不匹配,re.match 将返回 None。
(2) 参数:
- pattern:这是第一个参数,表示要匹配的正则表达式。
- string:这是第二个参数,表示要搜索的字符串。
- flags(可选):这是第三个参数,用于修改正则表达式的行为,例如忽略大小(re.IGNORECASE 或 re.I)。
(3) 返回值:
如果匹配成功,re.match 返回一个匹配对象(Match Object),这个对象包含了关于匹配的信息,如匹配的字符串、匹配的位置等。 如果匹配失败,返回 None。
(4) 方法:
- .group():返回被正则表达式匹配的字符串。
- .start() 和 .end():返回匹配字符串在原字符串中的起始和结束位置的索引。
- .span():返回一个元组,包含匹配字符串在原字符串中的起始和结束位置的索引。
3.2 去除非数字字符
print(re.sub(r"\D","","2022-063-109NiuMei"))
#\D去除非数字字符
#输出:2022063109
print(re.sub(r"\d","","2022-063-109NiuMei"))
#\D去除数字字符
#输出:--NiuMei
re.sub 是 Python 的 re 模块中的一个函数,用于替换字符串中匹配正则表达式的部分。
(1) 参数:
- pattern:这是第一个参数,表示正则表达式模式。
- repl:这是第二个参数,表示替换匹配字符串的字符串或一个函数。
- string:这是第三个参数,表示要被搜索并替换的原始字符串。
- count(可选):这是第四个参数,表示要替换的最大次数,默认值为 0,表示替换所有匹配的字符串。
- flags(可选):这是第五个参数,用于修改正则表达式的行为,例如忽略大小写(re.IGNORECASE 或 re.I)。
(2)返回值:
返回一个新的字符串,其中原始字符串中所有匹配正则表达式的部分都被替换成了 repl 指定的字符串或通过 repl 函数返回的字符串。
这个板块终于结束了!!!
标签:salary,name,re,python,age,输入输出,--,字符串,self From: https://blog.csdn.net/qq_65509025/article/details/142623976