• python学习笔记


    1.python书写规则

    这是我的第一个python程序,用#号来做注释

    tip 格式化代码可以同时按住command+option然后按L键

    import time # 导入一个时间模块,python包含很多模块,都可以用import导入进来

    print(time.time()) # 在屏幕上打印出1970年1月1日0:00 到现在经过了多少秒

    if 10 - 9 > 0:
    # 下面print是在if语句中,需要缩进,4个空格
    print(‘10大于9’)

    2.python基础数据类型

    python数据类型

    C02GL0VNMD6T:~ swang20$ python3 #官网安装了python3.10.7就可以直接执行python3进入
    Python 3.10.7 (v3.10.7:6cc6b13308, Sep 5 2022, 14:02:52) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
    Type “help”, “copyright”, “credits” or “license” for more information.
    #如果想看数据类型可以用type()函数
    type(8)

    type(‘8’)

    type(“8”)

    type(True)

    int(‘8’) #可以强制转换,将string类型转换成int类型
    8
    str(8) #将int转换成string
    ‘8’
    bool(123) #数字转换bool类型时,非0返回True,0返回False
    True
    bool(0)
    False

    3.序列

    3.1字符串
    记录生肖,根据年份来判断生肖

    chinese_zodiac = ‘鼠牛虎兔龙蛇马羊猴鸡狗猪’

    print(chinese_zodiac[0]) # 因为字符串是序列所以可以利用索引来获取字符串中的值,下标从0开始
    返回结果:鼠

    print(chinese_zodiac[0:4]) # 可利用:号的方式获取多个值,0:4表示从索引0开始到4之前索引为3
    返回结果:鼠牛虎兔

    print(chinese_zodiac[-1]) # 从后往前访问可以用负号来获取
    返回结果:猪

    获取年份对应的生肖,思路是利用年份去除12取余数,利用下标去取值,2022是虎年,所以需要调整下字符串顺序

    chinese_zodiac_new = ‘猴鸡狗猪鼠牛虎兔龙蛇马羊’

    year = 2022
    print(year % 12) # 返回的结果是6,所以需要调整字符串顺序对应到索引6是虎
    print(chinese_zodiac_new[year % 12])

    3.2字符串常用操作

    记录生肖,根据年份来判断生肖

    chinese_zodiac = ‘鼠牛虎兔龙蛇马羊猴鸡狗猪’
    print(‘狗’ in chinese_zodiac) #判断狗是否在字符串中
    返回结果:True
    print(‘狗’ not in chinese_zodiac) #判断狗是否不在字符串中
    返回结果:False
    print(chinese_zodiac + ‘abcd’) #字符串连接
    返回结果:鼠牛虎兔龙蛇马羊猴鸡狗猪abcd
    print(chinese_zodiac * 3) #对字符串重复三次
    返回结果:鼠牛虎兔龙蛇马羊猴鸡狗猪鼠牛虎兔龙蛇马羊猴鸡狗猪鼠牛虎兔龙蛇马羊猴鸡狗猪

    3.2元组的定义常用操作
    !元组与列表的区别是,元组定义不可以修改,列表定义是可以进行修改的

    数字元组的比较

    (4) > (5)
    False
    (4) < (5)
    True

    包含两个数字的元组比较的时候,下面实际比较的是120是否大于220

    (1,20) > (2,20)
    False
    (1,20) < (2,20)
    True

    获取日期所对应的星座

    这里利用元组来保存星座
    zodiac_name = (u’摩羯座’, u’水瓶座’, u’双鱼座’, u’白羊座’, u’金牛座’, u’双子座’, u’巨蟹座’
    , u’狮子座’, u’处女座’, u’天秤座’, u’天蝎座’, u’射手座’)

    因为星座对应了一段时间,所以利用嵌套元组来表示,(1,20)表示1月20号

    zodiac_days = (
    (1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23))

    (month, day) = (8, 8)

    这里的逻辑是,利用元组的大小比较,上面已经提到过

    zodiac_day = filter(lambda x: x <= (month, day), zodiac_days) # 这个语法后面会讲到
    这里的目的是获取(8, 8)在zodiac_days这个元组中比(8, 8)小的元素个数,然后利用个数作为索引去zodiac_name中获取星座
    zodiac_len = len(list(zodiac_day)) % 12

    print(zodiac_name[zodiac_len])

    返回结果:狮子座

    3.3 列表的定义与常用操作
    !元组与列表的区别是,元组定义不可以修改,列表定义是可以进行修改的
    a_list = [‘abc’, ‘xyz’]
    a_list.append(‘X’) # 列表增加元素
    print(a_list)
    返回结果:[‘abc’, ‘xyz’, ‘X’]
    a_list.remove(‘xyz’) # 列表删除元素
    print(a_list)
    返回结果:[‘abc’, ‘X’]

    4.条件语句

    a = ‘rxyz’
    #这里注意 if后面判断语句之后用:号
    if a == ‘xyz’:
    print(‘a的值是xyz’)
    elif a == ‘abc’:
    print(‘a的值是abc’)
    else:
    print(‘a的值啥也不是’)

    5.循环

    5.1 for循环

    chinese_zodiac = ‘鼠牛虎兔龙蛇马羊猴鸡狗猪’

    for cz in chinese_zodiac:
    print(cz)
    返回结果:











    range函数表示,13是终止条件,从0开始不包括13就到12

    for i in range(13):
    print(i)
    返回结果:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    可以指定从1开始到13,但是不包括13
    for i in range(1, 13):
    print(i)
    返回结果:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    可以利用%s来作为变量插入到字符串中,下面为插入写法

    for year in range(2000, 2022):
    print(‘%s 年的生肖是 %s’ % (year, chinese_zodiac[year % 12]))
    返回结果:
    2000 年的生肖是 猴
    2001 年的生肖是 鸡
    2002 年的生肖是 狗
    2003 年的生肖是 猪
    2004 年的生肖是 鼠
    2005 年的生肖是 牛
    2006 年的生肖是 虎
    2007 年的生肖是 兔
    2008 年的生肖是 龙
    2009 年的生肖是 蛇
    2010 年的生肖是 马
    2011 年的生肖是 羊
    2012 年的生肖是 猴
    2013 年的生肖是 鸡
    2014 年的生肖是 狗
    2015 年的生肖是 猪
    2016 年的生肖是 鼠
    2017 年的生肖是 牛
    2018 年的生肖是 虎
    2019 年的生肖是 兔
    2020 年的生肖是 龙
    2021 年的生肖是 蛇

    5.2 while循环
    num = 5

    while true表示下面内容一直循环也就是死循环,所以一般都配合if去判断然后利用break去跳出循环

    while True:
    print(‘a’)
    num = num + 1
    if num == 10:
    break
    返回结果:
    a
    a
    a
    a
    a

    import time
    #break是直接循环结束,continue是跳过当前循环进入下一次循环
    num = 5
    while True:

    num = num + 1
    if num == 10:
        continue
    print(num)
    time.sleep(1)
    

    并没有输出10,是因为跳过了
    返回结果:
    6
    7
    8
    9
    11
    12
    13

    5.3 while循环嵌套if判断

    获取日期所对应的星座

    这里利用元组来保存星座
    zodiac_name = (u’摩羯座’, u’水瓶座’, u’双鱼座’, u’白羊座’, u’金牛座’, u’双子座’, u’巨蟹座’
    , u’狮子座’, u’处女座’, u’天秤座’, u’天蝎座’, u’射手座’)

    因为星座对应了一段时间,所以利用嵌套元组来表示,(1,20)表示1月20号
    zodiac_days = (
    (1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23))

    用户输入月份和日期

    input函数可以自己输入,默认是string类型,需要转成int类型

    int_month = int(input(‘请输入月份:’))
    int_day = int(input('请输入日期: '))

    n = 0

    while后面跟条件,不满足直接循环结束

    while zodiac_days[n] < (int_month, int_day):
    if int_month == 12 and int_day > 23:
    break
    n += 1
    print(zodiac_name[n])
    返回结果:
    请输入月份:8
    请输入日期: 8
    狮子座

    6.字典的定义与常用操作

    dict1 = {}
    print(type(dict1))
    dict2 = {‘x’: 1, ‘y’: 2}

    字典新增元素方式

    dict2[‘z’] = 3
    print(dict2)
    返回结果:

    {‘x’: 1, ‘y’: 2, ‘z’: 3}

    字典的映射关系为key:value形式,可以利用for循环dict2.keys()取出每一个key值

    for dict2_key in dict2.keys():
    print(dict2_key)
    返回结果:
    x
    y
    z

    7.列表推导式与字典推导式

    7.1列表推导式

    从1到10 取所有偶数的平方

    常规写法
    alist = []
    for i in range(1, 11):
    if i % 2 == 0:
    alist.append(i * i)
    print(alist)
    返回结果:[4, 16, 36, 64, 100]

    列表推导式写法
    blist = [i * i for i in range(1, 11) if (i % 2 == 0)]
    print(blist)
    返回结果:[4, 16, 36, 64, 100]

    7.2字典推导式
    zodiac_name = (u’摩羯座’, u’水瓶座’, u’双鱼座’, u’白羊座’, u’金牛座’, u’双子座’, u’巨蟹座’
    , u’狮子座’, u’处女座’, u’天秤座’, u’天蝎座’, u’射手座’)

    #常规写法
    z_num={}
    for i in zodiac_name:
    z_num[i]=0
    #字典推导式写法
    z_num={i:0 for i in zodiac_name}

    8.文件的使用

    8.1文件的内置函数

    一个文件的操作流程,open—>write/read ---->close
    将小说的主要人物记录在文件中

    open是内置函数不需要import,如果是对文件写入后面需要加’w’,如果不加的话默认是读文件

    ‘w’ 写入时每次都是覆盖了原文件内容
    file1 = open(‘name.txt’, ‘w’)
    file1.write(‘诸葛亮’) # 写入的内容
    file1.close() # 文件操作完必须要关闭!!!!
    下面图表示多了一个name.txt文件里面内容是诸葛亮

    读取文件内容
    file2 = open(‘name.txt’)
    print(file2.read())
    返回结果:诸葛亮
    file2.close()

    追加文件内容
    file3 = open(‘name.txt’, ‘a’)
    file3.write(‘刘备’)
    file3.close()
    name.txt中内容为诸葛亮刘备

    name.txt文件内容为
    1 诸葛亮
    2 刘备
    3 关羽

    file4 = open(‘name.txt’)
    print(file4.readline()) #读取文件第一行,注意者利用的是readline没有s
    返回结果:1 诸葛亮
    file5 = open(‘name.txt’)
    for line in file5.readlines(): #这里可以用readlines加for循环去遍历每一行打印
    print(line)
    print(‘====’)
    返回结果:
    1 诸葛亮

    ====
    2 刘备

    ====
    3 关羽

    9.异常的检测与处理

    错误异常类型

    i=j # NameError: name ‘j’ is not defined
    print()) # SyntaxError: unmatched ‘)’

    a=‘123’
    print(a[3]) # IndexError: string index out of range

    d={‘a’:1,‘b’:2}
    print(d[‘c’]) # KeyError: ‘c’

    year=int(input(‘input year:’))

    工作台输入abc的时候报错信息为ValueError: invalid literal for int() with base 10: ‘abc’

    try:
    year = int(input(‘input year:’))
    except ValueError:
    print(‘年份要输入数字’)
    输出结果:
    input year:abc
    年份要输入数字

    #如果想捕获多种异常可以:
    except (ValueError,IndexError,NameError):

    try:
    print(1 / 0)
    except ZeroDivisionError as e: #可以将错误详细信息打印出来
    print(‘0不能做除数 %s’ %e)
    #返回结果:0不能做除数 division by zero

    try:
    a = open(‘name1.txt’)
    except Exception as e:
    print(e)
    finally: #不管是否有异常都执行finally的代码
    a.close()

  • 相关阅读:
    Redis主从复制部署小结
    sync.Pool:提高Go语言程序性能的关键一步
    [linux] socket 非阻塞模式使用注意事项
    排序 Go入门
    [100天算法】-目标和(day 79)
    vite快速构建vue3项目
    聚观早报 |GPT-4周活用户数达1亿;长城汽车10月销量增加
    Java 进程和线程 2
    web3之链上情报平台Arkham
    spring boot 一个极简单的 demo 示例
  • 原文地址:https://blog.csdn.net/weixin_38629422/article/details/127034644