python3 学习记录 day3 day4

这篇博客主要记录了Python3学习的第三天和第四天内容。Day 3介绍了简单学生管理系统的实现,包括添加、查找、修改和删除功能,并增加了对学生信息的限制。Day 4探讨了Python中的类和对象,讲解了如何创建学生类,以及如何通过main函数作为程序入口。文章还提到了在Python中如何避免模块导入时执行特定代码的方法。

Day 3

#类和对象

class Person:
    def __init__(self,name,sex,birthday):
        self.name=name
        self.sex=sex
        self.birthday=birthday
    def say(self,word):
        print(f'{self.name}:“{word}”')
tom = Person('Tom','male','20200202')
cat = Person('Cat','male','20200202')
tom.say('hello')
cat.say('hi')

简单学生管理系统 v1.0.0


data=[{'id':111,'name':'Tom','sex':'man','add':'1 street'}]

def show():
    for student in data:
        print(student)
def add():
    id=input('input id :')
    name=input('input name :')
    sex=input('input sex :')
    add=input('input add :')
    stu={
        'id':id,
        'name':name,
        'sex':sex,
        'add':add,
    }
    data.append(stu)

def find():
    name=input('input name:')
    for stu in data:
        if stu['name'] == name:
            print(stu)
            return
    else:
            print('none')

def alter():
    name = input('modify who ?:')
    for stu in data:
        if stu['name'] == name:
            print(stu)
            stu['name'] = input('input alter name:')
            stu['sex'] = input('input sex:')
            stu['add'] = input('input add:')
    else:
        print('none')


def delete():
    name = input('input name:')
    for stu in data:
        if stu['name'] == name:
            print(stu)
            data.remove(stu)
            return
    else:
        print('none')


while True:
    print(""" 
=======welcome to student management system=======
    1.show all student 
    2.add
    3.find
    4.alter
    5.delete
    0.exit  
    """)
    op=input('input number:')
    if op == '1':
        show()
    elif op == '2':
        add()
    elif op == '3':
        find()
    elif op == '4':
        alter()
    elif op == '5':
        delete()
    elif op == '0':
        print('exit')
        break

v2

data=[
{'name':'Tom','sex':'male','add':'1street'},
{'name':'Cat','sex':'female','add':'2street'},
{'name':'Max','sex':'male','add':'3street'}
]

增加索引id

def v2(data_list):
    for index,stu in enumerate(data_list):  #enumerate 可以拿到索引和值
        print(f'id:{index}', end='\t')
        print(f'name:{stu["name"]}',end='\t')
        print(f'sex:{stu["sex"]}',end='\t')
        print(f'add:{stu["add"]}')

选2 add的时候限制name不能为空

def input_name():
    while True:
        name = input('input name :').strip()  #去掉字符串头尾空格
        if name:
            return name
        else:
            continue

限制性别只能男/女

def input_sex():
    while True:
        print('1(male) | 2(female)')
        n = input('choose sex:')
        if n == '1':
            return 'male'
        elif n == '2':
            return 'female'
        else:
            continue

添加 改了两个地方

def add():
    name=input_name()
    sex=input_sex()
    add=input('input add :')
    stu={
        'name':name,
        'sex':sex,
        'add':add,
    }
    data.append(stu)

查找

def find():
    name=input(' who ?:')
    for stu in data:
        if stu['name'] == name:
            print(stu)
            return
    else:
            print('none')

修改

def alter():
    name = input(' who ?:')
    for stu in data:
        if stu['name'] == name:
            print(stu)
	        stu['name'] = input_name()
            stu['sex'] = input_sex()
            stu['add'] = input('input add:')
            return
    else:
        print('none')

删除

def delete():
    name = input('who ?:')
    for stu in data:
        if stu['name'] == name:
            print(stu)
            data.remove(stu)   #删除
            return
    else:
        print('none')

最后调用的跟v1一样

day 4

class 类和对象

学生数据

data=[
{'name':'Tom','sex':'male','birth':'111111'},
{'name':'Cat','sex':'female','birth':'22222'},
{'name':'Cat','sex':'male','birth':'333333'}
]

学生类
初始化 方便后面调用self.name =传进来的name

class Student:
    def __init__(self,name,sex,birth):
        self.name=name
        self.sex=sex
        self.birth=birth
     #获取学生年龄
    def get_age(self):
        if self.birth:
            year=datetime.now().date().year
            age=year-int(self.birth[:4])
            return age
        else:
            return 'none'

在这里插入图片描述
main函数作为程序的入口
与Java不同,python时从模块顶行开始执行,所以貌似不需要统一的main()作为入口
但是如果有部分代码不想在被导入到其他模块时被运行
则把代码放在if __name__=='__main__':
也就是说

#模块A
a=100
print('i am A‘)
if __name__=='__main__':
		print(a)
#模块B
from package1 import A 
b=200
print('i am B‘)
print(b)

输出
i am A
i am B
200

__name__是Python的内置变量,用于指代当前模块
模块被直接运行时,__name__的值就是__main__
导入了模块A,模块A中的__name__的值是模块的真实名称package1.A
而模块B中是__main__

传name = bili_student_system 调用System类 中的start()

if __name__=='__main__':
    sys=System("bili_student_system") 
    sys.start()

系统类
1、初始化 给self.name赋值 即 bili_student_system 一个空数组data[]

 class System:
    def __init__(self,name):
        self.name = name
        self.data=[]

启动start() 调用load_data() 和show_manu()和show()

    def start(self):
        #系统启动时先加载数据
        self.load_data()
        while True:
            self.show_manu()
            op=input('choose number:')
            if op == '1':
                self.show()
		    elif op == '2':
                self.add()                
            elif op == '3':
                self.find()
            elif op == '4':
                self.modify()
            elif op =='5':
                self.remove()
            elif op == '0':
                print('exit')
                break
            else:
                print('please input right num :')

这里的data指一开始定义的学生数据 加到刚才定义的空数组

  def load_data(self):
        for item in data:
            stu=Student(item['name'],item['sex'],item['birth'])
            self.data.append(stu)

显示菜单 #f-string {self.name}

  def show_manu(self):
        print(f""" 
        =======welcome to use {self.name}=======
            1.show all student 
            2.add
            3.find
            4.alter
            5.delete
            0.exit  
        """)

1、显示所有学生信息 调用beauty() 美化打印

    def show(self):
      self.beauty(self.data)
   def beauty(self,data_list):
        for index,stu in enumerate(data_list):
            print(f'id:{index}',end='\t')
            print(f'name:{stu.name}',end='\t')
            print(f'sex:{stu.sex:2}', end='\t')   #限制空间为2 对齐
            print(f'birth:{stu.get_age()}')

2、添加

 def add(self):
        name=self.input_name()
        sex = self.choose_sex()
        birth = input('input birth:')
        stu=Student(name,sex,birth)
        self.data.append(stu)

限制名字不能为空

 def input_name(self):
        while True:
            name = input('input name :').strip()
            if name :
                return name
            else:
                continue

性别男/女/未知

    def choose_sex(self):
        sex=input('1(male|2 female)').strip()
        if sex == '1':
            return 'male'
        elif sex == '2':
            return 'female'
        else:
            return 'none'

3、查找

    def find(self):
        find_list = self.find_name()

查找名字 以便反复使用

    def find_name(self):
        name=self.input_name()
        find_list=[]
        for stu in self.data:
            if name.lower() in stu.name.lower():
                find_list.append(stu)
        if find_list:
            return find_list
            self.beauty(find_list)
        else:
            print(f'no find {name}')

希望输入小写也能查到 模糊匹配
在这里插入图片描述
4、修改学生信息

    def modify(self):
        find_list = self.find_name()
        if find_list:
 #           self.beauty(find_list)
            if len(find_list) > 1 :
                index=int(input('choose modify index:'))   #输入的是字符串 要转换成整数
                stu = find_list[index]
            else:
                stu=find_list[0]

        print('now you modify :')
        self.beauty([stu])  #传列表
        name = input('modify name :').strip()   #不调用input_name 是因为可以不改名字
        sex = self.choose_sex()
        birth = input('modify birth :')
        if name:
            stu.name=name
        stu.sex =sex
        stu.birth =birth

5、删除学生信息

    def remove(self):
        find_list = self.find_name()
        if find_list:
            self.beauty(find_list)
            index = int(input('choose remove index:'))
            stu = find_list[index]
            print('now you remove :')
            self.beauty([stu])    #ctrl+shift+↑  移动到上一行
            self.data.remove(stu)

快捷键
按住CTRL 鼠标左键点击函数名跳转
ctrl+shift+↑ 移动到上一行
完整

from datetime import datetime
data=[
{'name':'Tom','sex':'male','birth':'20100101'},
{'name':'Cat','sex':'female','birth':'20020202'},
{'name':'Cat','sex':'male','birth':'20050505'}]
#学生类
class Student:
    #初始化
    def __init__(self,name,sex,birth):
        self.name=name
        self.sex=sex
        self.birth=birth
    #获取学生年龄
    def get_age(self):
        if self.birth:
            year=datetime.now().date().year
            age=year-int(self.birth[:4])
            return age
        else:
            return 'none'

#学生管理系统类
class System:
    #初始化
    def __init__(self,name):
        self.name = name
        self.data=[]
    #美化输出
    def beauty(self,data_list):
        for index,stu in enumerate(data_list):
            print(f'id:{index}',end='\t')
            print(f'name:{stu.name}',end='\t')
            print(f'sex:{stu.sex:2}', end='\t')
            print(f'birth:{stu.get_age()}')
    #加载数据
    def load_data(self):
        for item in data:
            stu=Student(item['name'],item['sex'],item['birth'])
            self.data.append(stu)
    #启动系统
    def start(self):
        #系统启动时先加载数据
        self.load_data()
        while True:
            self.show_manu()
            op=input('choose number:')
            if op == '1':
                self.show()
            elif op == '2':
                self.add()
            elif op == '3':
                self.find()
            elif op == '4':
                self.modify()
            elif op =='5':
                self.remove()
            elif op == '0':
                print('exit')
                break
            else:
                print('please input right num :')
    #显示菜单
    def show_manu(self):
        print(f""" 
        =======welcome to use {self.name}=======
            1.show
            2.add
            3.find
            4.modify
            5.delete
            0.exit  
        """)


    #查找名字
    def find_name(self):
        name=self.input_name()
        find_list=[]
        for stu in self.data:
            if name.lower() in stu.name.lower():
                find_list.append(stu)
        if find_list:
            self.beauty(find_list)
            return find_list
        else:
            print(f'no find {name}')


    #选择性别
    def choose_sex(self):
        sex=input('1(male|2 female) :').strip()
        if sex == '1':
            return 'male'
        elif sex == '2':
            return 'female'
        else:
            return 'none'


    #输入学生名字
    def input_name(self):
        while True:
            name = input('input name :').strip()
            if name :
                return name
            else:
                continue

    #1、显示所有学生信息
    def show(self):
      self.beauty(self.data)

    #2、添加学生信息
    def add(self):
        name=self.input_name()
        sex = self.choose_sex()
        birth = input('input birth:')
        stu=Student(name,sex,birth)
        self.data.append(stu)

    #3、查找学生信息
    def find(self):
        find_list = self.find_name()


    #4、修改学生信息
    def modify(self):
        find_list = self.find_name()
        if find_list:
 #           self.beauty(find_list)
            if len(find_list) > 1 :
                index=int(input('choose modify index:'))   #输入的是字符串 要转换成整数
                stu = find_list[index]
            else:
                stu=find_list[0]

        print('now you modify :')
        self.beauty([stu])  #传列表
        name = input('modify name :').strip()   #不调用input_name 是因为可以不改名字
        sex = self.choose_sex()
        birth = input('modify birth :')
        if name:
            stu.name=name
        stu.sex =sex
        stu.birth =birth




    #5、删除学生信息
    def remove(self):
        find_list = self.find_name()
        if find_list:
            self.beauty(find_list)
            index = int(input('choose remove index:'))
            stu = find_list[index]
            print('now you remove :')
            self.beauty([stu])    #ctrl+shift+↑  移动到上一行
            self.data.remove(stu)

if __name__=='__main__':
    sys=System("bili_student_system")
    sys.start()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值