参考: https://www.cnblogs.com/wupeiqi/p/5444685.html
一、运算符
1.1、字符串进行乘法运算(只能进行乘法运算)
>>> print('tom-'*3)
tom-tom-tom-
1.2. 可以对数字进行加减乘除等各种运算
>>> 19 % 5 #取余
4
>>> 19//5 #两个//表示取商
3
>>> 2**2 #表示2的2次方
4
1.3、in 和 not in ,计算的结果是bool值
name = '你好'
if '你' in name:
print('OK')
else:
print('NO')
if '看' not in name:
print('YES')
else:
print('ERROR')
二、 基本的数据类型
1、数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-231~231-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807
2、布尔值
真或假
1 或 0
3、字符串
字符串常用功能:
移除空白、分割、长度、索引、切片
4、列表
对应的类list
创建列表:
name_list = ['alex', 'seven', 'eric']
或
name_list = list(['alex', 'seven', 'eric'])
基本操作:索引、切片、追加、删除、长度、切片、循环、包含
列表的解包:
# 列表的解包
sec, *first, three= ['www', 'baidu', 'com', '?'] # 参数对应列表中的值,*代表中间的值
print(first)
5、元祖
对应的类tuple
可理解为对列表的二次加工,不同之处是元祖不能被修改、增加、删除;
元祖的一级元素不可修改,二级元素可以修改;
创建元祖:
ages = (11, 22, 33, 44, 55,) #一般建议在后边加一个,
或
ages = tuple((11, 22, 33, 44, 55))
基本操作:索引、切片、循环、长度、包含
6、字典(无序)
对应的类dict
列表、字典不能作为字典的KEY;
如果键重复了,会被覆盖掉;
创建字典:
person = {"name": "mr.wu", 'age': 18}
或
person = dict({"name": "mr.wu", 'age': 18})
常用操作:索引、新增、删除、键、值、键值对、循环、长度
获取字典的最大值:
# 获取字典的最小值与最大值,并进行排序
zidian = {'100':'d', '0':'a', '1':'b', '2':'c'}
print(zidian.keys()) # 获取字典的键
print(zidian.values()) # 获取字典的值
print(min(zip(zidian.keys(), zidian.values()))) # 字典中的最小的值
7、集合
对应的类set
定义:由不同元素组成、无序、集合中的元素必须是不可变类型
创建集合:
s= {1,2,3,4,5,6}
或
s= set("hello")
集合常用操作:
l1 = {'linux','PHP','Redis'}
l2 = {'Java','PHP','Redis'}
print(l1&l2) # &表示取交集
print(l1|l2) # |表示求并集
print(l1-l2) # -表示求差集
print(l1^l2) # ^表示求交叉补集
数据类型中常用的魔术方法:
1、数字
int()
2、字符串
replace、find、join、strip、startswith、split、upper、lower、format
3、列表
append、extend、insert
4、元祖
5、字典
get、update、keys、values、items
6、布尔值
为假的情况:None "" () [] {} 0
三、 流程控制
1)if条件语句
a = 1
if a == 1:
print('这是1')
elif a == 2:
print('这是2')
else:
pass #表示什么也不执行
print('开始服务啦')
2)while条件语句
import time #引入时间函数
count = 0
while count < 10:
print(count,time.time())
count = count + 1
3)for循环
v = 'tom'
for item in v: #item是任意取的值
print(item)
四、函数
1、函数的定义(用def
关键字)
# 函数的定义及参数的替换
def prodiet_gf_age(my_age = 29):
gf_age = my_age / 2 + 8
return gf_age
age1 = prodiet_gf_age()
age2 = prodiet_gf_age(28)
print(' My girl firend age is : ', age1 )
print(' My girl firend age is : ', age2 )
def keyword_arg(a = 'v', b = 'p', c = 'n'):
print(a, b, c)
keyword_arg('vv', 'pp')
keyword_arg(c = 'vv')
2、函数的参数中的可变参数(参数前加*
)
# 可变参数
def add_number(*args):
total = 0
for a in args:
total += a
print(total)
add_number(1)
add_number(1, 11)
add_number(1, 11, 111)
add_number(1, 11, 111, 1111)
# 函数参数的解包
def heath_cat(age, apple_num, smoke_num):
value = (100 + age) + (apple_num * 3.5) - (smoke_num * 2)
print(value)
ban = [28, 20, 5]
heath_cat(*ban)
3、zip 函数
first = ['a', 'b', 'c']
last = ['x', 'y', 'z', 'aa']
leter = zip(first, last)
for i, j in leter:
print(i, j)
4、lambda函数(是一个没有名称的函数)
anser = lambda a:a*100
print(anser(2)) #200
def ab(anser = lambda x:x*10):
print(anser(5))
ab()
ab(lambda x:x*5)
五、类
# 类
class Enemy: # 类的声明
life = 3 # 类变量
live = 99
# 构造函数
def __init__(self, x):
self.life = x # 实例变量
print('init构造函数被使用')
def attack(self):
print('掉一滴血')
self.life -= 1
def checkLife(self):
if self.life <= 0:
print('我屎了')
else:
print('我还活着,来打我')
enemy1 = Enemy(6) # 实例化一个对象,参数是向构造函数中传的值
enemy1.attack() # 对象的调用
enemy1.checkLife()
print(enemy1.live)
class Maril:
def move(self):
print('移动')
# 类的继承,Python允许多继承
class Child(Enemy, Maril): # ()包裹的就是要继承的类,继承多个类用,隔开
def find_num(self):
print(100)
def attack(self): # 同名的函数会覆盖父类的函数
print('掉两滴血')
self.life -= 2
a = Child(6)
a.move()
六、基础算法
1、map 函数(对列表中的每一个值都调用函数)
# map函数
price = [10, 20, 23]
def new_price(NUM):
return NUM * 2;
print(list(map(new_price(), price))) # [20, 40, 46]
2、字典的计算与排序
# 字典的计算与排序
zidian = {
'0':'b',
'1':'c',
'2':'a',
'3':'d',
}
# 排序需要用到zip函数
print(sorted(zip(zidian.values(), zidian.keys()))) # [('a', '2'), ('b', '0'), ('c', '1'), ('d', '3')]
3、列表中案某个键值进行排序
# 列表的最大值与最小值
import heapq # heapq 队列算法模块
grad = [
{'tick':'Apple', 'price':'201'},
{'tick':'Google', 'price':'800'},
{'tick':'HuaWei', 'price':'100'},
{'tick':'FB', 'price':'50'}
]
print(heapq.nsmallest(3, grad, key=lambda grad:grad['price'])) # 取集合中最小的三个, 第三个函数是自定义的
4、通过key值对自定义对象中的额多个键对应的值进行排序
# 通过key值对自定义对象中的多个键对应的值进行排序
from operator import itemgetter
grad = [
{'tick':'Apple', 'price':201},
{'tick':'Google', 'price':800},
{'tick':'aoogle', 'price':800},
{'tick':'boogle', 'price':800},
{'tick':'HuaWei', 'price':100},
{'tick':'FB', 'price':50}
]
for x in sorted(grad, key=itemgetter('price', 'tick')):
print(x)
七、初出茅庐
1、 从网上爬取图片
import random
import urllib.request
def download_web_image(url):
name = random.randrange(1, 1000)
full_name = str(name) + '.jpg'
urllib.request.urlretrieve(url, full_name)
download_web_image('https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=119124115,3768443592&fm=173&app=49&f=JPEG?w=640&h=400&s=4CD700C6EC599FD608B5E10B030010D2')
2、读写文件
# 写
fw = open('sample.txt', 'w')
fw.write('Holle Word')
fw.close() # 关闭资源
# 读
fr = open('sample.txt', 'r')
content = fr.read()
print(content)
3、异常处理
while True:
try:
numb = int(input('你喜欢的数字是 : '))
print(18/numb)
break
except ValueError: # 捕获wring
print('请确保输入的是数字')
except ZeroDivisionError: # 捕获是0导致的错误
print('除数不能为0')
except: # 捕获所有的异常,不建议使用,错误不明确
break
finally: # 不管是否捕获异常,都执行
print('本次循环结束')
4、线程
import threading
class wxMessenger(threading.Thread):
def run(self):
for x in range(10):
print(threading.current_thread().getName()) # 输出线程的名称
x = wxMessenger(name = '发送消息')
y = wxMessenger(name = '接==收消息')
x.start()
y.start()
案例:
# 9*9乘法表
for i in range(1,10):
string = ""
for j in range(1,i+1):
string += str(j) + "*" + str(i) + "=" + str(i*j)+"\t"
print(string)