Python编程基础-下篇 1.1-1.6 【全】

本文介绍了Python的基础知识,包括集合的创建、操作及其去重功能;条件判断语句的单分支、双分支和多分支结构;循环语句中的for和while循环,以及循环控制;文件的读写操作,如txt文件的读写和二进制文件的处理;函数的定义、调用、默认参数、非固定参数和返回值;最后,还涉及了一些高阶函数如lambda、map、filter和reduce的使用。内容深入浅出,适合初学者学习。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Python编程基础-下篇

1.1 集合

  1. 形式上 {} ,其中两个相同的元素使用逗号分割
  2. 集合的主要作用,就是去重,因为集合中每一个元素都是唯一的!
  3. 集合的性质
    • 确定性
    • 互异性
    • 无序性
  4. 一些函数
a.add(a.intersection(a.remove(
a.clear(a.intersection_update(a.symmetric_difference(
a.copy(a.isdisjoint(a.symmetric_difference_update(
a.difference(a.issubset(a.union(
a.difference_update(a.issuperset(a.update(
a.discard(a.pop(
  1. 集合的去重
num1=[1,1,2,2,3,3]
num2=[2,2,3,3]
set(num1)#去重
{1, 2, 3}
set(num2)#去重
{2, 3}
  1. 集合的运算
  • set1 - set2 # 差集 difference
  • set1 & set2 # 交集 intersection
  • set1 | set2 # 并集 union
  • set1 ^ set2 # 对称差集 symmetric_difference
set1=set(num1)
set2=set(num2)
set1 - set2  # 差集 difference
{1}
set1 | set2 # 并集  union
{1, 2, 3}
set1 ^ set2 # 对称差集,symmetric_difference,并集-交集
{1}
set1 & set2  # 交集 intersection
{2, 3}

1.2条件判断语句

  1. 语句
  • 单分支
    if 条件1:
    满足条件后要执行的代码
  • 双分支
    if 满足条件1:
    满足条件后执行的代码
    else:
    不满足执行的代码
  • 多分支
    if 满足条件1:
    满足条件后执行的代码
    elif满足条件2:
    满足条件后执行的代码
    ……
    else:
    不满足条件执行的代码
#单分支条件判断
grade=90
if grade>=60:
    print('你及格了!')
你及格了!
#双分支条件判断
grade=90
if grade>=60:
    print('你及格了!')
else:
        print('你完了')
你及格了!
#多分支条件判断
grade=(input('成绩'))
if grade.isdigit():
    grade=int(grade)
    if 90<=grade<=100:#等价于(grade<=100) and (grade>=90)
        print('成绩A')
    elif 80<=grade<90:
        print('成绩B')
    elif 70<=grade<80:
        print('成绩C')    
    elif 60<=grade<70:
        print('成绩D')
    elif 0<=grade<60:
        print('成绩E,你完了')
    else:
        print('非法输入')
else:
    print('请输入正确数字')
成绩89
成绩B
  1. 逻辑
  • and同时满足两个或以上
  • or 满足两个或两个以上中的任意一个
  • not 不满足
  1. Python的缩进
  • 顶级代码必须定顶格书写,即一行代码不依赖任何条件,不可进行缩进
  • 同一级代码,缩进相同
  • 官方建议用四个空格,或者直接按Tab

1.3循环语句

3.10版本前有两种循环,新版本添加了Switch循环
  1. 重复一定的次数,称为计次循环,for 循环
    for 迭代变量 in 对象
    循环体

  2. 直到条件满足,才结束循环,只要条件为真,这种循环就一直进行下去,称为条件循环,即while循环。
    只要条件为真,这种循环一直持续下去,通过一个表达式,来控制是否继续反复执行循环体中的语句

     	 while 条件表达式:
           	       循环体
    

1.3.1计次循环for

  • range() #内置函数,用于生成一系列连续整数,多用于for循环
# range(start,end,step)
for i in range(0,10,2):
    print(i)
0
2
4
6
8
  • append() 利用循环将数据存入列表
#把1-10之间所有奇数的平方存入到一个列表中
sq=[]
for i in range(1,10,2):
    sq.append(i*i)
sq
[1, 9, 25, 49, 81]
  • startwith() #以什么开头
#把1-300中以5开头的数字放入一个表中
nums=[]
for i in range(1,300):
    if str(i).startswith('5'):
        nums.append(i)
nums
[5, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
  • 列表推导式
#列表推导式
[i*i for i in range(1,20,2)]
[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]

1.3.2条件循环while

#计算1-100的和
count=1
while count<=100:
    if count==100:
        break
    count=count+1
print(count)
100
#生成随机数
import random
random.randint(1,100)
67
  • break #退出循环
#要求用户输入数字,判断其是否正确,正确结束,不正确就一直猜
import random
random_num=random.randint(1,100)#生成1-100内的随机数
count=0
while True:
    guess_num=int(input('请输入你猜的数字'))
    if guess_num==random_num:
        print('你猜对了')
        break
    elif guess_num>random_num:
        print('猜大了')
    else:
        print('猜小了')
#加入计数器,只能猜3次
    count+=1
    if count==3:
        print('还没猜对,好菜哦,继续游戏吗')
        countu=input('是否继续:是【Y】,否【N】')
        if countu=='Y':
            print('再三次机会哦')
            count=0
        else:
            print('结束了')
            break
请输入你猜的数字89
猜小了
请输入你猜的数字99
猜大了
请输入你猜的数字85
猜小了
还没猜对,好菜哦,继续游戏吗
是否继续:是【Y】,否【N】N
结束了
  • continue #终止本次循环,提前进入下一次
count=0
while count<=10:
    if 6<=count<=8:
        count+=1
        continue #可终止本次循环,提前进入下一次循环
    print(count)
    count+=1
0
1
2
3
4
5
9
10

1.4文件读写

1.4.1 'txt’文件读写

file=open('a.txt','w',encoding='utf-8')#用写入模式打开文件,并指定编码
file.write('今天是冤种的第一天')#给文件中写入内容
file.close()#关闭
  • w 覆盖写入
with open('a.txt','w')as file:
    file.write('这是测试语句')
#原内容被覆盖掉了
  • a 追加写入
with open('a.txt','a') as file:
    file.write('\n今天是2022年5月16日,星期一')
    file.write('\n今天是2022年5月16日,星期一')
  • r 只读模式
with open('a.txt','r') as file:
    print(file.read())
这是测试语句
今天是2022年5月16日,星期一
今天是2022年5月16日,星期一

1.4.2 关于图片文件读写

  • 二进制文件导入
import requests
data=requests.get("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201211%2F04%2F20121104194249_nzJij.jpeg&refer=http%3A%2F%2Fb-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655282348&t=3e2a2fcaff2db7287408cdd41c4c716f.jpg")
  • 二进制文件 写wb
  • f. 格式化输出
with open('a.jpg','wb')as f:#图片文件没有编码
    f.write(data.content)#格式化输出
  • 二进制文件 读rb
with open('a.jpg','rb')as f:
   dt=f.read()#图片文件没有编码

1.5函数

  1. 调用函数
  2. 默认参数
  3. 非固定参数
  4. 函数返回值
    - #写一个程序,24小时,监控公司网站的服务器状态,当内存,CPU,硬盘使用大于阈值时报警
        while True:
            if cpu使用率>90%:
                #发送邮件提醒
                连接邮件服务器
                发送邮件
                关闭链接
            if 内存使用率>90%:
                #发送邮件提醒
                连接邮件服务器
                发送邮件
                关闭链接
            if 硬盘使用空间>90%:
                #发送邮件提醒
                连接邮件服务器
                发送邮件
                关闭链接
        #上述代码重复过多,步骤冗余,不便修改
        def 发送邮件(内容):#定义函数
            #发送邮件提醒
                连接邮件服务器
                发送邮件
                群发功能
                关闭链接
        while True:
            if cpu使用率>90%:
                发送邮件("CPU报警"if 内存使用率>90%:
                发送邮件("内存报警"if 硬盘使用空间>90%:
                发送邮件("硬盘报警"

1.5.1 调用函数

  1. 将一组语句的集合,通过一个名字(函数名)封装起来,想要执行函数,只需调用函数名即可
  • 减少重复的代码

  • 使程序变得可扩展

  • 是程序变得可维护

       def 函数名(参数1,参数2...):
               """
               函数的注释
                """
               函数体
                return 值
    
    • def : 函数的关键字
    • 函数名: 函数的名字
    • 参数:
    • 函数的注释: 函数的文档描述,函数的功能是什么,函数的输入是什么,输出是什么
    • 函数体: 由语句和表达式组成,函数的逻辑
    • return值: 函数的返回值是什么
def sayhi():
    print("Hello world!!!")
sayhi()
Hello world!!!
def calc(x,y):  # x,y, 叫做形式参数,形参
    """
    x: 长方形的长
    y: 长方形的宽
    输出: 长方形的面积
    """
    s = x * y
    print(f"长方形的长为{x},宽为{y},它的面积是{s}")
    return s
calc(4,6)  # 实参
长方形的长为4,宽为6,它的面积是24
24

1.5.2默认参数

  1. 不指定的时候: 会使用默认参数,指定的时候,使用指定的参数
  2. 数量必须与定义时一致,
  3. 位置必须与定义时一致,
  4. 正常情况下,给函数传参要按照顺序,不想按照顺序就可以使用关键参数,只需要指定参数名即可!
def stu_reg(name,age,course,country="中国"):#指定了country
    print("----学生注册信息-----")
    print(f"姓名:{name}")
    print(f"age: {age}")
    print(f"国籍: {country}")
    print(f"课程: {course}")
stu_reg(24,'张三','python')#在国籍那一栏自动填入默认参数
----学生注册信息-----
姓名:24
age: 张三
国籍: 中国
课程: python
stu_reg('alex','23','linux',"美国")#自定义内容覆盖掉了默认值
----学生注册信息-----
姓名:alex
age: 23
国籍: 美国
课程: linux
stu_reg(age=24,name='alex',course='python')#使用关键字传参,无需考虑顺序
----学生注册信息-----
姓名:alex
age: 24
国籍: 中国
课程: python

1.5.3 非固定参数

  • *args #会把多传入的参数变成一个元组
def calc_num_sum(x,*args): # args 会把多传入的参数变成一个元组
    sum_z = 0
    for i in args:
        sum_z += i
    sums = x + sum_z
    print(f"计算得到总和为{sums}")
calc_num_sum(1,2,3,4,5,67)
计算得到总和为82
calc_num_sum(1,2,3,4,5,6,7,8)
计算得到总和为36
  • **kwargs #会将你多传入的参数,组和成一个dict形式
# **kwargs  会将你多传入的参数,组和成一个dict形式
def stu_reg(name,age,**kwargs):
    print(name,age,kwargs)
stu_reg('alex',24,sex='Male',course='python')
alex 24 {'sex': 'Male', 'course': 'python'}
  • *args和 ** kwargs配合使用
def stu_reg(name,age,*args,**kwargs):
    print(name,age,args,kwargs)
info = stu_reg('alpha',24,"中国","Python",
               school='陕西科技大学',ID='12101184')
alpha 24 ('中国', 'Python') {'school': '陕西科技大学', 'ID': '12101184'}

1.5.4函数的返回值

  1. None
    - 没有return
    - return 空值
    - return
  2. 一个返回值
    - return 值
  3. 多个返回值
    - return 值1, 值2, 值3

1.5.5一些高阶函数

  • lambda #使用lambda函数创建匿名函数,只是一个表达式.函数体比def定义的简单的多
#计算任意一个数字的平方
calc=lambda x:x*x
calc(10000)
100000000
#计算两个数字的乘积
calc = lambda x,y : x*y
calc(10,8)
80
  • map #接受两个参数,第一个是函数,第二个是序列,map传入的函数将依次作用于序列的每个元素,并把结果作为新的list返回
#计算1-10数字的平方
list(map(lambda x:x**2,range(1,10)))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
  • filter #基于定义的条件筛选一系列数据
list(filter(lambda x:x%3==0,range(30)))
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
  • reduce #在数组的每个元素上执行用户提供的回调函数
res = 1
for i in range(1,11):
    res = res *i
print(res)
3628800
from functools import reduce
reduce(lambda x,y:x*y,range(1,11))#每次的结果返回给x,y取下一个
3628800

1.6 列表生成式

a = list(range(10))
a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = []
for i in a:
    b.append(i+1)
print(b)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • enumerate #内置函数,可以获得索引和元素值
for index,i in enumerate(a):#生成a的索引值
    a[index] += 1
a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • map #内置函数,根据提供的函数对指定序列做映射
list(map(lambda x:x+1,range(10)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[i+1 for i in range(10)]  # 列表生成式
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1-30之间能被3整除的平方,用列表生成式实现
[i*i for i in range(1,30) if i%3 == 0]
[9, 36, 81, 144, 225, 324, 441, 576, 729]
  • jion #字符串操作函数,将序列中的元素以指定的字符连接生成一个新的字符串
#乘法口诀表
print("\n".join(["\t".join([f"{j}*{i}={i*j}" for i in range(j,10)]) for j in range(1,10)]))
1*1=1	1*2=2	1*3=3	1*4=4	1*5=5	1*6=6	1*7=7	1*8=8	1*9=9
2*2=4	2*3=6	2*4=8	2*5=10	2*6=12	2*7=14	2*8=16	2*9=18
3*3=9	3*4=12	3*5=15	3*6=18	3*7=21	3*8=24	3*9=27
4*4=16	4*5=20	4*6=24	4*7=28	4*8=32	4*9=36
5*5=25	5*6=30	5*7=35	5*8=40	5*9=45
6*6=36	6*7=42	6*8=48	6*9=54
7*7=49	7*8=56	7*9=63
8*8=64	8*9=72
9*9=81
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不 蔓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值