Python进阶

字典

1.常用的数据结构中:列表、元组、字符串属于序列,而字典和集合属于非序列,元素无序,没有index索引。字典是映射(键值对)
2.所有key值不能重复,必须唯一,且一般使用字符串或数字。value值可以是任意类型

dict1={
    '名字':'姚明',
    '身高':226,
    '体重':180
}

#两层字典
dict2={
    '姚明':{
        '身高':226,
        '体重':180
    },
    '牢大':{
        '身高':202,
        '体重':150
    }
}

print(dict1['名字'])
print(dict2['牢大']['身高'])
print(dict1)

#修改字典元素
dict1['身高']=999
print(dict1)

#增加字典元素
dict1['朋友']='冰红茶24'
print(dict1)

#删除字典元素
dict1.pop('体重')
print(dict1)

#遍历字典元素-直接遍历
for key in dict1:
    print(f'key:{key}->value:{dict1[key]}')

#遍历字典元素-items()
items=dict1.items()
print(items)
for item in items:
    print(item)

#输出字典长度
print(len(dict1))

print(type(dict1)) #返回变量数据类型


#字典推导式
import random
dict1={i:random.randint(0,101) for i in range(1,6)}
print(dict1)

集合

Set集合也是一种非序列可变数据结构,没有index索引,元素无序。可以是任何数据类型,但是不能重复

#使用{}创建集合
set1={'梅西','罗纳尔多','罗纳尔迪尼奥'}
print(set1)

#使用set()函数创建
set1=set([1,2,3,4,5])
set2=set(('梅西','罗纳尔多','罗纳尔迪尼奥'))
set3=set({'名字':'牢大','喜好':'冰红茶','号码':'24'})
print(set1)
print(set2)
print(set3)

'''
注意:
    将其他数据结构转化为set,起到去重作用
'''
set1=set([1,2,3,3,4,5,6])
print(set1) #{1, 2, 3}

#集合的增删查,集合不能修改
set1.add(7)
set1.remove(6)
set1.clear() #清空集合

#集合的交集、并集、差集
set1={1,2,3,4}
set2={4,5,6,7}
print(set1&set2)
print(set1|set2)
print(set1-set2)

练习

在这里插入图片描述

#1.
address_dict={
    '孙悟空':'13800000001',
    '贝吉塔':'13800000002',
    '比鲁斯':'13800000003'
}

choice=input('请选择通讯录功能(1.添加联系人;2.删除联系人;3.查找联系人):')
names=address_dict.keys()
if choice=='1':
    name=input('请输入联系人姓名:')
    tel=input('请输入联系人电话:')
    if name not in names:
        address_dict[name]=tel
    else:
        print(f'联系人已存在:{name}')
if choice=='2':
    name=input('请输入联系人姓名:')
    tel=input('请输入联系人电话:')
    if name in names:
        address_dict.pop(name)
    else:
        print(f'联系人不存在:{name}')
if choice=='3':
    name=input('请输入联系人姓名:')
    if name in names:
        print(f'联系人姓名:{name} 电话:{address_dict[name]}')
    else:
        print(f'您输入的联系人不存在:{name}')
else:
    print(f'无效选项:{choice}')

在这里插入图片描述

#2.
names=set()
while str!='q':
    str=input('请输入客户姓名:')
    if str=='q':
        break
    else:
        names.add(str)
print(f'客户单为:{names}')

函数

def add(a,b):
    return a+b
print(add(1,2))


#可变参数-*parameter
def func(*foods):
    print('窝爱吃:',end='')
    for food in foods:
        print(food,end=' ')
    print()

func('凉面')
func('凉面', '榆次炸鸡', '老乡鸡')

#传递元组
foods=('凉面','榆次炸鸡','老乡鸡')
func(*foods)

#可变参数-**parameter-接收一个字典
def func1(**address):
    for key,value in address.items():
        print(f'姓名:{key} 电话:{value}')

func1(科比冰红茶='132000000',goat梅西='2546326')

address={'科比冰红茶':'132000000','goat梅西':'2546326'}
func1(**address)

#global关键字
def func2():
    global num #将局部变量定义为全局变量
    num=66
    print(num)

func2()
print(num)


'''lambda表达式'''
#函数
def func3(r):
    area=3.14*r*r
    return area

print(func3(3))

#lambda表达式
area=lambda r:3.14*r*r
print(area(3))

练习

在这里插入图片描述

list=[]
for i in range(1,101):
    if str(i).count('6')>=1:
        list.append(i)
print(list)

递归:求1!+2!+3!+…+n!

#2.递归:求1!+2!+3!+...+n!
n=int(input()) #input返回str类型,记得转成int
def jiecheng(n):
    if(n<=1):
        return 1
    return n*jiecheng(n-1)
sum=0
for i in range(1,n+1):
    sum+=jiecheng(i)
print(sum)

文件和目录的操作

'''
文件操作
'''
file1=open('1.txt',mode='r',encoding='utf8')

# file1=open(r'D:\pyworkspace\test\test1\1.txt',mode='r',encoding='utf8')

file1.close()

#with-open()更安全,with-open()语句执行完毕后,file文件对象会自动关闭
#读取文件
def func1():
    file1 = open('1.txt', mode='r', encoding='utf8')

    # str1=file1.read() #读取整个文件

    # str1 = file1.read(5)  # 读取前5个字符
    # str2 = file1.read(5)

    # str1=file1.readline() #一次读一行
    # str2 = file1.readline()

    list1=file1.readlines() #读取所有行放入列表

    # print(str1)
    # print(str2)
    print(list1)

    file1.close()

func1()

#写入文件
def func2():
    file2 = open('2.txt', mode='w', encoding='utf8')

    # str2='向新的一年\n向二手玫瑰致敬\n2024.5.30'
    # file2.write(str2) #当文件已存在会覆盖掉原内容,当文件不存在会创建新的文件

    #将字符串的列表写入文件
    list2=['向新的一年\n','向二手玫瑰致敬\n','2024.5.30']
    file2.writelines(list2)

    file2.close()

func2()

'''
目录操作
'''
import os

#获取绝对路径
print(os.path.abspath('1.txt')) #D:\pyworkspace\test\test1\1.txt

#拼接多个路径
'''这里不使用字符串拼接的原因:join()可以正确处理不同操作系统的分隔符'''
path=os.path.join(r'D:\pyworkspace\test\test1',r'1.txt')
print(path)

#判断路径是否存在
print(os.path.exists(path))


#创建目录
def func3():
    path=r'D:\pyworkspace\test\歌手2024'
    if os.path.exists(path)!=True:
        # os.mkdir(path,mode=0o777) #创建一级目录
        os.makedirs(path,mode=0o777) #创建多级目录

# func3()


#删除目录
def func4():
    path=r'D:\pyworkspace\test\歌手2024'
    if os.path.exists(path) == True:
        os.rmdir(path)

# func4()

#遍历目录
def func5():
    path = r'D:\pyworkspace\test\test1'
    lterator1=os.walk(path)
    for tuple in lterator1:
        print(tuple)
func5()

'''
高级文件操作
'''
#删除文件
def func6():
    os.remove('test.txt')

# func6()

#重命名文件或目录
def func7():
    # os.rename('cc.txt','xx.txt')
    os.rename('cc','xx')
# func7()

#获取文件信息
from datetime import date
def func8():
    fileinfo=os.stat('1.txt')
    print(f'文件大小:{fileinfo.st_size}bytes')
    print(f'文件创建时间:{fileinfo.st_ctime}')
    print(date.fromtimestamp(fileinfo.st_ctime))

func8()

练习

在这里插入图片描述

def func9():
    #1.读取数据
    # with-open()更安全,with-open()语句执行完毕后,file文件对象会自动关闭
    with open('score1.txt',mode='r',encoding='utf8') as file1:
        list1=file1.readlines()
    print(list1)

    #2.处理数据
    #2.1分割列表里的字符串
    list2=[]
    for line in list1:
        line=line.split() #根据空格分割为列表
        # print(line)
        sum=int(line[1])+int(line[2])+int(line[3])
        line.append(str(sum))
        print(line)

        line=' '.join(line)+'\n'
        list2.append(line)
    print(list2)

    #3.写入数据
    with open('score2.txt',mode='w',encoding='utf8') as file1:
        file1.writelines(list2)

func9()

面向对象编程

面向对象三大原则:
封装、继承、多态

类中的方法类型:
1.实例方法
2.类方法
3.静态方法
实际中,2 3用的少,只在一些特殊的场景中(例如工厂模式中)用到。

'''
面向对象和封装
'''
#定义类
class Dog():
    #属性
    classname='doggogog'

    #构造方法
    def __init__(self,name,color):
        self.name=name
        self.color=color

    def eat(self):
        print(f'{self.name}正在比利.肯粑')

    def bark(self):
        print('狗叫')

#创建与使用对象
dagou=Dog('大狗','冰红茶色')
ergou=Dog('二狗','青梅绿茶色')

print(dagou.classname)
print(ergou.eat())

'''
继承:
继承Dog类所有非私有属性和方法,并增加了一个destroy()方法
'''
class HuskyDog(Dog):
    
    def destroy(self):
        print('拆家')
        
'''
多态
'''
class ChinaDog(Dog):
    #覆盖(重写/override)父类同名方法
    def eat(self):
        print('吃肉')
        
class LondonDog(Dog):
    def eat(self):
        print('威士忌')

模块

import time

print(time.ctime())

#格式化输出时间
print(time.strftime('%Y-%m-%d:%H-%M-%S'))

import random

print(random.randint(1,10)) #返回1-10之间的随机整数

list=[1,2,3,4,5]

print(random.choice(list)) #返回序列中的随机元素

random.shuffle(list) #将序列随机打乱位置
print(list)

import math

print(math.ceil(3.14)) #向上取整

print(math.floor(3.14)) #向下取整

print(math.fabs(-3.14))

print(math.factorial(3)) #阶乘

print(math.pi)

数据库操作

  1. 连接数据库
  2. 获取游标对象
  3. 执行sql语句
  4. 获取查询结果集
  5. 提交事务,关闭游标和连接

错误和异常

错误会被pycharm编译器自动检测出来,有错误会导致程序无法运行。
异常在不运行的情况下很难被发现,异常会中断程序的运行,但可以在运行的过程中捕捉异常。

'''
异常的处理
'''
def foo1():
    for i in range(-2,3):
        try:
            print(50 / i)
        except Exception as e:
            print('除零异常',e)
        else:
            print('没有异常')
        finally:
            print('不管有没有异常都要执行')
        print('------------')

foo1()
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值