python入门

变量

变量命名规则

变量名只能是字母,数字和下划线的任意组合
变量名第一个字符不能是数字
变量名区分大小写,大小写字母被认为是两个不同的字符
特殊关键字不能命名为变量名

变量赋值

# 单条赋值
name='张三'
# 多条赋值
a=b=c=1
x,y,z=114514,1919810,"homo"
print(a,b,c)
print(x,y,z)

数据类型

六个数据类型
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)

可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

number

Python3 支持 int、float、bool、complex

String

三种定义方式

# 双引号定义
str1 = "hello"
# 单引号定义
str2 = 'hello'
# 三引号定义(支持换行)  用变量接收它就是字符串,不接收就是注释
str3 = """hello
         world
         """

字符串的拼接

# 加号拼接法(不能直接拼数字)
str="傅桑"+"家乡的sakura开了"
print(str)

# 占位符拼接法
# 占位符
# %s 将内容转换成字符串,放入占位位置
# %d 将内容转换成整数,放入占位位置
# %f 将内容转换成浮点型,放入占位位置
str="%s读书的好地方,%s,%d,%f" % ('师专',114514,3.14145,10)
print(str)


# 对数据的精度进行控制
# %m.nf
# m代表数据的长度,当设置的值小于字符串长度时不生效
# 前面可以加的负号,不加代表不足的长度在前面补空格,符号代表在后面补空格
# n表示要保留几位小数,这里是四舍五入
print("%10.3f114514" % 10.5555)


# 用f快速的进行拼接(无法对数据的精度进行控制)
p1="jack"
p2='rose'
hooby='jump'
print(f"{p1},{hooby};{p2},{hooby}")

剩下的会在数据容器当中进行介绍

运算符

运算符描述
+
-
*
/
//取整除
%取余
**指数

示例

print(1+1)          # 结果:2
print(2-5)          # 结果:-3
print(5*5)          # 结果:25
print(2/3)          # 结果:0.6666666666666666
print (5//2)        # 结果:2
print(10%3)         # 结果:1
print(2**5)         # 结果:32

符合赋值运算符

num=10
num+=1
num-=1
num**=2

输入输出

input():读取键盘输入
print():打印输出

name=input("你是谁")
print("我是:",name)

要注意无论输入的是什么,接收到的永远是字符串类型

age=input("你几岁了?")
print(type(age))

if语句

# 基本格式

# 判断条件后面有一个冒号
# 归属于if语句的代码块,需要在前面有四个的空格缩进

if 1 + 1 == 2:
    print("居然相等")
else:
    print("你不会来真的吧")

循环

while循环

import random

a = random.randint(1, 10)
b = 0
i = 1
while b != a:
    b = input("请输入你要猜的数字")
    b = int(b)
    if b > a:
        print("不对哦,猜大了")
    elif b < a:
        print("不对哦,猜小了")
    else:
        print(f"你太棒了,就用了{i}次就猜到了")
    i += 1

for循环

# for 临时变量 in 待处理数据集
# 待处理数据集,又叫序列类型
# 序列类型:其内容可以被一个一个的取出
# 常见序列类型:字符串,列表,元组等

name = 'zhangsan'
for n in name:
    print(n)

# range语句
range(5)       # 表示0-4的整数
range(5,10)    # 表示[5,10)
range(5,10,2)  # 表示(5,7,9),第三个参数表示步长

# 以此我们常常可以将range语句和for循环搭配起来使用

for i in range(10):
    print(i)

for的临时变量作用域

# 要注意,这里的定义的临时变量,虽然可以在for循环作用域的外部生效,但是按照编码规范是不允许的
for i in range(10):
    print(i)

print(i)

函数

函数是组织好的,可重复使用的,用来实现特定功能的代码块

# 函数的定义
def 函数名(参数):
    函数体
    return 返回值

函数中变量的作用域只在函数内部,但是可以通过global关键词将其变为全局变量

多返回值


# python的函数是可以有多个返回值的,用法如下
def test_fun():
    return "zjnu", 666


a, b = test_fun()
print(f'a的值为{a},b的值为{b}')

参数的传递

1.位置参数

需要位置一一对应

def param_fun(name, age, gender):
    return None

param_fun("张三", 18, '男')
2.关键词参数

通过这种形式不需要位置的意一一对应

def param_fun(name, age, gender):
    return None

param_fun(name="张三", gender='男', age=18, )
3.缺省参数

在定义函数的是可以指定参数的默认值,没写这个参数,就会使用这个默认值
同时这里要注意,默认参数只能放在所有参数的最后面

def param_fun(name,gender, age=18 ):
    return None
4.不定长参数

位置不定长
以元组的形式传递参数,一般命名为args

def param_fun(*args):
    return None


param_fun(1, 2, 1, 'name')

关键词不定长
以字典的形式传递,一般命名为kwargs

def param_fun(**kwargs):
    return None


param_fun(key1=1, key2=2, key3=1, key4='name')

匿名函数

def test_fun(add):
    result = add(1, 2)
    return print(f'输出的结果是{result}')


test_fun(lambda x, y: x + y)

数据容器

可以通过是否支持修改,是否可以有重复元素,是否有序将容器分为列表,元组,字符串,集合,字典

列表

定义

# 列表的定义
list1 = [1, 2, 3, 4, 5, 6]
# 格式化
list2 = list()
print(list1)
print(list2)

# 列表内支持存储不同数据类型的数据
list3 = ['114514', 1919810, 3.14,True]
print(list3)

通过下表获取列表中的元素

list3 = ['114514', 1919810, 3.14, True]

# 列表的下表的索引值是从0开始的
print(list3[3])  # 输出值为True

# 负数的索引为从前往后,-1为最后一个元素
print(list3[-4])  # 输出值为114514

# 嵌套列表的索引获取
list4 = [[1, 2, 3, 4], [5, 6, 7, 8, 9]]
print(list4[1][-1])  # 输出值为9

# 使用下表索引的时候,注意不要越界

列表常用的方法

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

# index,查找数组中是否存在该元素,如果找不到就报错ValueError,找到则返回对应元素的索引
print(list5.index(5))  # 输出结果4

# insert,接收两个参数,第一个为要插入的位置的索引,第二个为要插入的元素
list5.insert(1, 99)
print(list5)  # 输出结果[1, 99, 2, 3, 4, 5]

# append,在列表的尾部新加元素
list5.append(6)
list5.append([1, 2, 3, 4])
print(list5)  # 输出结果[1, 99, 2, 3, 4, 5, 6, [1, 2, 3, 4]]

# extend,也是在尾部追加,但是如果是追加其他容器,则会将容器中的元素拆开
list5.extend([100, 101, 102])
print(list5)  # 输出结果[1, 99, 2, 3, 4, 5, 6, [1, 2, 3, 4], 100, 101, 102]

# del关键词
del list5[0]
print(list5)  # 删除了1

# pop
num = list5.pop(0)
print(num)  # 删除了99

# remove,删除从前往后匹配到的第一个元素,同样没有该元素会报ValueError的错
list5.remove(2)
print(list5)  # 删除了2

# clear,清空列表
list5.clear()
print(list5)  # 输出结果[]

list6 = [1, 1, 1, 2, 3, 4, 5]
# count,统计某个元素的数量
print(list6.count(1))  # 输出结果为3

# len,统计列表长度
print(len(list6))  # 输出结果为7

列表的特点

上限元素有2^63-1个,9223372036854775807个
可以容纳不同的数据类型
数据是有序存储的
可以有重复的数据
可以修改

元组

定义

# 定义
# 如果只有一个元素,需要在该元素后面加一个逗号
tuple1 = (1,)
print(tuple1)

# 格式化
tuple2 = tuple()
print(tuple2)

常用方法

tuple3 = ('114514', 'str', 1919810, 1, 1, 1, (1, 2, 3))

# 索引获取
print(tuple3[-1][0])   # 输出1

# index,和list用法相似
print(tuple3.index('str'))   # 输出1

# count,和list用法相似
print(tuple3.count(1))  # 输出3

# len,和list用法相似 
print(len(tuple3))   # 输出7

元组的特点

可以容纳不同的数据类型
数据是有序存储的
可以有重复的数据
不可以修改

字符串

常用方法

str1 = 'zjnu_zjnu'

# 索引
print(str1[-5])  # 输出的值为 _

# index
print(str1.index('zjnu'))  # 输出的值为0

# replace,要注意不是修改,而是返回一个新的字符串
str2 = str1.replace('zjnu', 'zju')
print(str2)  # 输出的值为zju_zju

# split,按照指定的字符串进行分割,并将结果储存在列表中
list1 = str1.split('_')
print(list1)  # 输出的值为['zjnu', 'zjnu']

# strip
# 去除前后的空格
str3='     hello world    '
print(str3.strip())   # 输出的值为hello world
# 去除前后的指定的字符串,里面的按照单个字符进行匹配
str4='12hello world21'
print(str4.strip('12'))    # 输出的值为hello world

# count
print(str1.count('zjnu'))   # 输出的值为2

# len
print(len(str1))  # 输出的值为9

字符串的特点

只可以存储字符串
数据是有序存储的
可以有重复的数据
不可以修改

对序列切片操作

我们将列表,元组,字符串这种可以通过索引获取元素的容器,叫做序列

# 切片操作
# 序列[a:b:c]
# a代表要取的起点
# b代表要取的终点(不包含)
# 当起点和终点为序列的头和尾是可以省略
# c代表步长,步长为1是可以省略,也可以负数
str5 = '0123456789'
result = str5[::-1]   # 9876543210
print(result)

集合

# 定义
set1={1,1,1,2}
print(set1)

# 格式化
set2=set()
print(set2)

集合的常用方法

# 定义
set1 = {1, 1, 1, 2, 3, 4}
print(set1)  # 输出结果是{1, 2, 3, 4}

# 格式化
set2 = set()
print(set2)  # 输出结果是set()

# add,添加新元素
set1.add('zhangsan')
print(set1)  # 输出结果是{1, 2, 3, 4, 'zhangsan'}

# remove,移除元素
set1.remove('zhangsan')
print(set1)  # 输出结果是{1, 2, 3, 4}

# pop,随机取出一个元素
print(set1.pop())  # 输出结果是?

# clear,清空集合
set1.clear()
print(set1)  # 输出结果是set()

# difference
set3 = {1, 2, 3, 4}
set4 = {1, 3, 5, 7}
diff_set=set3.difference(set4)
print(diff_set)  # 输出结果是{2, 4}

# difference_update,在调用方法的集合中删除相同的元素
set3.difference_update(set4)
print(set3)    # 输出结果是{2, 4}

# union,两个集合取并集
union_set=set3.union(set4)
print(union_set)   # 输出结果是{1, 2, 3, 4, 5, 7}

# len
print(len(union_set))  # 输出结果是6

集合的特点

可以存储多种数据
数据是无序存储的
不可以有重复的数据
可以修改

字典

定义

# 定义
dict1={"张三":18, "李四":17, "王五":19}
print(dict1)  # 输出的结果是{'张三': 18, '李四': 17, '王五': 19}

# 定义一个空字典
dict2=dict()
print(dict2)  # 输出的结果是{}

要注意key的值是不可重复的,如果重复的话,后写入的会将之前写入的给覆盖

常用操作

# 定义
dict1 = {"张三": 18, "李四": 17, "王五": 19}
print(dict1)  # 输出的结果是{'张三': 18, '李四': 17, '王五': 19}

# 定义一个空字典
dict2 = dict()
print(dict2)  # 输出的结果是{}

# 增加
dict1['赵六'] = 20
print(dict1)  # 输出的结果是{'张三': 18, '李四': 17, '王五': 19, '赵六': 20}

# 修改
dict1['张三'] = 100
print(dict1)    # 输出的结果是{'张三': 100, '李四': 17, '王五': 19, '赵六': 20}

# 删除
dict1.pop('赵六')
print(dict1)   # 输出的结果是{'张三': 100, '李四': 17, '王五': 19}

# 获取全部的key
keys=dict1.keys()
print(keys)   # 输出的结果是dict_keys(['张三', '李四', '王五'])

# 清空
dict1.clear()
print(dict1)  # 输出的结果是{}

字典的特点

每一份数据都是一个键值对
不可以有重复的key
可以存储多种数据
数据是无序存储的
可以修改

文件的读取和写入

打开文件

# name文件名
# mode,打开的模式
# mode,文件编码的格式
f=open(name,mode,encoding)

mode的三种访问模式

模式描述
r只读
w文件已存在覆盖写入,不存在,创建并写入
a文件已存在,在已有内容后面写入,不存在,创建并写入

文件的读取

# read中的参数,表示读取几个字符
# 不填写参数默认读取全部
print(f'read方法读取的是"{f.read(10)}"')


# readlines一次性读取全部的内容
print(f.readlines())


# readline读取一行的数据
for line in f:
    print(line)


需要注意当操作完文件后,要调用close方法,取关闭对文件的占用。

f.close()

或则一下的方法获取文件对象

with open('test.txt', 'r', encoding="UTF-8") as f:
    for line in f:
        print(line)

这样会自动的在文件操作完毕后,结束对文件的占用

文件的写入

注意当我们调用write方法是,内容并没有写入文件,而是在缓冲区内,而只用当我么调用flush方法是,才会将内容写入磁盘。这样可以减少IO操作,提高效率。

f = open('test2.txt', 'w', encoding="UTF-8")
f.write('hello world')
# close方法内置了flush,因此调用了close,就不需要再调用flush
f.close()

当然我们将模式改成a,就可以实现对文件的追加写入了

异常

异常捕获

try:
    a = 10 / 0
    print(a)
except:
    print('出现除数为0的异常')


# 捕获指定的异常
try:
    print(name)
except NameError as e:
    print(e)

# 捕获多个异常
try:
    print(1/0)
except (NameError,ZeroDivisionError) as e:
    print(e)


# else语句,没有异常执行
# finally,运行结束
try:
    print(1/10)
except (NameError,ZeroDivisionError) as e:
    print(e)
else:
    print('无事发生')
finally:
    print('运行结束')

面向对象

类的定义

class Student:
    # 用两个下划线开头的成员变量为私有成员变量
    __password = None

    # 构造方法
    def __init__(self, name, age, gender, password):
        # 成员变量
        self.name = name
        self.age = age
        self.gender = gender
        self.__password = password

    # 成员方法
    def show(self):
        print(f'学生的名字是{self.name},学生的年龄是{self.age},学生的性别是{self.gender}')

    # 类似于java的tostring方法
    def __str__(self):
        return f"学生的名字是{self.name},学生的年龄是{self.age},学生的性别是{self.gender},学生的密码是{self.__password}"

    # 用于定义两个对象大于小于关系的比较
    def __lt__(self, other):
        return self.age < other.age

    # 用于定义两个对象之间的大于等于和小于等于关系
    def __le__(self, other):
        return self.age <= other.age

    # 用于定义两个对象之间是否相等的方法,不写这个方法默认比较两个的内存地址
    def __eq__(self, other):
        return self.name and other.name and self.age == other.age and self.gender == other.gender

    # 私有方法
    def __test(self):
        return '这是一个私用方法'

创建对象

student = Student('张三', 18, "男", "123456")

继承

python是支持多继承的
如果多个父类中有相同的方法或成员变量,按照从左往右的优先级进行覆盖

class Wheel:
    def function(self):
        print('我会滚')


class Car:
    weight: None
    height: None

    def __init__(self, weight, height):
        self.weight = weight
        self.height = height

    def function(self):
        print('我开的很快')

    def __str__(self):
        return f'车的重量是{self.weight},车的高度是{self.height}'


class Audi(Car, Wheel):
    # 用于跳过格式,不用在类中写方法
    # pass
    def __init__(self, weight, height):
        Car.__init__(self, weight, height)


audi = Audi(180, 180)
audi.function()
print(audi,audi.height)

多态以及抽象类

抽象方法就是方法体中不写任何的内容,写一个pass关键词,跳过python的格式检查

class Payment:
    def pay(self):
        pass


class AliPay(Payment):
    def pay(self):
        print('支付宝支付')


class WeChat(Payment):
    def pay(self):
        print('微信支付')


def payMoney(pament: Payment):
    pament.pay()


ali = AliPay()
wechat = WeChat()

payMoney(ali)
payMoney(wechat)

类型注解

这一点可以和java当中的泛型相类比
我们可以在变量,对象或容器定义的时候指定其类型,但是要注意,这个只是一个提示,并不会强制要求这个只能是指定的类型

a: int = 'a'

student: Student = Student('张三', 18, "男", "123456")

test_list: list[int] = [1, 2, 3, 4]

test_dict: dict[str, int] = {'age': 18}

def add(x:int,y:int) ->int:
    return x+y
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风过于前

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

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

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

打赏作者

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

抵扣说明:

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

余额充值