生活札记

Python学习笔记 - 入门(一)

copylian    1 评论    13584 浏览    2022.08.13

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

官网:https://www.python.org/downloads/

教程:https://www.bilibili.com/video/BV1ug411Z7PB

教程:https://www.bilibili.com/video/BV1EE41187jY


1、注释

# 第一行代码

print("Hello 飓风呀!!!")


"""

多行注释

"""


'''

多行注释

'''


2、计算

# 计算

number = 10 + 20

print(number)


# 除法 // :取整数

number_1 = 10 // 20

number_2 = 20 // 10

number_3 = 15 / 10

print(number_1)

print(number_2)

print(number_3)


# 指数:N次方

number_4 = 2**3

print(number_4)


# 字符串

str = "-" * 5

print(str)


# type()类型

print(type(str))


3、输入

# input

data = input("请输入关键字:")

print(data)


# input输入,类型转换

prize = float(input("请输入价格:"))

weight = float(input("请输入重量:"))

print(prize * weight)


# 格式化:%s %d  %.2f

print("重量是:%s" % weight)


4、if条件、随机数

# if、elif、else 条件

a = 1

if a == 1 :

    print("a=%d" % a)

elif a == 0 :

    print("a=%d" % a)

else :

    print("a=%d" % a)


# 随机数

import random

print(random.randint(1, 100))


5、循环

# while

i = 1

while i <= 10:

    print(i)

    i += 1


# 99乘法

# 定义行

row = 1


while row <= 9:

    # 定义列

    col = 1

    while col <= row:

        # end="",输出结束后不换行

        # end="\t",输出结束后添加制表符

        print("%d * %d = %d" % (col, row, col * row), end="\t")


        # 列+1

        col += 1

    

    # 输出空格

    print("")


    # 行+1

    row += 1


# for in 循环

arr = ["PHP", "GoLang", "Python"]

for i in arr:

    print(i)


6、list数组

# for in 循环

arr = ["PHP", "GoLang", "Python", 1, 2]

for i in arr:

    print(i)

    print(type(i))


# insert 插入

arr.insert(0, "Java")

arr.insert(2, "JavaScript")

print(arr)


# append 追加

arr.append("CSS")

print(arr)


# del 删除

del arr[0]

print(arr)


# pop 删除

arr.pop(1)

print(arr)


# remove 移除

arr.remove("CSS")

print(arr)


# 修改值

arr[0] = "Vuejs"

print(arr)


# clear 清空

# arr.clear()

# print(arr)


# len 长度

print(len(arr))


# count 统计

print(arr.count("GoLang"))


# extend 合并

arr1 = [4, 5, 6]

arr2 = [1, 2, 3]

arr1.extend(arr2)

print(arr1)


# sort 排序

arr1.sort()

print(arr1)


# reverse 反向

arr1.reverse()

print(arr1)


7、tuple元组

# tuple元组

arr = (1,2,3,4,"GoLang","PHP")

print(type(arr))

print(arr)


# 如果tuple只有一个值时需要加上一个逗号

arr2 = (1,)

print(type(arr2))

print(arr2)


# 统计 count

arr3 = (1,2,3,4,1,2)

print(arr3.count(1))


# index 序号

arr4 = (1,2,3,4,5)

print(arr4.index(2))


# tuple与list转换

arr5 = list(arr)

print(type(arr5))

print(arr5)


arr6 = tuple(arr5)

print(type(arr6))

print(arr6)


# for 循环

for i in arr:

    print(i)


8、{}对象

# 对象

obj = {

    "name":"飓风呀",

    "sex":1,

    "age":28

}

print(type(obj))

print(obj)


# 循环

for i in obj:

    print(i)

    print(obj[i])


# get() 获取

print(obj.get("name"))


# setdefault() 设置默认

obj.setdefault("colleague", "北大")

print(obj)


# update() 合并

obj2 = {

    "nickname":"飓风呀"

}

obj.update(obj2)

print(obj)


# items() 转元组对象

print(obj.items())


# values() 获取值

print(obj.values())


# keys() 获取键值

print(obj.keys())


# pop() 删除

del obj["name"]

obj.pop("age")

print(obj)


# popitem() 随机删除

obj.popitem()

print(obj)


# clear() 清空

obj.clear()

print(obj)


9、字符串

# 字符串

s = "Hello Jufengya"


print(s[0])

# for i in s:

#     print(i)


# 切片 string[N:N]

print(s[1:])

print(s[2:4])


# capitalize() 首字母大写、upper() 大写、lower()小写、title() 首个单词大写

print(s.capitalize())

print(s.upper())

print(s.lower())

print(s.title())


# find()、rfind() 反向查找、index()、rindex() 查找

print(s.find("e"))

print(s.find("6"))

print(s.find("f", 2))

print(s.index("a")) # 找不到会报错


# startswith() 开头、endswith() 结尾、isdigit() 纯数字、isalnum() 数字、isalpha() 字母构成

print(s.startswith("He"))

print(s.endswith("He"))

print(s.isdigit())

print(s.isalnum())

print(s.isalpha())


# 填充 center() 居中、ljust() 后面空格、rjust() 前面添加空格、zfill() 填充0

s1 = "Hei Jufengya"

print(s1.center(20, "#"))

print(s1.ljust(20, "-"))

print(s1.rjust(20, "-"))


s2 = "-100"

print(s2.zfill(20))


# format() 格式化

a = 10

b = 5

print("%d * %d = %d" % (a, b, a * b)) # 方式1

print("{0} * {1} = {2}".format(a, b, a * b)) # 方式2


# 3.6 版本以后支持f方法

print(f"{a} * {b} = {a * b}")


# 去空 strip()、lstrip()、rstrip()

s7 = "I Love You HaHaHa \t\n           "

print(s7)

print(s7.lstrip())

print(s7.rstrip())

print(s7.strip())


# replace() 替换

s6 = "I#Love#You#HaHa#Ha"

print(s6.replace("#", "@", 2))


# 拆分、合并:split()、join()

s4 = "I#Love#You#HaHa#Ha"

s5 = s4.split("#", 2)

print(s5)

print("#".join(s5)) # 合并,这个方法很奇怪


# 编码、解码:encode()、decode()

s3 = "飓风呀"

s3_e = s3.encode("utf-8") # GBK

print(s3_e)

print(s3_e.decode("utf-8")) # 解码


10、集合

# 集合:无序、唯一、确定

set1 = {1,2,3,4,4}

print(set1)


# set 集合构造器

set2 = set("Hello World")

print(set2)


# 数组转集合

arr = [1,2,3,4,4,5,6,6,7,6]

print(arr)

set3 = set(arr)

print(set3)


# 集合遍历

for i in set3:

    print(i)


# 集合操作

set4 = {1, 2, 3, 4, 5, 6}

set5 = {4, 5, 6, 7, 8, 9, 10}


# in、not in

print(1 in set4)

print(10 not in set5)


# 集合交集:& 或者 intersection()

set_jj = set4 & set5

print(set_jj)


set_jj= set4.intersection(set5)

print(set_jj)


# 集合并集:| 或者 union()

set_bj = set4 | set5

print(set_bj)


set_bj = set4.union(set5)

print(set_bj)


# 集合差集:- 或者 difference()

set_cj = set4 - set5

print(set_cj)


set_cj = set4.difference(set5)

print(set_cj)


set_cj = set5 - set4

print(set_cj)


# 对称差:两个集合的并集减去交集: ^ 或者 symmetric_difference()

set_dcx = set4 ^ set5

print(set_dcx)


set_dcx = (set4 | set5) - (set4 & set5)

print(set_dcx)


set_dcx = set4.symmetric_difference(set5)

print(set_dcx)


# 集合比较:==、!=、>、<、>=、<=、issubset() 子集、issuperset() 超集、isdisjoint() 是否无交集

set6 = {1,2,3,4,5}

set7 = {3,4,5}

set_bj = set6 >= set7

print(set_bj)


set_bj = set6 < set7

print(set_bj)


set_sub = set7.issubset(set6)

print(set_sub)


set_super = set6.issuperset(set7)

print(set_super)


set_join = set6.isdisjoint(set7)  # 是否无交集

print("---", set_join)


# 集合方法:add()、update()、discard()、remove()、pop()、clear()

set8 = {1,2,3}

set8.add(4) # 添加

print(set8)


set8.update({6}) # 更新

print(set8)


set8.discard(3) # 删除,不存在不报错

print(set8)


set8.remove(1) # 删除,不存在则报错

print(set8)


set8.pop() # 前面删除一个

print(set8)


set8.clear() # 清空

print(set8)


# 不可变集合:frozenset()

set9 = frozenset({1,2,3,4,5,6,7,8,9})

set10 = frozenset([1,2,3,4,5,6])

# set9.add(10) # 不可变

print(set10 & set9)


11、函数

# 导入模块

import importtest


# 模块变量

print(importtest.name)


# 模块函数

print(importtest.importfun(100,200))


# 函数:def 或者 define 定义函数

def testfun(num1, num2):

    print("-" * 50)

    print(importtest.importfun(100, 200)) # 函数里调用函数

    return num1 + num2


# 执行函数

test = testfun(10, 100)

print(test)


12、面向对象class

# 面向对象class

class Animal:

    # 类属性

    count = 0


    # 魔术方法限定动态属性

    __slots__ = ("name", "age", "__sex", "color")


    # 初始化

    def __init__(self, name, age, sex):

        self.name = name  # 共有属性

        self.age = age # 共有属性

        self.__sex = sex # 私有属性

    

    # 私有方法:只能当前类使用

    def __testmethod(self):

        return self.__sex


    # 普通方法

    def play(self):

        return f"Animal:{self.name}:{self.age}岁"


    # 静态方法:传入的参数都是普通参数,不需要实例化可直接调用

    @staticmethod

    def plus(a, b, c):

        return a + b + c


    # 类方法:cls 绑定当前类

    @classmethod

    def plus1(cls, a, b, c):

        print(cls.count)

        return a + b + c


    # 获取私有属性

    def getSex(self):

        return self.__sex

    

    # 魔术方法,实例返回原始数据,不返回内存地址

    # def __repr__(self):

    #     return "666"



# 实例化类

# animal = Animal("小狗", 10, "boy")

# print(animal) # 返回实例的内存地址

# print(animal.play())

# print(animal.name)

# print(animal.getSex())

# print(Animal.plus(1,2,3))

# print(Animal.plus1(1,2,3))

# animal.color = "黄色"

# print(animal.color) # 动态属性


# 类继承

class Dog(Animal):


    # 方法

    def run(self):

        return f"{self.name}在奔跑..."

    

    # 重写父类方法

    def play(self):

        return f"Dog:{self.name}:{self.age}岁"


    # super() 是一个对象,调用父类方法

    def parent(self):

        print(super().play()) # 推荐使用

        # Animal.play(self) # 不推荐

        return "执行父类方法"


# 实例化子类

# dog = Dog("小狗", 10, "boy")

# # print(dog)

# print(dog.run())

# print(dog.play())

# print(dog.parent())


# 多继承类:同一个方法执行第一个类的方法

class A:

    def play(self):

        return "A"

class B:

    def play(self):

        return "B"

class C(A, B):

    pass


# 实例化子类

c = C()

print(c.play())

print(C.__mro__) # 方法搜索顺序,从左到右

print(dir(C)) # 新式类与经典,Python3默认使用新式类 class A(object)


13、面向对象-单例模式

# 面向对象:单例模式

class Animal:


    # 单例标识

    instance = None


    # init标识

    init_flag = False


    # __new__方法,为对象分配空间,返回对象引用

    def __new__(cls):

        # 判断是否为None

        if cls.instance is None:

            # 返回object父类对象,如果不返回 __init__ 初始化不执行

            cls.instance = super().__new__(cls)

        

        # 返回对象引用

        return cls.instance


    # 初始化

    def __init__(self):

        # 判断是否是第一次执行

        if self.init_flag:

            # return 后续就不执行

            return

        

        # 设置为true

        self.init_flag = True

        print("666")


# 实例化

animal = Animal()

animal1 = Animal()

print(animal)

print(animal1)


14、异常exception

# 异常Excepttion

try:

    # 执行正常程序

    a = int(input("请输入数字:"))

    number = 8 / a

    print(number)


except ValueError:

    # 报错

    print("请输入整数!")


except ZeroDivisionError:

    # 报错

    print("除数不能为0")


except BaseError:

    # 报错

    print("基类错误")


else:

    # 执行成功则会执行else代码

    print("不报错则执行else")


finally:

    # finally一直会执行

    print("finally一直会执行")

    print(__name__)


# 嵌套处理异常

try:

    f = open("test.txt", "r", encoding="utf-8")

    for line in f:

        try: # 嵌套的异常处理会保证正常程序执行,不影响整体

            3/0

        except:

            print("计算错误")

        print(line, end="")

except ZeroDivisionError:

    print("除数不能为0")

finally:

    if f:

        f.close()

    print("我都执行")


# 主程序处理错误异常,异常传递

def demo1():

    a = int(input("请输入数字:"))

    number = 8 / a

    return number


def demo2():

    return demo1()


if __name__ == "__main__":

    try:

        print(demo2())

    except Exception as e:

        print("未知错误:%s" % e)



# 主动抛出异常

def init_password():

    # 输入密码

    pwd = input("请输入密码:")


    # 验证长度

    if len(pwd) >= 8:

        return pwd

    

    # 自定义错误

    ex = Exception("密码长度必须8位字符以上")


    # 主动抛出异常

    raise ex


if __name__ == "__main__":

    try:

        print(init_password())

    except Exception as e:

        print(e)


15、模块import

# 模块import

import test01 # 当前目录导入

from test01 import Test01  # 部分导入

import importfiles.test02 as test_02  # 其他目录导入,as 别名

import importfiles.test_ as test # 导入包,test_ 目录下需要有__init__.py文件,来导入当前目录下所有python包


# 执行包

print(test01.name)

print(test_02.name)

print(Test01())

print(test.test03.name)


微信图片_20220914173702.png


16、网络通信 socket_send 客户端

# 网络通信socket 发送数据


# 导入内置的socket包

import socket


'''

创建UDP的参数:

    1、ip协议:

        ipv4

        ipv6


    2、链接类型:

        tcp

        udp

'''


# 链接UDP

udp_socket_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


# 指定发送地址

'''

ip 如果留空则表示本机IP

端口号

'''

send_address = ("172.16.1.57", 8080)


# 创建发送消息

send_message = input("请输入发送的信息:")


# 发送数据:信息内容需要编码,最大1024

udp_socket_client.sendto(send_message.encode("utf-8"), send_address)


# 关闭,释放资源

udp_socket_client.close()


17、网络通信 socket_receive 接收端

# 网络通信socket 接受数据


# 导入内置的socket包

import socket


'''

创建UDP的参数:

    1、ip协议:

        ipv4

        ipv6


    2、链接类型:

        tcp

        udp

'''


# 链接UDP

udp_socket_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


# 指定接受地址

'''

ip 如果留空则表示本机IP

端口号

'''

local_address = ("", 7788)


# bind() 绑定ip

udp_socket_server.bind(local_address)


# 接受数据:recvfrom() 返回的数据是一个元组[信息, 发送方ip与端口]

recv_message = udp_socket_server.recvfrom(1024)

message = recv_message[0].decode("utf-8")

print(message)

print(recv_message[1])


# 关闭,释放资源

udp_socket_server.close()


18、简单通信案例

# 网络通信socket 接受数据


# 导入内置的socket包

import socket


# 发送数据

def send(udp_socket_client):


    # 创建发送消息

    send_message = input("请输入发送的信息:")


    # 发送地址

    send_ip = input("请输入IP:")

    send_port = int(input("请输入端口号:"))

    send_address = (send_ip, send_port)


    # 发送数据:信息内容需要编码,最大1024

    udp_socket_client.sendto(send_message.encode("utf-8"), send_address)


# 接收数据

def recv(udp_socket_server):

    # 接受数据:recvfrom() 返回的数据是一个元组[信息, 发送方ip与端口]

    recv_message = udp_socket_server.recvfrom(1024)

    message = recv_message[0].decode("utf-8")

    print(message)

    print(recv_message[1])


# 主函数

def main():

    # 链接UDP

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


    # 接收地址

    local_address = ("", 7788)

    udp_socket.bind(local_address)


    # 死循环,保证通信一直运行

    while True:

        # 打印消息

        print("-" * 80)

        print("1.发送数据")

        print("2.接收数据")

        print("-" * 80)


        # 输入编号

        msg_type = int(input("请输入编号:"))


        # 处理编号

        if msg_type == 1:

            # 发送数据

            send(udp_socket)

        elif msg_type == 2:

            # 接收数据

            recv(udp_socket)

        else:

            print("请输入正确的编号")


# 调用主函数

if __name__ == "__main__":

    main()



只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!