python基础三

本文详细探讨了Python编程语言的基础知识,包括语法、数据类型、控制结构以及函数的使用。通过实例解析,帮助读者巩固和深化对Python编程的理解。
摘要由CSDN通过智能技术生成
"""
文件处理
    1.打开文件
        f = open(file,mode,encoding)
        file = 文件路径  
        路径表示方式:
        
            'E:\\offcn\\授课班级\\9.基地系统0902班\\Day15代码'
            r'E:\offcn\授课班级\9.基地系统0902班\Day15代码'
            'E:/offcn/授课班级/9.基地系统0902班/Day15代码'
        mode = 'r'
        w
        a
        b:二进制没有编码方式
        encoding = 'utf-8'
    2.文件读写
        读:
            read(n)
            readline()
            readlines()
        写:
            write()
            writelines()
    3.文件关闭
        f.close()

    4.with的使用
        with open() as f:

os模块:
    文件夹的处理
        创建
            mkdir()
        删除
            rmdir()
        递归创建
            a/b/c
            makedirs()
        递归删除
            removedirs()
        改名
            rename()
    文件的判断
        isdir()
        isfile()
    罗列子文件
        listdirs()
    判断文件是否存在
        os.path.exists()


"""
import time
import os
def funcOut(func):
    def funcIn(*args,**kwargs):
        start_time = time.time()
        v = func(*args,**kwargs)
        end_time = time.time()
        print(f'{func.__name__}执行耗时{end_time-start_time}秒')
        return v
    return funcIn

def copyfile(filepath):# E:\offcn\授课班级\9.基地系统0902班\Day15代码\demo01_知识回顾.py
    # 判断目标文件是否存在
    if os.path.exists(filepath):
        f1 = open(filepath,'r',encoding='utf-8')
        t = filepath.rpartition('.')
        newname = t[0]+'_副本'+ t[1]+t[2]
        f2 = open(newname,'w',encoding='utf-8')
        f2.write(f1.read())
        f1.close()
        f2.close()
        print(f'文件{filepath}复制完成')
    else:
        print('目标文件不存在')

"""

5.封装一个函数,可以实现类似操作系统的模糊查询功能(输入一个关键字,可以展示目标文件夹中包含关键字的所有文件)
#1. 文件名中包含关键字的
#2. 文件内容中包含关键字的
def search(dirpath,key):
	pass
"""
def search(dirpath,key):
    files = os.listdir(dirpath)
    for f in files:
        # 子文件的路径名
        newpath = dirpath+'/'+f
        if os.path.isfile(newpath):
            # 看文件名中是否包含关键字
            if key in newpath:
                print(newpath)
            # 如果文件名中不包含
            else:
                # 打开文件,读取内容,看是否包含
                with open(newpath,'r',encoding='utf-8') as f:
                    if key in f.read():
                        print(newpath)

        elif os.path.isdir(newpath):
            search(newpath,key)

path = r'E:\offcn\授课班级\9.基地系统0902班\Day15代码'
search(path,'.py')



"""
异常处理:
    try:
        可能会报错的代码
    except:
        异常捕获到后,给出提示

    try:
        pass
    except 异常 as 变量:
        pass

    try:
        pass
    except 异常1 as 变量:
        pass
    except 异常2 as 变量:
        pass
    。。。
    多个except执行路程等价于多分支的执行流程

    注意:
        一般情况下,子类异常写前边,父类异常写后边


需求:
    从键盘录入被除数与除数,求商,并打印结果

1.问题: ValueError:  数据类型有误
2.问题: ZeroDivisionError: division by zero

"""
# a = input('请输入被除数')
# b = input('请输入除数')
# # 1.ValueError:  数据类型有误
# a = int(a)
# b = int(b)
# # 2.问题: ZeroDivisionError: division by zero
# c = a / b
# print(f'商为:{c}')

# 优化后结果 v1.1

# a = input('请输入被除数')
# b = input('请输入除数')
# # 1.ValueError:  数据类型有误
# if a.isdigit() and b.isdigit():
#     a = int(a)
#     b = int(b)
#     # 2.问题: ZeroDivisionError: division by zero
#     if b != 0:
#         c = a / b
#         print(f'商为:{c}')
#     else:
#         print('0不能做除数')
# else:
#     print('输入有误')

# 使用异常处理优化代码 v1.2
# try:
#     a = input('请输入被除数')
#     b = input('请输入除数')
#     a = int(a)
#     b = int(b)
#     c = a / b
#     print(f'商为:{c}')
# except:
#     print('输入有误/数学错误')
# 使用异常处理优化代码 v1.3
# try:
#     a = input('请输入被除数')
#     b = input('请输入除数')
#     a = int(a)
#     b = int(b)
#     c = a / b
#     print(f'商为:{c}')
# except Exception as e:
#     print(e)
#     print(type(e))
#     print('输入有误/数学错误')
# 使用异常处理优化代码 v1.4 精准定位异常信息
try:
    a = input('请输入被除数')
    b = input('请输入除数')
    a = int(a)
    b = int(b)
    c = a / b
    print(f'商为:{c}')
except ValueError as v:
    print('输入有误')
except ZeroDivisionError as z:
    print('数学错误')
except Exception as e:
    print('其他异常')


"""

try:
    pass
except:
    pass
else:
    没有异常执行,如果之前遇到sys.exit() 会被跳过
finally:
    #不论之前的代码是否遇到异常终止,finally中的代码都会执行
    pass
    文件最后关闭
    数据库关系
    套接字关闭
    socket

except:
    的注意实现:
        如果没有匹配到对应的异常分支,会导致异常无法处理,同样会报错(抛出异常)



else 否能在哪使用?
break在哪使用?



需求:
打开文件123.txt,往文件中写入HelloWorld,关闭文件
"""

# f = open('123.txt',mode='w',encoding='utf-8')
# count = f.write('HelloWorld')
# print(f'成功写入文件中{count}个字符')
# f.close()
# print('文件成功关闭')
import sys
try:
    f = open('123.txt',mode='r',encoding='utf-8')
    print('打开文件')
    count = f.write('HelloWorld')
    print(f'成功写入文件中{count}个字符')
# except Exception as e:
#     print(e)
except ZeroDivisionError as e:
    print(e)
else:
    print('没有异常')
finally:
    f.close()
    print('文件关闭')


"""
抛出异常:
raise 异常对象
可以一定意义上规范调用者的行为


封装一个功能:
    查询列表中的最大值
"""
# str1 = 'abc123'
# try:
#     i = str1.index('d')
#     print(i)
# except Exception as e:
#     print(e)

def getmax(list1):
    if isinstance(list1,list):
        m = list1[0]
        for i in range(1,len(list1)):
            if m < list1[i]:
                m = list1[i]
        return m
    else:
        # 抛出异常
        raise ValueError('参数必须为列表对象')
        # raise ValueError()

# v = getmax(1,2,3)
# v = getmax(1)
# # print(v)

# 可以写在任意地方
# raise Exception('我就想抛出一个异常')



# 一共有多少个异常类?
# import builtins
# print(dir(builtins))

# 自定义异常类
class AgeError(Exception):
    def __init__(self,errMsg):
        self.errMse = errMsg

class Student:
    def __init__(self,name,age):
        self.name = name
        # self.age = age
        # 私有属性应该提供读写接口
        self.__age = age
    # 读
    def getAge(self):
        return self.__age
    def setAge(self,age):
        if 0 < age < 150:
            self.__age = age
        else:
            # print('年龄有误')
            raise AgeError('年龄设置有误')

stu1 = Student('学生1',19)
stu1.setAge(1000)

"""
大话设计模式:
设计模式?
    一些现有的比较成熟的解决问题的方案

单例模式:
    保证全局使用的对象是同一个对象

怎么去实现一个单例类?
    分配内存空间的方法   __new__



"""
# class A:
#     pass
# a = A()
#
# b = A()
#
# print(id(a))
# print(id(b))
# print(a is b)

# 购物车类
class ShoppingCart:
    # 类属性
    _cart = None
    def __new__(cls, *args, **kwargs):
        if not cls._cart:# if cls._cart == None:
            cls._cart = super().__new__(cls)
        return cls._cart

cart1 = ShoppingCart()
cart2 = ShoppingCart()
cart3 = ShoppingCart()
print(id(cart1))
print(id(cart2))
print(id(cart3))
"""
大话设计模式:
设计模式?
    一些现有的比较成熟的解决问题的方案

单例模式:
    保证全局使用的对象是同一个对象

怎么去实现一个单例类?
    分配内存空间的方法   __new__



"""
# class A:
#     pass
# a = A()
#
# b = A()
#
# print(id(a))
# print(id(b))
# print(a is b)

# 购物车类
class ShoppingCart:
    # 类属性
    _cart = None
    _firstInit = True
    def __new__(cls, *args, **kwargs):
        if not cls._cart:# if cls._cart == None:
            cls._cart = super().__new__(cls)
    nit = False

    # 添加商品的方法
    def append(self,obj):
        self.cart_list.a    return cls._cart
    def __init__(self):
        if ShoppingCart._firstInit:
            # 存储购买的商品
            self.cart_list = []
            # 修改控制开关
            ShoppingCart._firstIppend(obj)

cart1 = ShoppingCart()
cart1.append('iPhone 11 Pro')
cart1.append('Huwei M30')
print(cart1.cart_list)
print('--------------------')
# 结账页面
cart2 = ShoppingCart()
print(id(cart1))
print(id(cart2))
print(cart2.cart_list)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值