Python学习笔记

一、Pycharm快捷键

给字体增大/减小添加“Ctrl+鼠标滚动”快捷键

Ctrl+d:复制并粘贴所选代码

shift+Alt+上/下:上/下移一行所选代码

shift+ctrl+alt+f10(+fn)=三角形+f10:运行代码

shift+fn+f6:重命名文件

ctrl+f:搜索

ctrl+/:注释,再操作一遍,解除注释

二、Python学习

2022黑马Python学习笔记_黑马程序员python笔记-CSDN博客bbb

补充三、(三)变量

变量名不可以用关键字,即不能用函数名称!如float;即标识符,详见三、(六)

补充三、(四)数据类型

type()查看数据类型三种方式

     ·【使用print语句直接输出变量类型】  

print( type( 13.14 ) )

     ·【使用变量存储type()语句的结果】       !type()语句有返回值!

a = type( 666 )
print( a )

      ·【使用type()语句查看变量存储的数据类型】  !变量没有类型,查看的是变量存储的数据的类型;注:字符串变量不是说变量是字符串,而是变量存储的数据类型是字符串
name = "黑马程序员"
name_type = type( name )
print( name_type )
 

补充三、(五)数据类型转换

任何类型都可以转换成字符串 说法正确 (加"字符串"双引号就变成字符串了);但不是所有字符串都能转换成数字(整数和浮点数),须字符串内的内容全是数字

补充三、(八)字符串扩展

字符串拼接:+号拼接没有空格  ,号拼接有空格

字符串格式化也是一种拼接方式!即格式化是不用+号的快速拼接

补充四、(四)if elif else判断语句

elif可以写多个,判断条件之间是互斥且有序的!(从上往下依次判断)

补充五、(四)while循环嵌套应用(例子)

print()      #print空内容,就是输出一个换行;因为print默认是会换行输出的

print("欢迎来到中国!\n祝您旅途愉快!")    #\n也是换行的效果

补充五、(五)for循环的基本语法

1.基本语法:

是遍历循环,即将待处理的数据集依次赋予临时变量。

这个待处理数据集严格来说,称之为:序列类型;序列类型指:其内容可以一个个依次取出的一种类型,包括字符串、列表、元组等等。

for 临时变量 in 字符串

for 临时变量 in range(num)

【注意】while循环控制循环条件的变量需要在while循环前设置初始值定义,而for循环的临时变量不需要

2.range语句

其实可以发现,range语句是生成一个序列类型让for循环去进行遍历循环,相当于c语言中先定义i=0,for i<10, i++这样去控制循环次数,但python更优雅!且注意python中没有i++,而是i+=1

所以,for 临时变量 in range(num)的写法可以理解为range控制循环进行多少次,而循环内不一定要使用临时变量,根据实际需要有用才用,否则就是单纯控制循环次数

3.临时变量作用域

严格来说,for循环的临时变量作用范围是循环内部,但在循环外去调用i发现也能运行,但这不是规范的写法,需在循环外部(代码一开头那里)定义一下i,那么for循环即对i的内容进行了5次覆盖,这样是规范的!且注意,在循环外面调用i,i的值是循环里最后的那个值(9)!!!

补充五、(六)continue和break

continue:跳过本次循环,执行下一次

break:退出循环

注意第二次还是有这个2,它是遇到break就会退出内层循环,结束内层循环,但是第二次它还是会进来内层循环,遇到break才退出去!不是连进去都不进去!

循环综合案例(发工资)

sum = 10000
for i in range(1,21):
    import random
    num = random.randint(1, 10)
    if num > 5:
        sum -= 1000
        print(f"向员工{i}发放工资1000元,账户余额剩余{sum}元。")
        if sum == 0:
            print("工资发完了,下个月领取吧。")
            break
    else:
        print(f"员工{i},绩效分{num},低于5,不发工资,下一位。")
        continue  #这个continue有和没有效果一样,老师的写法的continue是有效果

补充六、(四)函数返回值

1. return

函数体在遇到return后就结束了,所以写在return后的代码不会执行。

不要把函数返回的东西等同于print,只是我们要看到返回的东西需要print出来才能看见。比如可以函数体里面print内容,只要函数执行就会print,但它可以没有返回值(或者说其返回值是字面量None,类型是<class 'NoneType'>)。

2.None字面量

不写return语句默认是返回None,也可以主动写return None;但下面例子中有else:不允许下面没有语句所以有一点细节上不太一样而已噢!(不写return的话也要不写else:)

【1】def check_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None

result = check_age(16)
if not result:
    print("未成年,不允许进入酒吧。")
【2】def check_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return 

result = check_age(16)
if not result:
    print("未成年,不允许进入酒吧。")
【3】def check_age(age):
    if age > 18:
        return "SUCCESS"
    
result = check_age(16)
if not result:
    print("未成年,不允许进入酒吧。")

以上三个版本执行结果一样,【1】主动写return None【2】只写return 省略None(默认)【3】整个else不写(默认None)但在【2】中写了else:下面就不能没有语句,必须要写return这个词!

补充六、(五)函数说明文档

指在函数体前的一段注释,注意:规范书写函数说明文档,当调用函数时,鼠标悬停可以看到函数说明文档。

补充六、(七)变量作用域

【1】num = 10
def a():
    print(num)
def b():
    num = 20 #即这里的num是局部变量,与外面的num(全局变量)不是同一个
    print(num)
    
a()
b()
print(num)#执行结果是10 20 10 

【2】num = 10
def a():
    print(num)
def b():
    global num#用global关键字声明函数内这个num变量为全局变量,那么和外面的num是同一个
    num = 20
    print(num)

a()
b()
print(num)#执行结果是10 20 20 

函数综合案例--银行ATM

money = 500000
name = input("请输入您的姓名:")

def check():
    """
    查询余额
    :return: 返回值是当前余额
    """
    global money
    global name
    print("--------------查询余额-------------")
    print(f"{name},您好,您的余额剩余:{money}元")
    return money
def give(give_money):
    """
    存款
    :param give_money: 本次存款的金额
    :return: 无
    """
    global money
    global name
    money += give_money
    print("---------------存款--------------")
    print(f"{name},您好,您存款{give_money}元成功")
    print(f"{name},您好,您的余额剩余{money}元")
def pick(pick_money):
    """
    取款
    :param pick_money: 本次取款的金额
    :return: 无
    """
    global money
    global name
    money -= pick_money
    print("---------------取款--------------")
    print(f"{name},您好,您取款{pick_money}元成功")
    print(f"{name},您好,您的余额剩余{money}元")
def main():
    """
    主菜单
    :return: 所输入的选择,查询余额为1,存款为2,取款为3,退出为4
    """
    print("--------------主菜单--------------")
    global name
    print(f"{name},您好,欢迎来到ATM。请选择操作:")
    print("查询余额\t[输入1]\n存款\t\t[输入2]\n取款\t\t[输入3]\n退出\t\t[输入4]\n")
#后面三个需要两个\t才能做到对齐!
    result = int(input("请输入您的选择:"))
    return result

while 2 > 1:
    num = main()
    if num == 1:
        check()
    elif num == 2:
        data1 = int(input("请输入存款金额:"))
        give(data1)
    elif num == 3:
        data2 = int(input("请输入取款金额:"))
        pick(data2)
    else:
        print("已退出界面")
        break

补充七、(二)3.列表的常用操作(方法)

直接重新写 看我这里       

列表.方法  这样称为方法(理解为放在类中的函数称为方法)

编号方法语法作用
1index列表.index(元素)

返回值为所查找的指定元素的下表索引,

若所查找的元素不存在则报错

2=(赋值不算列表方法)列表[下标]=新内容修改某个元素
3insert列表.insert(下标,元素)在指定下标位置插入新元素
4append列表.append(元素)在列表的尾部追加一个新元素
5extend列表.extend(其他数据容器)

在列表的尾部追加一批新元素,由其他数据容器

提供的一批新元素按顺序在尾部追加

6del(关键字不算列表方法)del 列表[下标]删除指定下标的元素
7pop列表.pop(下标)

删除指定下标的元素,该方法有返回值,返回值为

所删除的元素,相当于取出来一个元素!

8remove列表.remove(元素)

在列表中从前到后搜索该元素,删除第一个匹配项,重复的多个

都想删除的话只能多次调用remove

9clear列表.clear()清空整个列表
10count列表.count(元素)统计该元素在列表中的数量,返回值为数量
11len()之前学的一个函数,不算列表方法len(列表)统计列表中总共有多少个元素,返回值为数量

补充七、(四)数据容器(元组)

1.定义(基本语法)

元组只有一个元素时,要在后面添加,逗号!eg:t = ("hello",)。否则为字符串类型

通过下标索引取出元组的元素,语法与list的一样,即t[下标][下标].....

2.元组的操作(方法)见他人笔记

3.while循环、for循环遍历元组

与list写法同理

4.注意

元组的元素不可以修改,若元组和列表嵌套,列表内的内容可以修改

语法:元组[列表所在的下标].列表的方法

但不可以对整个列表进行替换修改,因为整个列表视为元组的元素,不可修改

补充七、(五)数据容器(字符串)

2.字符串的下标索引

把字符串看作是数据容器时,空格也是元素,占下标噢!

3.字符串的常用操作

大字符串.index(小字符串)   其返回值为第一个小字符串匹配项的起始下标

replace 原字符串不可修改,但能部分修改,此时是生成一个新字符串,不是在原字符串上做的修改

split、strip同理,都是产生一个新字符串

while、for遍历字符串:写法与list同理

补充七、(六)数据容器切片

3. 基本语法(原笔记复制过来进行了补充,看这里即可)

序列[起始下标:结束下标:步长]

* 表示从序列中,从指定位置开始,依次取出指定元素,到指定位置结束,得到一个新序列

* 起始下标表示从何处开始,可以留空,留空视作从头开始

* 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾,但这个冒号:不可省略

* 步长表示,依次取元素的间隔,省略则默认步长为1,可以省略第二个冒号:

    步长1表示,一个个取元素
    步长2表示,每次跳过1个元素取
    步长N表示,每次跳过N-1个元素取
    步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记,按从前往后顺序0,1,2,3....数下标,反向标记是指起始下标大于结束下标!!!)
* 可以连着写多个切片操作,eg:new_str=str[::-1][9:14]    同理,字符串方法、数据容器切片都能连着接着写!!!

补充七、(七)数据容器(集合)

1.定义(基本语法)

*定义空的集合:变量 = set()   

注意:与列表、元组、字符串不同,变量={}这样定义的是字典!(因为字典也是用{},{}定义空内容这个写法被字典占用了);print输出空集合的内容是:set()   print输出空字典的内容是:{}

*去重:定义的集合中有重复元素,print    输出集合的内容将会自动去重

*无序:print输出去重后的内容,其顺序不能保证与创建顺序一致,不过再重新执行代码结果会与上一次保持一致

2.集合的常用操作(方法)

【补充】

*3  pop 有返回值:取出的元素

*5  difference 有返回值:新集合    集合1.difference(集合2)   得到一个新集合,原来的集合1和集合2不变,返回值是集合1有而集合2没有的元素

*6  集合1.difference_update(集合2)    在集合1内,删除其和集合2相同的元素,结果:集合1被修改,集合2不变,无返回值

*7 union 有返回值:新集合

*8 len(集合)   注意:若定义的集合里有重复的元素,它是去重的,len得到的返回值:去重后的元素数量!

3.集合的遍历

集合遍历不支持while循环(因为集合不支持下标索引),可以用for循环进行遍历

补充七、(八)数据容器(字典)

2.字典的常用操作(方法)

*pop 有返回值   pop即类似出栈

*keys 有返回值

*len 有返回值

支持for循环遍历:以下两种方式等效

【方式1】获取key来完成遍历
my_dict = {'周接论':88, '霖军接':99, '章学有':77}
for key in my_dict.keys():
    print(key,my_dict[key])
【方式2】直接对字典进行for循环,每一次循环都是直接得到key
my_dict = {'周接论':88, '霖军接':99, '章学有':77}
for key in my_dict:
    print(key,my_dict[key])

补充七、(九)数据容器通用操作

*sorted(序列)  不写则默认reverse=False  升序   输出从小到大排序好的列表

sorted(序列,[reverse=True])  反转倒序即降序   输出从大到小排序好的列表

*max  min 【拓展:字符串比较】字符串所用的字符,包括大小写英文字母、数字、特殊符号等都有其对应的ASCII码值,字符串比较大小就是基于其ASCII码值大小进行比较。

补充八、函数进阶

注意:

*位置参数和关键字参数混用时:位置参数在前,关键字参数在后

*若使用了缺省参数(默认参数):缺省参数统一放在后面(可以多个,都放在最后)

补充九、Python文件操作

*1是打开文件操作;2、3、4、5是读取文件;6关闭文件;7是自动关闭文件的一种打开文件方式

*文件对象名字 = open(name,mode,encoding="UTF-8")

name写为 "文件存储路径名称" eg:

"E:/测试.txt"

若直接写"要打开的文件名称",则认为该文件在Python project文件夹下好像

注意,在open()函数里,encoding并不是第三位参数,但是我们一般只设置这几个,所以记得要用关键字参数对encoding进行设置

*文件对象名字.read(num)  

【纠正】num:所要读取的字符数!不是字节数,在UTF-8编码中,一个英文字符=1个字节,一个中文字符(含繁体)=3个字节;若不写num,则读取文件全部内容

若程序中多次调用read,那么第二次的read会在上一次read的结尾处开始读取;并且read()和readlines()混合调用也同理,都会在上一次读取结束位置续接去读取

*for line in 文件对象名字

每次循环读取到一行!!

*with open(name,mode,encoding = "UTF-8") as 文件对象名字

文件操作结束后会自动关闭文件,不会占用文件

更正九、(四)文件的追加

2.注意事项中第一行有误

a模式,文件不存在,创建新文件

十、Python异常、模块与包

(一)了解异常

1. 异常

程序运行的过程中出现了错误

2. bug

bug就是指异常的意思,因为历史是因为小虫子导致计算机失灵的案例,所以延续至今,bug就代表软件出现错误

(二)捕获异常

1. 为什么要捕获异常

在可能发生异常的地方,进行捕获。当异常出现时,提供解决方式,而不是任由其导致程序无法运行。

2. 异常的捕获方法

1)基本语法

一般try下方只放一行尝试执行的代码

#捕获常规异常(同时也是捕获全部异常):

try:

        可能要发生异常的代码

except:

        如果出现异常执行的代码

#捕获指定异常(例如NameError)

try:

        可能要发生异常的代码

except 指定异常名字 as 自定义的异常名字即别名:

        如果出现异常执行的代码

#捕获全部异常

方式1;同捕获常规异常

方式2:

try:

        可能要发生异常的代码

except Exception as 自定义异常的名字即别名:

        如果出现异常执行的代码

2)异常的else、finally语法

try:

        可能要发生异常的代码

except:

        如果出现异常执行的代码

else:

        没有异常时执行的代码

finally:

        不管是否有异常都要执行的代码(比如关闭文件操作)

3. 异常的传递

异常具有传递性,可以不用到真正出现异常的那句语句处去捕获异常,函数之间存在多层调用关系,try最顶层的调用语句,就可以

(三)Python模块的导入

1. 什么是模块

 模块就是一个Python代码文件,文件后缀为.py,内含类、函数、变量等,可以导入模块或功能使用

2. 如何导入模块

#导入模块

import  模块名 as 别名

as别名为模块别名可省略;通过 "." 确定层级关系;使用时:模块.功能()或别名.功能()

#导入模块的某个功能或全部功能

from 模块名 import 类/变量/函数/* as 别名

as别名为功能别名可省略;*号表示导入全部功能;使用时:功能()或别名()

【注意】模块的导入一般写在代码文件的开头位置

3. 自定义模块

1)如何自定义模块并导入

新建一个Python代码文件中正常写入代码即可,再通过from、import关键字导入(同Python内置模块导入使用)

注意:所新建文件名即模块名,要符合Python标识符命名规则(要再代码中用于导入的)

2)_ _main_ _变量的功能

if __name__ == '__main__':
        代码

当模块里程序直接执行时,__name__ 变量为__main__ 条件为真,才会进入if内部执行代码;若模块被导入的,模块中的if无法进入

使用场景:在自定义模块中调用功能函数进行测试,但被导入时,执行主文件时,不要执行这句调用测试的代码

3)_ _all_ _变量的功能

__all__ = []

其为一个列表,写在模块中,那么*号导入模块全部功能时,只导入列表内的功能,即控制import*对哪些功能可以导入

4. 注意事项

当不同模块有同名功能,并同时都导入时,后导入的会覆盖先导入的,(Pycharm会提醒你,被覆盖的没有真正执行到,那句代码时灰色)

(四)Python包

1. 什么是Python包

包Python Package就是一个包含__init__.py文件的文件夹,里面可以存放许多Python模块(许多个代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。(注意,若没有__init__.py文件,则为普通文件夹Directory)

2. 自定义包 

1)如何创建

new新建一个Python Package即可,会自动创建__init__.py

2)如何使用

即多一个层级

【1】import 包.模块

包.模块.功能

【2】from 包 import 模块

模块.功能

【3】from 包.模块 improt 功能

功能

3)__all__变量

在__init__.py文件中,__all__ = ['my_module1'],可以控制在主代码中从包中导入模块时*的具体导入功能,from 包 import *

3. 安装第三方包

三、第二阶段Python学习

以前笔记)Python注释

在前面添加#,# 注释,该行代码成为注释,若多行时要多行都要#

三个单引号对,'''注释'''

三个双引号对,"""注释"""

第一个特殊注释是用于linux系统的指明Python解释器路径,widows系统则认为它是普通注释;第二个特殊注释是解决Python2不支持中文出现的问题                 

安装Python是 安装了Python.exe解释器程序;Pycharm是第三方的集成开发环境IDE(编辑器)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值