> 文档中心 > 牛客刷题总结——Python入门08:面向对象、正则表达式

牛客刷题总结——Python入门08:面向对象、正则表达式

在这里插入图片描述

🤵‍♂️ 个人主页: @北极的三哈 个人主页

👨‍💻 作者简介:Python领域优质创作者。

📒 系列专栏:《牛客题库-Python篇》

🌐推荐《牛客网》——找工作神器|笔试题库|面试经验|实习经验内推求职就业一站解决

👉 点击链接进行注册学习

牛客刷题总结——Python入门08:面向对象、正则表达式

文章目录

    • 011 面向对象 NP94 - NP100
      • 1.面向对象三大特征
      • 2.特殊方法
      • 3.深拷贝与浅拷贝
      • NP94 函数求差
      • NP95 兔子的数量
      • NP96 球的表面积
      • NP97 班级管理
      • NP98 修改属性1
      • NP99 修改属性2
      • NP100 重载运算
    • 012 正则表达式 NP101 - NP103
      • NP101 正则查找网址
      • NP102 提取数字电话
      • NP103 截断电话号码
      • **`推 荐:牛客题霸-经典高频面试题库`**

011 面向对象 NP94 - NP100

Python面向对象学习链接
牛客刷题总结——Python入门08:面向对象、正则表达式

1.面向对象三大特征

封装:将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。

继承:子类可以继承父类的属性和方法,提高代码的复用性。

多态:多态就是具有多种形态,即便不知道一个变量所引用的对象是什么类型,仍然可以使用这个变量调用方法。

2.特殊方法

特殊方法 描述
__len__() 通过重写 __len__()方法,让内置函数len()的参数可以是自定义类型
__add__() 通过重写__add__()方法,可以让自定义对象具有+的功能
__new__() 用于创建对象
__init__() 对创建的对象进行初始化

3.深拷贝与浅拷贝

浅拷贝

  Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象。

深拷贝

  使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同。

NP94 函数求差

在线编程跳转链接

def cal(a, b):    return a - bx = int(input())y = int(input())print(cal(x, y))print(cal(y, x))

NP95 兔子的数量

在线编程跳转链接

def f(n):    if n==1: return 2    if n==2: return 3    else: return f(n-1)+f(n-2)n=int(input())print(f(n))

NP96 球的表面积

在线编程跳转链接

import math as mt def vol(n):    return 4*mt.pi*(n**2) list1=[1, 2, 4, 9, 10, 13]for n in list1:    print(round(vol(n),2))

NP97 班级管理

在线编程跳转链接

class Student:    def __init__(self, name, stu_num, score, grade): self.name = name self.stu_num = stu_num self.score = score self.grade = grade    #__str__方法用于返回对象的描述信息,如果不使用__str__方法,直接print,或者return,返回的是对象的内存地址。    def __str__(self):  return ("%s's student number is %s, and his grade is %d. He submitted %s assignments, each with a grade of %s"  % (self.name, self.stu_num, int(self.score), len(self.grade.split()), self.grade)) name1 = input()stu_num1 = input()score1 = input()grade1 = input()stu = Student(name1, stu_num1, score1, grade1)print(stu)

NP98 修改属性1

在线编程跳转链接

class employee:    def __init__(self,name,salary,age=-1): self.name=name self.salary=salary self.age=age    def printclass(self): if self.age==-1:     print("Error! No age") else:     print("{}'salary is {}, and his age is {}".format(self.name,self.salary,self.age))a=input()b=int(input())c=int(input())e=employee(a,b)e.printclass()e.age=c e.printclass()

NP99 修改属性2

在线编程跳转链接

class Employee():    def __init__(self, name, salary) -> None: self.name = name self.salary = salary    def printclass(self): print(f"{self.name}'salary is {self.salary}, and his age is {self.age}")   name = input()salary = int(input())age = int(input()) e = Employee(name, salary)if hasattr(e,'age'):    e.printclass()else:    print(False)    setattr(e,"age",age)    e.printclass()

NP100 重载运算

在线编程跳转链接

class Coordinate():    def __init__(self, x, y): self.x = x self.y = y      def __str__(self): print((self.x, self.y))      def __add__(self): self.x = x1 + x2 self.y = y1 + y2x1, y1 = map(int, input().split()) # 1.输入第一行两个数字x2, y2 = map(int, input().split())  # 1.输入第二行两个数字 c1 = Coordinate(x1, y1)  # 2. 调用类c1.__add__()  # 3. 调用__add__()函数,实现两组数据分别对应相加c1.__str__()  # 4. 调用__str__()函数,打印(相加之后的x, 相加之后的y)

012 正则表达式 NP101 - NP103

牛客刷题总结——Python入门08:面向对象、正则表达式
示例:
1、验证账号是否合法(字母开头,允许5-16字节,允许字母数字下划线)。

2、验证密码是否合法(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)

3、匹配是否全是汉字。

4、验证日期格式(2020-09-10)

5、验证身份证号码。

"""1、验证账号是否合法(字母开头,允许5-16字节,允许字母数字下划线)。2、验证密码是否合法(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)3、匹配是否全是汉字:4、验证日期格式(2020-09-10)5、验证身份证号码。"""import re# 1.验证账号是否合法(字母开头,允许5-16字节,允许字母数字下划线)。print(re.match(r'^[a-zA-z]\w{4,15}$', 'a3443wre5678rfgh').group())# 2、验证密码是否合法(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)print(re.match(r'^[a-zA-Z]\w{5,17}$', 'd697g798bv9d44444e').group())# 3.匹配是否全是汉字:print(re.match('^[\u4e00-\u9fa5]{0,}$', '哈哈').group())# 4.验证日期格式(2020-09-10)# print(re.match(r'^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$', '2020-09-10').group())# 5.验证身份证号码。print(re.match(r'^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$', '533326200006013333').group())

NP101 正则查找网址

在线编程跳转链接

import rehttp = input()result = re.match('https://www',http,re.I)print(result.span())

NP102 提取数字电话

在线编程跳转链接

import re#导入模块 p=r'[-A-Za-z]+'#第一个‘-’表示字符‘-’,A-Za-z表示匹配大小字母#‘+’号表示连续匹配 text=input()#输入测试字符串 print(re.sub(p,'',text))#利用sub()函数过滤再输出

NP103 截断电话号码

在线编程跳转链接

import res = input()r = re.match('[0-9-]+',s)print(r.group())

推 荐:牛客题霸-经典高频面试题库

🌐 找工作神器-|笔试题库|面试经验|大厂面试题 👉 点击链接进行注册学习
牛客刷题总结——Python入门08:面向对象、正则表达式