python基础

一.while循环

1.数字非0的bool值

#while判断条件非0
while 1:
    print("你好")   #无限打印“你好”

#while判断条件为0
while 0:           #0的bool值为False
    print("哈哈")   
    
    

2.while else

#人为打破的while循环,else不执行,自己执行完不满足条件了,else执行
i=1
while i<5:
    print(i)
    i+=1
else: 
    print("over")
#1,2,3,4,over

i=1
while i<5:
    print(i)
    i+=1
    if i==3:
        break      #人为打破while循环
else: 
    print("over")
#1,2

二. 字符串格式化

1.方法一:%

#一个%代表占位
s="天气好%s%"%("好")
print(s)    #ValueError: incomplete format。错误原因:%后没跟数据类型

#两个%代表转义
s="天气好%s%%"%("15")
print(s)    #天气好15%

2.方法二:f

#f只有在python3.6之上才能使用
what="下雨"
a=f"今天{what}"
print(a)         #今天下雨

3.方法三:format

a="我是{}{}".format("好","人")
print(a)         #我是好人

name = "alex{2},{0},{1}"      
print(name.format("a","b","c"))   #按照索引值进行填充("a","b","c"相当于元组)。
#打印结果为:"alexc,a,b"

name = "alex{a},{b},{c}"
print(name.format(a=1,c=2,b=3))  #按照关键字进行填充
#打印结果为:"alex1,3,2"

三. 编码

'''
ascii   (美国)    	不支持中文
gbk     (国标)    	英文1字节   中文2字节
unicode (万国码)  		英文2字节   中文4字节 (中文任何字符,包含标点符号)
utf-8   (可变长编码)   英文1字节   欧洲2字节  亚洲3字节
'''

'''  系统默认编码
linux   --utf-8
mac     --utf-8
windows --gbk
'''

''' 单位换算
1字节=8位
1Bytes=8bit
1024Bytes=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
'''

四.运算符

1.算数运算符

# + - * / ...
python2:
    -- 5/2=2
    -- 5.0/2=2.5
    -- ps:/除数和被除数都为整数,结果为得到商的整数部分;在除数或被除数加上小数点,得到正确值
python3:
    -- 5/2=2.5
    -- 5//2=2
    -- ps:/得到准确值,//得到商的整数部分

2.比较运算符

> < == !=

3.赋值运算符

= -= += *=  ...

4.逻辑运算符

and 两边都为真取后面值 两边都为假取前面的
or  两边都为真取前面值,两边都为假取后面值
not
优先级: ()>not>and>or
#例子:1 and 2 or 3 not False and 4 or (1 and 2)

5.成员运算符

in
not in

五.整型和布尔值的转换

1.进制之间的转换

二进制转换成十进制:v = “0b1111011”
print(int('0b1111011',2))
十进制转换成二进制:v = 18
print(bin(18))
八进制转换成十进制:v = “011”
print(int('011',8))
十进制转换成八进制:v = 30
print(oct(30))
十六进制转换成十进制:v = “0x12”
print(int('0x12',16))
十进制转换成十六进制:v = 87
print(hex(87))

2.布尔值

bool() 布尔值
print(bool(1))  # 数字非零的就是True 零就是False
print(bool("")) # 字符串不为空就是True ,字符串中没有任何内容就是False

bool: False
数字: 0
字符串: ""
列表:[]
元组:()
字典:{}
集合: set()
其他: None

六.字符串详解

1.字符串方法
(1).s.upper() 大小写应用场景:验证码

1.s.upper()           #全部大写
s="Abc5" 
print(s.upper())      #ABC5
2.s.lower()       	  #全部小写
s="AbC"
print(s.lower())  	  #abc

(2)s.startswith() 以什么开头、以什么结束

1.s.startswith()      #以什么开头
s="nihao"
print(s.startswith("n"))  #True,返回bool值
s="nihao"
print(s.startswith("i",1)) #取下标为1及之后的字符串,看是否以i开始
2.s.endwith()  #以什么结束
s="nihao"
print(s.endswith("h",2)) #取下标为2及之后的字符串,看是否以h结束

(3).s.count() # x、start_index、end_index

s="xxssooeesfc"
print(s.count("s"))  #查看s的字符个数

print(s.count("s",1,4))  #查看下标(1,4)之间字符s的个数

(4).s.strip() #去除头尾两端的空格和换行符以及制表符 \n \t

s="  你好  "
print(s.strip()) #s="你好"

(5).s.split() #分割

s="alexlaaa"
print(s.split("l"),maxsplit=1) #['a','exlaaa'] maxsplit为切割次数

(6).s.replace() #代替

s1 = s.replace("肉夹馍","大煎饼")
s1 = s.replace("肉夹馍","大煎饼",1) # 指定替换的次数
print(s1)

(7).s.join() #字符串拼接

str = "-"
seq = ("a", "b", "c") # 字符串序列
print(str.join( seq ))  #a-b-c  将str作为分隔符和seq组成新的字符串,序列中的每个元素也必须是可迭代

(8).其他操作

1.capitalize()    #首字母大写
name = "alex"
name1=name.capitalize()   #字符串为不可变数据类型,值不变时内存地址不变(所以要新的地址)
print(name1)      #Alex

2.title()    #每个单词首字母大写
name = "alex hello"          #alex#hello  特殊符号隔开也可以
name1 = name.title()
print(name1)      #Alex Hello  

3.swapcase() #大小写反转
name = "Alex"
print(name.swapcase())  #aLEX

4.center()   #居中 -- 填充
name = "alex"
print(name.center(10,"-"))  #---alex---  得到总长度为10,将原字符居中,将-填充至两边

5.find()、index()     #查找 从左向右 只查找一个
name = "alelx"
print(name.find("b"))  #find查找不存在的返回-1
print(name.index("b"))   #index查找不存在的就报错



# is系列
s = "12.3"
print(s.isalnum()) # 判断是不是字母,数字,中文
print(s.isalpha())  # 判断是不是字母,中文
print(s.isdigit())  # 判断字符串是不是全都是阿拉伯数字
print(s.isdecimal())  # 判断是否是十进制

2.字符串切片、步长
参考:https://www.jianshu.com/p/15715d6f4dad

# 一个完整的切片包含两个(:),用于分割start_index、end_index、step三个参数,默认step为1
# 两个完整的索引值如果是从左往右,步长也必须是正数,如果是从右往左,索引值必须是负数,总而言之,索引的方向要和步长的方向一致。如果索引不完整,要根据步长来决定。
# 切片中的索引值包头不包尾

a = "123456789"

(1).切取完整的值

a[:]     #从左往右   ==a[0:最后:1]
a[::]    #同上      
a[::-1]  #从右往左   ==a[-1:最前:-1]

(2).start_index和end_index全部为正(+)的情况

a[1:6]   #12345
a[1:6:-1]  #空值 索引方向和步长不一致,得出结果为空
a[6:1] #空值 索引方向和步长不一致,得出结果为空

(3).start_index和end_index全部为负(-)的情况

a[-1:-2:]  #空值 索引方向和步长不一致,得出结果为空
a[-5:-1]   #56789
a[-1:-2:-1] #9

(4).start_index和end_index不同符号

a[-1:2]  #空值 索引是从右往左,step默认为1,是从左往右
a[-8:5]  #2345 索引和步长方向一致
a[-1:2:-1] #987654 
a[-8:5:-1] #空值 索引方向和步长不一致

七.列表

#列表---list
#	有序、可变的
#定义方式:list("123")

1.增

(1).append 追加

lst=[1,"alex",True]
lst.append("ok")     #lst=[1,"alex",True,"ok"] 在列表末尾追加一个字符

(2).insert 插入

lst=[1,"alex",True]
lst.insert(1,"ok")   #lst=[1,"ok","alex",True] 在指定下标添加

(3).extend 迭代添加

lst=[1,"alex",True]
lst.extend("ok")   #lst=[1,"ok","alex",True,"o","k"] 将可迭代对象和原列表合并

2.删

(1). del

del lst  #删除整个列表

(2).pop

# pop
#   1.默认删除最后一个
#   2.有返回值返回的是被删除的元素
#   3.通过索引进行删除

(3).clear、remove

# clear 清空列表
# remove 通过元素进行删除

3.改

# lst[0] = 1
# lst[1:2] ="qaaa"   # 元素可以超出切片的位数
# lst[1:4:2] = "12"  # 元素和位置一一对应,多也不行少也不行

4.其他操作

1.sort()   #排序(默认升序)   sort(reverse=True)降序
lst = [1,2,5,432,77,3,6]
lst.sort()
print(lst) #[1, 2, 3, 5, 6, 77, 432]

2.reverse() #反转
lst.reverse()
print(lst)  #[6, 3, 77, 432, 5, 2, 1]

3. *
lst = [[]]
new_lst = lst * 5 
print(new_lst) # # [[], [], [], [], []]

4. +
lst = [1,2,3]
lst1 = [4,5,6]
print(lst + lst1)


5.枚举
lst = [1,2,3]
for i in enumerate(lst,19):    #参数二不写默认从0开始
    print(i)
#打印结果 (19,1) (20,2),(30,3)

八.元组

元组就是不能被修改的列表(不能增删改、只能查看)

#创建
1.创建空元组  a=()
2.元组中只有1个值时,必须加逗号  a=(1,)
3.可以不带括号 a=1,2   a=1,

+、*操作

1.+
a = (1,2,4)
b = (3,5,7)
print(a+b)   #(1, 2, 4, 3, 5, 7)

2.*
a = (1,2,4)
b = a * 2
print(b)     #(1, 2, 4, 1, 2, 4)

查询

tup = (1,3,4,4,4,5,6,7)
tup.index(3)   #查询元组中3的第一个下标
tup.count(4)   #查询元组中4的个数

九.range()

语法
range(start, stop[, step])
参数
start--->>从某数开始计数,默认0
stop--->>从某数结束,顾头不顾尾
step--->>步长

十.字典

字典是无序、可变的数据类型。内存中存的是键对应的值的地址

字典的键:

1.不可变的数据类型(可哈希的),例:list可变,不可作为键;

2.要求唯一。如果有重复的后面的值将覆盖前面的。

字典创建

# {} 空字典
dict(a='a', b='b', t='t')
dict(zip(['one', 'two', 'three'], [1, 2, 3]))   # 映射函数方式来构造字典
dict([('one', 1), ('two', 2), ('three', 3)])  # 可迭代对象方式来构造字典
1.dict.fromkeys(seq[, value]) #fromkeys函数用于创建一个新字典,seq序列为键,value为对应的初始值。

seq=["1","2","3"]
dic=dict.fromkeys(seq)
#结果为:dic={"1":None,"2":None,"3":None}

dic=dict.fromkeys(seq,10)
#结果为:dic={"1":10,"2":10,"3":10}


dic["1"] = 2
#结果为:dic={"1":2,"2":2,"3":2}     #fromkeys给每个键都赋相同的值,地址也相同,所以当其中一个键的值改变时,其他值也改变。

1.增

# dic={"a":"a","b":"b"}

1.暴力添加
dic["a"]="A"  #{"a":"A","b":"b"}

2.setdefault(key,value) #键如果存在,返回原来值;键不存在,添加进入
dic.setdefault("a",100)
print(dic)  #{"a":"a","b":"b"}
# dic.setdefault("c","c")
# print(dic) #{"a":"A","b":"b","c":"c"}

2.删

1.del dic["a"]    #通过字典的键删除

2.dic.pop("a")    #通过字典的键删除,返回删除的值

3.dic.clear()     #清空

4.dic.popitem()   #默认删除最后一个,返回删除的键值对

3.改

1.dic["a"]="a"   #通过键进行更改

2.dic.update()   #如果键存在,则覆盖;不存在,则创建
dic={"a":"a","b":"b"}
dic2={"c":"c","a":"5"}
dic.update(dic2)
print(dic)      #{'a': '5', 'b': 'b', 'c': 'c'}

4.查

1.dic.get()    #如果键存在,返回其值;如果不存在,返回None
print(dic.get("a"))  #a
print(dic.get("A"))  #None

5.其他操作

1.
for i in dic:             #i为字典的键
    print(i,dic.get(i))   
'''
结果:
a a
b b
'''

2.keys()    #遍历字典的键(高仿列表)
for i in dic.keys():
    print(i)

3.values()  #遍历字典的值(高仿列表)
for i in dic.values():
    print(i)
    
4.items()   #遍历字典的键和值
for key,value in dic.items():
    print(key,value)

    
# print(dic.keys())         dict_keys(['a', 'b', 'c'])
# print(dic.values())       dict_values(['5', 'b', 'c'])
# print(list(dic.keys))     将字典的键转化为列表
# print(list(dic.values())) 将字典的值转化为列表

十一.集合

1.概念

集合-----set
***可变、无序、不支持索引、天然去重***
# set() 空集合

2.定义

s = {1,1,2,3,3,4,6,6}
print(s)   #{1,2,3,4,6}

3.增

s.add("76")          #只能添加一个
# print(s)   #{1,2,3,4,6,"76"}
s.update("你好")      #迭代添加 
# print(s)   #{1,2,3,4,6,"你","好"}

4.删

print(s.pop())   #随机删除,因为pop函数默认删除最后一个,打印集合时又是无序的,所以是随机删除
s.remove(3)     # 指定元素删除
s.clear()         # 清空   -- set() 空集合

5.其他操作

# s1 = {1,2,3,4,5,6,7}
# s2 = {5,6,7,1}
# print(s1 & s2)  # 交集
# print(s1 | s2)  # 并集
# print(s1 - s2)  # 差集
# print(s1 ^ s2)  # 反交集
# print(s1 > s2)  # 父集(超集)
# print(s1 < s2)  # 子集

# print(frozenset(s1))  # 冻结集合 更不常用
# dic = {frozenset(s1):1}
# print(dic)

十二.文件操作

1.打开文件方式:

w     #只写不读,打开文件会清空文件内容重新写(字符)
r     #只读不写(字符)
wb    #只写不读(字节),不涉及encoding
rb    #只读不写(字节),不涉及encoding
w+    #先写后读(写完之后光标在最后)
r+    #先读后写
a     #追加(只写)
a+    #追加(可读)
# mode="w" 只写
f=open("t1","w",encoding="utf-8") 
f.write("nihao")           
# mode="w+" 写读(不常用)
f=open("t1",mode="w+",encoding="utf-8")
f.write("你好啊")   
print(f.read())   #此时读取不到数据,因为write完成之后,光标在最后
# mode="r" 只读
f=open("t1",mode="r",encoding="utf-8")
print(f.read())
# mode="r+" 读写
f=open("t1",mode="r+",encoding="utf-8")  #打开文件,光标在0
print(f.read())
f.write("哈哈")   #不清空原有内容,追加写
# mode="a"  追加
f=open("t1",mode="a",encoding="utf-8")  #在已有的末尾添加
f.write("哈哈")
# mode="a+"
f=open("t1",mode="a+",encoding="utf-8")  #打开文件时光标在最后
print(f.read())    
f.write("哈哈")
# mode="rb"
f=open("t1.jpg",mode="rb")     
print(f.read())           
f.write("哈哈")
# mode="wb"
f=open("t1.jpg",mode="wb")  
f.write()  
f.write("哈哈")

2.其他操作

f.flush()   #把缓冲区的内容刷新进磁盘
f.tell()    #光标的位置(按照字节数)
f.seek()    #移动光标位置 
	--0,0   #移动到开头
    --0,1   #移动到当前
    --0,2   #移动到末尾
    --3     #如果是中文就移动一位,英文移动3位

#不用自己关闭文件,自动调用close方法
with open("t11",mode="r",encoding="utf-8") as f1,\
open("t12",mode="w",encoding="utf-8") as f2:
    print(f1.read())
    f2.write("xx")

文件路径中如果要转义,两种方式:
1."\\test1\\das.txt"       #\\
2.r"\test1\das.txt"        #repr  
	a = '[1,3,3]'
	print(repr(a))         #'[1,3,3]'

3.read注意

1.文件句柄f相当于一个迭代器,f.readlines()是将每一行的结果组成一个列表
2.for循环遍历文件句柄f和f.readlines()得到的结果相同
3.f.read()读取的是字符串,for循环遍历打印的是每个字符
4.f.read(4) #读取4个字符(4个中文汉字或4个英文字母)
5.f.read()和f.readlines()都是将文件全部读取,f.readline()是一行一行读取。

4.路径

#返回上一级 ..\
posted @ 2019-07-05 17:05  MISF  阅读(383)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png