python学习系列

本系列来源于B站视频。UP主为IT搬運工,系列视频为[小甲鱼]零基础入门学习python点我直达

应用范围

操作系统、web、3D动画、企业运用、云计算。

学到什么

  • python3的所有常用语法
  • 面向对象编程思维
  • 运用模块编程
  • 游戏编程
  • 计算机仿真

python安装

www.python.org 官网

从IDLE启动python

IDLE是Python Shell。键入文本和程序进行交互。

>>> print("I love Python")
I love Python
>>> 5+3
8
>>> 51321*5
256605
>>> 5336*53**53
129968141808561191938900508391278815366894505894666579546279378373421381170425591535502818390328
>>> 532/8
66.5
>>> 1/3333
0.00030003000300030005
>>> 9876543210123456789*1234567890987654321
12193263121170553265523548251112635269
>>> 222222
222222
>>> 3462235*5//
SyntaxError: invalid syntax
>>> 3462235*5/5
3462235.0
>>> print("I love Python\n" * 8)
I love Python
I love Python
I love Python
I love Python
I love Python
I love Python
I love Python
I love Python

>>> print("I love Python\n" + 8)
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    print("I love Python\n" + 8)
TypeE
temp = input("猜数字")
guess = int(temp)
if(guess == 8)
    print("right")
else
    print("error");

BIF

Bulit-in function内置函数

dir(__builtins__) #查看所有内置函数
help(input) # 查看内置函数的帮助

变量和字符串

变量

Python并不是把值存储在变量中,而更像是把名字贴在值的上方??

  • 使用变量之前需要先进行赋值
  • 变量名可以包括字母、数字、下划线,但变量名不能以数字开头
  • 变量名区分大小写
  • 等号赋值,左边是名字,右边是值

字符串

创建字符串需要在字符两边加上引号,可以是单引号或者双引号,但前后必须一致。

字符串中出现双引号或者单引号:

加转义字符\

'Let\'s go'
>>> str='C:\now'
>>> print(str)
C:
ow

\n代表换行,可以用\对、进行转义

str='C:\\now'
print(str)
C:\now

原始字符串,在前面加上r即可

str=r'C:\now'

跨越多行的字符串,三引号

str='''1
2
3
4
'''

条件分支

if 条件 :
条件为真执行的操作
else 条件 :
条件为假执行的操作

while循环

while 条件:

​ 条件为真执行的操作

and 逻辑操作符

and可以将任意表达式连接在一起,并得到一个布尔类型的值

左边和右边都正确的话,才正确,有一个不对就不对

1>2 and 3>2 #错误
2>1 and 3>2 #正确

random模块,产生随机数

其中一个randint函数返回随机整数

import random
sercet = random.randint(1,10) #返回一个1到10的随机整数
print(sercet)

数据类型

数值类型

整形、布尔、浮点、e记法

类型转换

int()
float()
str()

获取关于类型的信息

type() #返回类型
isinstance() #两个参数,如果两个参数类型相等返回true,否则返回false

常用操作符

算数操作符

+  -  *   /(算出为精准值3/2 = 1.5)   %   **(幂运算 3**23*3一样  和计算器中^符号相同)   //(3//21)  +=  -= *= /=

比较操作符

>= <= == != > <   返回true或者false

逻辑操作符

and   # 与
or #或
not #非

优先级问题

如果是个正常上过小学的,和你普通认知一样

img

分支和循环

if 条件
	操作#
elif 条件
	操作#
else
	操作#
    
while 条件
	操作#
    
for

三元操作符

small = x if x<y else y

断言

assert 该关键字后面为假时直接崩溃

for循环

name = 'moliam'
for i in name:
	print(i,end='\n')
	
m
o
l
i
a
m

range()

range([start,],stop[,step = 1])

该BIF有三个参数,[]括起来的标识可选,不传

step=1标识低三个参数的默认值为1

该BIF作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,

会重新进行赋值,即使循环中已经改变了循环变量的值

代码:

for i in range(10):
	if i%2 != 0:
		print(i)
		continue
	i+=2 #下一次循环被直接修正,只在此次循环有用
	print(i)

结果

2
1
4
3
6
5
8
7
10
9

break continue

break直接结束循环

continue,跳出本次循环,进行下一轮循环

列表

普通列表、混合列表、空列表

添加元素

append()   #添加元素
extend()   #添加多个元素,使用列表
insert()   #在固定位置添加元素

删除元素

remove()
del
pop()

列表分片

member[1:3]

其他方法

count()  # 成员数目
index()  # 成员位置
reverse() # 成员逆序
sort() # 成员排序,默认从小到大

元组

在使用上和列表相似

列表:可以随意修改列表中的元素,使用的为中括号

元组:元组是不可改变的,类似于const,使用的为小括号,但是必须有逗号

tuple1 = (1,2,3)
tuple2 = (1)    # int
tuple3 = (1,)   # tuple

字符串

capitalize()   #将字符串的第一个字符改为大写
casefold() #将整个字符串的所有字符改为小写
center(width)  #字符串居中,并用空格填充长度width的新字符串
count(sub[,start[,end]]) #查找出现字符的数目
join(sub)
format #格式化
>>>"{0} love{1}".format("I"," moliam")
'I love moliam'
>>> "{a} love{b}".format(a="I",b=" moliam")
'I love moliam'
>>> "{{a}}".format("不打印")  #转义
'{a}'
>>> "{0:.1f}{1}".format(3.1415," == pi") #格式输出
'3.1 == pi'
>>> '%c %c %c' %(97,98,99) #元组
'a b c'

序列

list() #将一个可迭代对象转换为列表

>>> a='moliam'
>>> a=list(a)
>>> a
['m', 'o', 'l', 'i', 'a', 'm']

tuple() #将一个可迭代对象转换为元组
str() #将参数转化为字符串
len()  #返回长度
max() #返回最大值
min() #返回最小值
sum() #求和
sorted() #排序

函数

def Myfirstfunction():
    print("moliam")
Myfirstfunction()

def Myfirstfunction(name):
    '函数定义过程中的name是形参'   
    print(name)
>>> Myfirstfunction("moliam")
moliam
>>> Myfirstfunction.__doc__  
'函数定义过程中的name是形参'

#收集参数
>>> def test(*para):
    print("%d" %(len(para)));
    print("第二个参数是",para[1]);  
>>> test(1,2,3,4)
4
第二个参数是 2

过程

局部变量、全局变量

global #在函数中使用全局变量

函数嵌套

>>> def fun1():
	print("1")
	def fun2():
		print("2")
	fun2()

>>> fun1
<function fun1 at 0x00000218DFAA3708>
>>> fun1()
1
2
>>> # fun2只能在fun1中调用

闭包

>>> def fun3(x):
	def fun4(y):
		return x+y
	return fun4

>>> fun3(2)(3)
5

nonlocal  #声明非局部变量

lambda

>>> g = lambda x:2*x+1
>>> g(5)
11
# 匿名函数,使用该关键字创建一个匿名函数
# 用于只需要调用一两次的函数,可使得代码更加精简
filter()
>>> def odd(x):  #偶数
	return x%2

>>> temp = range(10)  #0-9 10个数字
>>> list(filter(odd,temp)) #过滤掉0-9中的偶数
[1, 3, 5, 7, 9]
>>> list(filter(lambda x:x%2,range(10)))
[1, 3, 5, 7, 9]
map()
>>> list(map(lambda x:x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

字典

>>> dirct = {'1':1,'2':2}
>>> print("%d" % dirct['1']);
1

get()
clear()
keys()
values()
items()

集合

>>> num = {1,2,3,4,5}
>>> num
{1, 2, 3, 4, 5}
>>> num2 = {1,2,3,4,5,4,3,2,1}
>>> num2
{1, 2, 3, 4, 5}  #唯一

>>> num3 = frozenset([1,2,3,4,5])  #类似于const声明,不可变集合
>>> num3.add(0)
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    num3.add(0)
AttributeError: 'frozenset' object has no attribute 'add'

模块

# os模块  os.path模块 time模块
>>> import os
>>> os.getcwd()
'F:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python37_64'

os.chdir(path)  #改变工作目录
#更多模块函数请百度
pickle() #模块
#amazing
#将数据转为二进制
#存放:pickling
#读取:unpickling

>>> import pickle
>>> mylist = [12,3.14,"moliam"]
>>> pickle_file = open('mylist.pkl','wb')  #需要管理员运行
>>> pickle.dump(mylist,pickle_file)
>>> pickle_file.close()

#不要随便以wb的方式打开你电脑上的文件,我用自己电脑上的一个文件进行测试,然后里面的东西全清了,自己给自己挖坑,因为w是直接从文件开头进行写,追加写的话不能用w

python异常

python标准异常

根据提示可知是什么问题

百度

try

try:  #检测范围
except Exception[as reason]:
    #出现异常后的处理代码
finally:
    #无论如何都会执行的代码
>>> raise TypeError   #对异常进行解释
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    raise TypeError
TypeError

丰富的else

#当在for while循环中,没有遇到break,且else与for while对齐,则在执行循环完毕后,执行else
def show(num):
    count = num // 2
    while count > 1:
        if num%count == 0 :
            print('最大约数为 %d' %(count))
            break
        count -= 1
    else:
        print('%d 为素数' %(num))
num = int(input("输入一个数字:\r\n"))
show(num)
#try语句如果没有错误,也可以使用else进行处理
try:
    int('abc') #int('123') 
except ValueError as reason:
    print ("错误原因 %s" %(reason))
else:
    print("没有错误")

with语句

#会自动关注with后面的语句,进行有可能的对应操作
#例如后面如果是open 则当该文件未被引用之后则会自动调用close

对象

对象=属性+方法

class Turtle:  #类名约定以大写字母开头

面向对象编程

self  #对象竟是我自己
__init__() #应该类似于C++中的构造函数
#公有,私有

 #前加两个下划线就变成私有了  __name  _类名__函数名

继承

class 子类(父类)  #子类可以继承父类的任何属性和方法
super().__init__()  #子类有父类相同的函数名时会被覆盖,可使用super进行对覆盖函数的调用

多重继承

class 子类(父类1,父类2,...)

构造和析构

__new__()
__init__()  
__del__()

算术运算

迭代器

生成器

封装


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!