编程语言
首页 > 编程语言> > Python学习NO3

Python学习NO3

作者:互联网

PythonNO.3

文章目录

一、异常处理机制

Python异常处理机制:try-except -else-finally:

1.try: 可能出现异常

2.except 异常类型 as e: 出现异常执行

3.else : 不出现异常执行

4.finally: 无论有没有出现异常都会执行

{相当于Java的try-catch}
在这里插入图片描述

try:
    num1 = int(input("请输入第一个数:"))
    num2 = int(input("请输入第二个数:"))
    sum = num1 / num2

except ZeroDivisionError as e:
    print('分母不能为0!')
    print(e)
except ValueError as e:
    print('请输入int型数据')
    print(e)  #invalid literal for int() with base 10: 'q'
else:
    print('sum=', sum)
finally:
    print('无论有没有出现异常都会执行')
'''
traceback模板打印异常信息 
'''
import traceback
try:

    print('=============================')# 位置会改变
    print(10/0)
except :
    traceback.print_exc()


二、类和对象

Python中一切皆对象

1.定义类

与Java中一致,与Java不同的是,,类名不一定要与file名称一样
类的组成:类的属性,实例方法,静态方法,类方法
类的__init__(self)方法用于创建的对象进行初始化

class Student:
    native_place='江西理工'  #类属性
    def __init__(self,name,age): #name,age为实例属性
        self.name=name  #self.name 称为实例属性,进行了一个赋值操作,将局部变量的name赋值给实例属性
        self.age=age
    print("哈哈哈哈")
    #实例方法
    def ff(self):
        print("这是一个实例方法")
    #类方法
    @classmethod
    def cm(clsc):
        print("这是一个类方法")
    #静态方法
    @staticmethod
    def sm():
        print("这是一个静态方法")

def show():
    print("这是一个函数")

print(id(Student)) #1867676104832
print(type(Student)) #<class 'type'>
print(Student) #<class '__main__.fun'>
#类的对象的调用
stu=Student("张三",15)
stu.ff()#Student.ff(stu)
stu.gender='女'  #动态绑定属性
print(id(stu))
print(type(stu))
print(stu.native_place)
print(stu.gender)
stu.show=show   #动态绑定方法
stu.show()

2.面向对象的三大特征

面向对象的三大特征:封装,继承,多态
封装:self.__age=age(加两个下划线).在外部使用封装:stu._Student__age
继承:class 子类类名(父类1,父类2)

class Student:
    def __init__(self,name,age):
        self.name=name
        self.__age=age #封装
    def show(self):
        print(self.name,self.__age)

stu=Student('张三',19)
stu.show()
print(stu.name)
print(dir(stu))
print(stu._Student__age)


class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print(self.name,self.age)

class Student1(Person):
    def __init__(self,name,age,stuno):
        super().__init__(name,age)
        self.stuno=stuno

class Teacher(Person):
    def __init__(self,name,age,teachno):
        super().__init__(name,age)
        self.teachno=teachno

stu1=Student1("小米",16,20)
stu1.info()

3.特殊属性和方法:

属性:1.dict:获得类对象或实例对象所绑定的所有属性和方法的字典
方法:1.len():通过重写_len_()方法,让内置函数len()的参数可以是自定义类型
2.add():通过重写_add_()方法,课使用自定义对象有“+”功能,重写可以是字符串的相加链接
3.new():用于创建对象
4.init():对创建的对象进行初始化

class A:
    pass
class B:
    pass
class C(A,B):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __add__(self, other):
        return  self.name+other.name

x1=C("kk",21)    #x为实例对象
print(x1.__dict__)  #{'name': 'kk', 'age': 21}
print(C.__dict__)  #{'__module__': '__main__', '__init__': <function C.__init__ at 0x0000013924A6E790>, '__doc__': None}
a=10
b=20
c=a.__add__(b)
print(c) #30
x2=C("ss",18)
print(x1.__add__(x2))   #kkss

class Person1:
    def __init__(self,name,age):
        print("__init__被调用执行了,self的id值为{0}".format(id(self)))
        self.name = name
        self.age = age
    def __new__(cls, *args, **kwargs):
        print("__new__被调用执行了,cls的id值为{0}".format(id(cls)))
        obj=super().__new__(cls)
        print("创建的对象的id值为{0}".format(id(obj)))
        return obj

p=Person1("zz",15)

三、模块

在这里插入图片描述
在这里插入图片描述

四、文件

1.文件读写操作:

1.Python操作文件
2.打开或新建文件,创建文件对象:file=open(filename[,mode,encoding])
#mode:打开模式默认为只读,encoding:默认文本文件中字符的编写格式为gbk
3.读,写文件
4.关闭资源
在这里插入图片描述

file=open("a.txt","w")
file.write("kkkk")
file.close()

#文件对象的常用方法
file1=open("b.txt","r")
file1.seek(2)
print(file1.read())
print(file1.tell()) #13
file1.close()

在这里插入图片描述

2.with语句

在这里插入图片描述

可以自动管理上下资源,不论声明原因跳出with块。都能确保文件正确的关闭,以此达到释放资源的目的

with open("b.txt","r") as file:
    print(file.read())

with open("背景.png","rb") as src_file:
    with open("logo.png","wb") as target_file:
        target_file.write(src_file.read())  #文件复制,不需要手动关闭

3.os和os.path模块

os:模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句执行结果通常与操作系统有关,
在不同的操作系统上运行,得到的结果可能不同
os与os.path模块用于对目录或文件进行操作
1.os模块操作目录相关函数
在这里插入图片描述
2.os.path模块操作目录相关函数
在这里插入图片描述


import os
print(os.getcwd())  #D:\pycharm\workspace\NO4


import os.path
print(os.path.abspath("Demo02.py"))
print(os.path.exists("Demo01.py"))
print(os.path.exists("Demo09.py"))
print(os.path.join("NO4","Demo01.py"))  #NO4\Demo01.py

五、学生管理系统

import os
filename = "students.txt"
def main():
    while True:
        menu()
        choice = int(input("请选择:"))
        if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
            if choice == 0:
                answer = input("您确定要退出系统吗?y/n")
                if answer == "y" or answer == "Y":
                    print("谢谢使用!!!")
                    break
                else:
                    continue
            elif choice == 1:
                print("录入学生信息")
                insert()
            elif choice == 2:
                print("查找学生信息")
                search()
            elif choice == 3:
                print("删除学生信息")
                delete()
            elif choice == 4:
                print("修改学生信息")
                modefy()
            elif choice == 5:
                print("排序")
                sort()
            elif choice == 6:
                print("统计学生总人数")
                total()
            elif choice == 7:
                print("显示所有学生信息")
                show()
        else:
            print("输入错误,请重新输入")


def menu():
    print("========================学生信息管理系统===================")
    print("--------------------------功能菜单-----------------------")
    print("\t\t\t\t1.录入学生信息")
    print("\t\t\t\t2.查找学生信息")
    print("\t\t\t\t3.删除学生信息")
    print("\t\t\t\t4.修改学生信息")
    print("\t\t\t\t5.排序")
    print("\t\t\t\t6.统计学生总人数")
    print("\t\t\t\t7.显示所有学生信息")
    print("\t\t\t\t0.退出")
    print("--------------------------------------------------------")
    
if __name__ == '__main__':
    main()

1.录入学生信息

def insert():  # 录入学生信息
    studentList = []
    while True:
        id = input("请输入学生学号(1001):")
        if not id:
            break
        name = input("请输入学生姓名:")
        if not name:
            break
        try:
            english = int(input("请输入学生英语成绩:"))
            python = int(input("请输入学生Python成绩:"))
            java = int(input("请输入学生Java成绩:"))
        except:
            print("输入无效,请重新输入")
            continue
        student = {"id": id, "name": name, "English": english, "Python": python, "Java": java}
        studentList.append(student)
        save(studentList)
        print("学生信息录入完毕")
        answer = input("是否继续添加y/n")
        if answer == "y" or answer == "Y":
            continue
        else:
            print("谢谢使用!!!")
            break


def save(lst):
    try:
        stu_txt = open(filename, "a+", encoding="utf-8")
    except:
        stu_txt = open(filename, "w", encoding="utf-8")
    for item in lst:
        stu_txt.write(str(item) + "\n")
    stu_txt.close()


2.删除学生信息

def delete():
    while True:
        student_id = input("请输入学生的ID:")
        if student_id != "":
            if os.path.exists(filename):
                with open(filename, "r", encoding="utf-8") as file:
                    student_old = file.readlines()
            else:
                student_old = []
            flag = False
            if student_old:
                with open(filename, "w", encoding="utf-8") as wfile:
                    d = {}
                    for item in student_old:
                        d = dict(eval(item))  # 将字符串转换成字典
                        if d['id'] != student_id:
                            wfile.write(str(d) + "\n")
                        else:
                            flag = True
                    if flag:
                        print(f"id为{student_id}的学生信息已删除")
                    else:
                        print(f"没有找到id为{student_id}的学生")
            else:
                print("无学生信息")
                break
            show()
            answer = input("是否继续删除y/n")
            if answer == "y" or answer == "Y":
                continue
            else:
                print("谢谢使用!!!")
                break

3.查找学生信息

def search():
    student_query=[]
    while True:
        id=""
        name=""
        if os.path.exists(filename):
            mode=input("按ID查询输入1,按姓名查询输入2:")
            if mode=='1':
                id=input("请输入学生ID:")
            elif mode=='2':
                name=input("请输入学生姓名:")
            else:
                print("您的输入有误")
                search()
            with open(filename, "r", encoding="utf-8") as rfile:
                student=rfile.readlines()
                for item in student:
                    d=dict(eval(item))
                    if id!="":
                        if d['id']==id:
                            student_query.append(d)
                    elif name!="":
                        if d['name']==name:
                            student_query.append(d)
        else:
            print("暂未保存学生信息")
            return

4.修改学生信息

def modefy():
    show()
    if os.path.exists(filename):
        with open(filename, "r", encoding="utf-8") as rfile:
            student_old = rfile.readlines()
    else:
        return
    student_id = input("请输入要修改的学员的ID:")
    with open(filename, "r", encoding="utf-8") as wfile:
        for item in student_old:
            d = dict(eval(item))
            if d['id'] == student_id :
                print("找到学生信息,可以修改相关信息了!")
                while True:
                    try:
                        d['name'] = input("请输入学生姓名:")
                        d['english'] = input("请输入学生英语成绩:")
                        d['python'] = input("请输入学生Python成绩:")
                        d['java'] = input("请输入学生Java成绩:")
                    except:
                        print("您的输入有误")
                    else:
                        break
                wfile.write(str(d) + "\n")
                print("修改成功")
            else:
                wfile.write(str(d) + "\t")
            answer = input("是否继续修改y/n")
            if answer == 'y' or answer == "Y":
                modefy()

标签:__,name,Python,self,学习,age,print,id,NO3
来源: https://blog.csdn.net/XST1520203418/article/details/116351899