编码补充:utf8用3个字节表示中文,GBK用两个字节表示中文,两者之间的转换要借助Unicode(全球通用,即utf8先转换为Unicode,再由Unicode转换为GBK)
如果将字符串转换为数字: new_inp = int(inp)
while也可以和else连用
count = 0 while count<10: print(count) count = count + 1 else: print("end")
continue与break用法(和while连用时遇到continue,终止当前循环,其下面的内部代码块不执行,跳回循环处执行下一次循环)
count = 0 while count<10: if count == 7: count = count + 1 continue #break终止以后的所有循环,调到下一个代码 print(count) count = count + 1 print("end")#输出的结果没有7
练习:用户登录(3次重复机会)
count = 0 while count <3: user = input('<<<<') pwd = input('<<<<') if user == 'alex' and pwd == '123123': print('欢迎登录') break else: print('用户名或者密码错误') count = count + 1 print('<<<<')
python开发IDE:pycharm、eclipse(推荐用pycharm专业版,不要汉化)
基本运算符:
1)算数运算符: + - * / ** % // #得到数
2)比较运算符:==(等于) !=(不等于) <>(不等于) > < >= <= #得到布尔值
3)赋值运算符: #得到数
= 简单的赋值运算符 c=a + b 将a+b的运算结果赋值为c
+= 加法赋值运算符 c += a 等效于c=c+a
-= 减法赋值运算符 c -= a 等效于c=c-a
*= 乘法赋值运算符 同上
/= 除法赋值运算符 同上
%= 取模赋值运算符 c %= a 等效于c=c%a
**= 幂赋值运算符 同上
//= 取整除赋值运算符 同上
4)逻辑运算符: #得到布尔值
and 布尔“与”,如果x为false,x and y返回false,否则它返回y的计算结果(布尔值:true为真,false为假:在if判断的结果里,true表示符合,false表示不符合)
or 布尔“或”,如果x为true,x and y返回false,否则它返回y的计算结果
not 布尔“非”,如果x为false,返回true;如果x为true,返回false
注意:v = user == 'alex' and (pwd == "123" or 1 == 1) #通常情况从左往右判断,但括号内先执行
v = user == 'alex' and pwd == "123" or 1 == 2 #and与or没有优先级,从前到后执行。如果and前部为false,直接输出false,如果and前部是true则看and后部的条件。如果or前部为true,直接输出true,如果or前部是false则看or后部的条件。
5)成员运算: #得到布尔值
in 如果在指定的序列中找到值返回true,否则返回false
not in 如果在指定的序列中没有找到值返回true,否则返回false
字符串的in与not in(子序列):必须是相邻的字符
name = "雷雨田" #"雷雨田"字符串;"雷"字符;"雨田"子字符串或子序列 #选中并Ctrl+?,全部变注释 if "雷" in name: print('OK') else: print('Error')
基本数据类型(祥讲)及其魔法变形
1)数字(英文int):
python3里面不管多长的数字都是int类型
python2里面数字分为整形(int)和长整型(long)
数字的所有功能都放在int里面
——int:功能1:,将字符串转换为数字;
a = "123" b = int (a) print(type(b),b)
功能2:将2(或8或16)进制转换为10进制
num = "b" v = int(num,base=16) print(v)
功能3:用几位2进制表示
age = 5 r = age.bit_length() print(r)
2)字符串(str):
功能见代码
test = "alEx" # v1 = test.capitalize()#首字母大写,其他小写 # print(v1) # v2 = test.casefold()#所有变小写,比lower更牛逼,很多未知的相对应变小写 # print(v2) # v3 = test.lower()#变小写 # print(v3) # v4 = test.center(20,"中")#设置宽度,并将内容居中;20代指总长度;$空白位置填充,只能填一个,可不带 # print(v4) # v5 = test.count("lE")#找字符串里有几个指定的子序列,可以设置开始查找和结束查找的位置 # print(v5) # v6 = test.endswith("E",1,3)#以什么结尾,输出布尔值,同样可以定义起始和结束位 # print(v6) # v7 = test.find("E",1,4)#从开始往后找,找到第一个后,获取其前的未知位数 # print(v7) # v8 = test.index("E")#功能与find相似,区别在于找不到就报错,可忽略此 # print(v8) # test1 = 'I am {name}, age{a}' # print(test1) # v1 = test1.format(name='alex',a=19)#格式化,将一个字符串中的占位符替换成为指定的值 # v2 = test1.format_map({"name":'alex',"a":19})#相同功能,格式不一样 # print(v1) # print(v2) # test1 = 'I am {0}, age{1}' # print(test1) # v = test1.format('alex',19)#格式化,将一个字符串中的占位符替换成为指定的值,另一种格式 # print(v) test2 = "xsdjf123_?" v = test2.isalnum()#字符串是否只包含 字母和数字 print(v)
# test3 = "username\temail\tpassword\n111\t111@.com\t123\n222\t222@.com\t123\n333\t333@.com\t123" # v =test3.expandtabs(20)#遇到\就以前面本身加上后面填补空白组成20个为一组;\后面的忽略;\t表示制表符;\n换行 # print(v) test4 = "sdfff几节课67\n" # v = test4.isalpha()#是否只有字母,中文也算字母 # print(v) # v1 = test4.isdecimal()#判定当前输入是否为数字,最常用 # v2 = test4.isdigit()#判定当前输入是否为数字,功能更强大 # v3 = test4.isnumeric()#判断是否为数字,可以判断中文,功能最强大 # print(v1,v2,v3) # v4 = test4.isidentifier()#判定是否为标识符(标识符:字母数字下划线,包括print等) # print(v4) # v5 = test4.isprintable()#判断是否存在不可显示的字符,例如制表符,换行符等 # print(v5) # v6 = test4.isspace()#判断是否全为空格,即空字符串(制表符也算空字符串) # print(v6) # v7 = test4.title()#将字符串转换为标题形式 # print(v7) # v8 = test4.istitle()#判断是否为标题形式 # print(v8) # test5 = "你是风儿我是沙" # print(test5) # t = '$' # v = t.join(test5)#将字符串中的每一个元素按照指定分隔符进行拼接,重点记住! # print(v) # test6 = "alex" # v1 = test6.ljust(20,'*')#字放左边,其余用指定符填满,与center类似 # v2 = test6.rjust(20,'*')#字放右边 # v3 = test6.zfill(20)#不足的默认用0填充在前面,一般用上面的 # print(v1,v2,v3) # test6 = "ALex" # v = test6.lower()#全变小写;(upper全部变为大写) # print(v) # test6 = "eALex" # v = test6.strip('9eAL')#去除左右空白和\t及\n及括号内指定的字符(指定字符要与开头或结尾的子序列一样,优先最多匹配);lstrip去左边的... # print(v) # test6 = "aeiou" # test7 = "12345" # v = "sfddijidnvsiiwiefnnvnvjdkdejffj" # m = str.maketrans(test6,test7)#制作替换的对应关系 # new_v = v.translate(m)#进行替换 # print(new_v) # test6 = "sfddijidnvsiiwiefnnvnvjdkdejffj" # v1 = test6.partition('d')#按照指定的分隔符将其分开,只能分成3个,从左开始 # v2 = test6.rpartition('f')#从右开始 # v3 = test6.split('j',3)#也是分割功能,不包括分隔符本身,能指定分几次(参数),从左开始 # v4 = test6.rsplit('j',3)#从右开始 (正则表达式是上述功能的合集) # print(v1,v2,v3,v4) # test6 = "sfddijidnv\nsiiwiefn\nnvnvjdkdejffj" # v = test6.splitlines(True)#只能根据制表符分割,False不保留制表符,True保留 # print(v) # test6 = "sfddijidnv\nsiiwiefn\nnvnvjdkdejffj" # v = test6.startswith('s')#判断是否以什么开头;endswith结尾 # print(v) test6 = "sfddiJJdnv\nsiiwiefn\nnvnvjdkdejffj" v = test6.swapcase()#大小写互换 print(v)
重点记:join split find strip upper lower replace 索引 切片 for len
记住:字符串一旦创建就不可修改;一旦修改或者拼接,都会造成重新生成字符串(所有语言均如此)
# test6 = "sfddiJJdnv\nsiiwiefn\nnvnvjdkdejffj" # v = test6[2]#索引,下标,获取字符串中的某一个字符,第一位是0,只能取一个 # t = test6[1:-1]#索引范围(-1表示末尾)即切片 # print(v,t) # test6 = "v\nsii" # v = len(test6)#有几个字符组成 # print(v) # li = [11,22,33,44,"qwert"]#列表 # v = len(li)#在列表中表示个数 # print(v) # test6 = "sfddiJJdnv" # index = 0 # while index < len(test6): # print(test6[index]) # index += 1 # print("==========") #等同于如下 # test6 = "sfddiJJdnv" # for qwe in test6:#for循环,依次输出字符,其他数据类型也能用 # print(qwe) # test6 = "sfddiJJdnv" # v = test6.replace("d","niubi",3)#替换,可以指定替换的次数 # print(v)
# test6 = "法国红酒不能那么那么过分" # for v in test6:#注意顿号不可去掉 # continue#continue可以用在for语句 # print(v) # v = range(10,100,5)#帮助创建连续的数字,可以设置开始结束和步长;python2里面立即创建,python3循环时才一个一个创建(=pytho2的xrange) # for v1 in v: # print(v1) test6 = input(">>>")#练习 for item in range(0,len(test6)): print(item,test6[item])
某一类型的所有魔法都在str里面
单行注释用#,多行注释用"""或者'''
可迭代对象:可以被for进行循环获取
类与对象:基本数据类型各自为一类,如str;对象:根据某一个类型创建的项目为对象,如“asd”
3)布尔值(bool)
bool(.......)
判断:None "" () [] {} 0 ==>False
4)列表(list):中括号括起来,中间以逗号分割每一个元素,元素可以是数字或字符串或列表(即可以嵌套列表)或布尔值
列表是一个集合,内部放置任何东西
列表元素在内存内可以被修改,并且有顺序
None在python中是一个特殊值,表示空值
# li = [1,"qwe","dfg",223,456,23323,[1,234,"fgh",["dfg"]],"oi"] # print(li[6])#索引 # print(li[0:6])#切片,切片结果也是列表 # for item in li: # print(item)#列表也可以循环 # li = [1,"qwe","dfg",223,456,23323,[1,234,"fgh",["dfg"]],"oi"] # li[1] = 10#索引和切片方式均可修改 # print(li) # li = [1,"qwe","dfg",223,456,23323,[1,234,"fgh",["dfg"]],"oi"] # del li[2] # print(li)#索引和切片方式均可删除 # li = [1,"qwe","dfg",223,456,23323,[1,234,"fgh",["dfg"]],"oi"] # v = 223 in li#判断元素是不是在列表中,必须是元素整体 # print(v) # li = [1,"qwe","dfg",223,456,23323,[1,234,"fgh",["dfg"]],"oi"] # print(li[6][2][1])#可以往元素中的列表继续找 # li = "1qwedfg2356" # new_li = list(li)#把其他类型转换为列表(原类型必须可以for循环才可转换) # print(new_li) # li = [1,"qwe","dfg",223,456,23323,[1,234,"fgh",["dfg"]],"oi"] # r = str(li)#不会去掉列表的括号,只会整体加引号 # print(r) # li = [1,"qwe","dfg",223,456,23323,"oi"]#想把列表变字符串:元素有字符串又有数字,用for循环 # s = "" # for r in li: # s = s + str(r) # print(s) # li = ["qwe","dfg","oi"]#想把列表变字符串:元素只有字符串,用join # r = "".join(li) # print(r) # li = ["qwe","dfg","oi"] # li.append(5) # li.append("led")#往列表追加元素,整体加入,与extend区别 # print(li) # li = ["qwe","dfg","oi"] # li.clear()#清空列表 # print(li) # li = ["qwe","dfg","oi"] # v = li.copy()#浅拷贝 # print(v) # li = ["qwe","dfg","oi",22,22] # v = li.count(22)#计算元素出现的次数 # print(v) # li = ["qwe","dfg","oi"] # li.extend("牛逼")#执行for循环后加入对象 # print(li) # li = ["qwe","dfg","oi",11,22,33,22,44] # v = li.index(22)#根据值获取当前索引位置(左边优先) # print(v) # li = ["qwe","dfg","oi"] # li.insert(1,"牛逼")#在指定索引位置插入元素 # print(li) # li = ["qwe","dfg","oi",11,22,33,22,44] # v = li.pop(0)#删除某个指定索引的值,并获取删除的值;没有指定索引默认为最后一个 # print(li) # print(v) # li = ["qwe","dfg","oi",11,22,33,22,44] # li.remove(22)#删除列表中的指定值,左边优先(ps:pop del都是删除) # print(li) # li = ["qwe","dfg","oi",11,22,33,22,44] # li.reverse()#将当前列表进行翻转 # print(li) # li = [11,22,33,22,44] # li.sort()#列表的排序 # print(li) # li = [11,22,33,22,44] # li.sort(reverse=True)#排反序 # print(li)
5)元组(tuple)
对列表的二次加工,元组的一级元素不可被修改、不能被增加或者删除,二级元素等可以被修改;属于可迭代对象,能进行for循环
不想让其被修改的就设为元组
# tu = (11,22,33,22,44,"alex",[123],(123),True)#元组可以包括任何类型 # #一般写元组时,推荐最后一个元素后面加上逗号,区别函数参数 # v = tu[1:-1]#有序,可索引,切片,切片后仍是元组 # print(v) # for item in tu:#可for循环,属于可迭代对象 # print(item) # s = "123,qwe" # li = [123,"qwe"] # v = tuple(s)#可转换,执行for循环;元组转换为字符串的方法也是join和for循环 # print(v) # g = tuple(li)#列表和元组可循环 # print(g) # tu = (11,22,33,22,44,"alex",[(12,3)],(123),True,) # tu[6][0] = 120#注意是一级元组才不可修改、增删( tu[6][0][0] = 120不可更改,因为其是元组的一级元素) # print(tu) #tu.count(22)获取指定元素在元组中出现的次数 #tu.index(22) 某元素索引位置,左边优先
6)字典(dict)
字典是无序的
重点记住keys() values() items() update
# info = {"k1":"v1","k2":"v2"}#上述含2个键值对,k1、k2为key,v1、v2为value # info = {"k1":[123],"k2":(123,),"k3":123,"k4":"123","k5":True}#value可以是任何数据类型;列表、字典不能作为key,2个相同的key只能取一个value # print(info) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # v = info["k2"][0]#可以索引查找,输入要查找的key;不能切片寻找 # del info["k1"][0]#可以索引删除 # print(v,info) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # for k,v in info.items():#字典可以for循环,默认进行keys循环,可以设置values循环和items循环 # print(k,v) #字典还有clear copy 等功能 # v = dict.fromkeys(["k1",111,(12)],[123,"asd"])#根据序列,第一个括号内每一个都表示一个key,创建字典,并指定统一的值 # print(v) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # v = info.get("k33","不存在")#根据key获取对应的值,不存在时可以指定默认值 # print(v) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # v = info.pop("k6","不存在")#指定某一key删除,并可以获取值,删除失败时可以输出设置的值 # print(info,v) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # v = info.popitem()#随机删,并获取删除值 # print(info,v) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # v = info.setdefault('k6',123)#设置值:已存在,不设置,获取当前key对应的值;不存在,设置,获取设置的值 # print(info,v) # info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True} # info.update({"k2":"你好",6:"hello"})#或者info.update(k2="你好",k6='hello') 更新字典,存在key的修改值,不存在的key增添进去 # print(info)
# info = {"k1":[123,234],"k2":(123,34,),"k3":123,"k4":"123","k5":True}
# v = 123 in info.values()#判断值或key是否在字典里面
# print(v)
浙公网安备 33010602011771号