- 下载python,打开idle;
- 快捷键:(1)Alt+p重复上面输入函数;(2)Ctrl+c强制终止程序(比如进入死循环了可以用)
- 新手可能碰到的几点问题:1是用英文标点符号,修改编辑器字体使中英文差距变大,采用consolas字体;2是缩进是否正确;3是函数拼写是否正确;
- 字符串:(1)当你内部有单引号外部可以用双引号包括;若内部有双引号外部可以用单引号包括;(2)也可以用转义字符(即反斜杠\加就可以符号)就可以只表示这个符号,例如\"就输出";在字符串的第一个"前加r(就说明后面字符串为原始字符串即转义字符不再有效),就可以把字符串里面的\打印出来;(3)反斜杠\放在字符串末尾意味着你只是还没写完,不能按了enter就执行或者可以用括号()只要右半括号没括起来就表示没结束代码即可以转行按enter;(4)三引号就可以输入长字符串可以换行(5)字符串可以直接相加来拼接;字符串乘法就是重复几遍;
x = "I love Fish" x.capitalize()#将首字母大写 'I love fish' x 'I love Fish'#字符串并不变,字符串不能修改 x.casefold ()#都变成小写,不止英语 'i love fish' x.title() 'I Love Fish'#每个单词首字母大写 x.swapcase()#大小写字母反转 'i LOVE fISH' x.upper()#变成大写 'I LOVE FISH' x.lower()#变成小写,只适用于英语 'i love fish' ### x = "有内鬼,停止交易" x.center(5) '有内鬼,停止交易' x.center(15) ' 有内鬼,停止交易 ' x.ljust(15) '有内鬼,停止交易 ' x.rjust(15) ' 有内鬼,停止交易' x.center(15,"淦") '淦淦淦淦有内鬼,停止交易淦淦淦' x.ljust(15,"淦") '有内鬼,停止交易淦淦淦淦淦淦淦' x.rjust(15,"淦") '淦淦淦淦淦淦淦有内鬼,停止交易' x.zfill(15) '0000000有内鬼,停止交易' "123".zfill(5) '00123' "-123".zfill(5) '-0123' ###字符串查找 x = "上海自来水来自海上" x.count("海") 2 x.count("海",0,5) 1 x.count("海",0,5) 1 x.find("海") 1 x.rfind("海") 7 x.rfind("鬼") -1 ###字符串替换:replace(old,new,count=-1) "你好,在哪?".replace("你好","您好") '您好,在哪?' #translate(table) table = str.maketrans("ABCDEFG","1234567")##将ABCDEFG分别换成1234567 "I love FishC".translate(table) 'I love 6ish3'##F和C分别替换成了6和3 ### x.startswith("我") True x.startswith("小甲鱼") False x.startswith("爱") False x.startswith("爱",1)##从下标为1开始第一个为“爱” True ###判断大小写 x = "I love Python" x.upper() 'I LOVE PYTHON' x = "I love Python" x.isupper() False x.isalpha() False "IlovepPython".isalpha() True r"I love Python\n".isprintable() True "I love Python".isprintable() True x = "1234" x.isdigit() True x.isnumeric() True x.isdecimal() True x = "一二三四" x.isdigit() False x.isnumeric() True x.isdecimal() False "I love Python".isidentifier() False "I_love_Python".isidentifier() True import keyword##导入判断是否为关键字函数 keyword.iskeyword("if") True keyword.iskeyword("py") False ### " 左侧不要留白".lstrip() '左侧不要留白' "左侧不要留白".lstrip("左") '侧不要留白'
- 分支结构即条件语句:(1)缩进一样为同级(2)elif就是else if(3)一种特殊条件表达式:eg:如果a<b为真则执行前面否则后面
- 嵌套结构即循环语句:while和for:(1)当while后面成立时一直运行
其中缩进一样为同一级(2)break直接结束本层循环
而continue是结束本次回到循环开始;(3)for 变量 in 可迭代对象: statement(s).eg:
,
,
,在range里面设置步进值为-2时:
,当计算从1加到10时range里要写11:
,
用地板除是为了结果不带.0,其中else和for成套for正常结束则执行else语句,同级的else会被break打断即不能print(n,“是一个素数”);
- ,import调用模块,eg:
- 数字类型:整数,浮点数,复数三种:(1)python整数长度不受限制;(2)3e-05=0.00003;浮点数不精确,eg:0.1+0.2==0.3会返回false;3+2可以返回5,而6/2返回3.0,而6//2返回3;(3)复数:x=1+2j,则x.real=1.0,x.imag=2.0(4)//这是地板除即除法结果向下取整(5)内置函数可以直接调用,不用import,eg:divmod,abs(取绝对值函数或取复数的模),int()取整函数,float()转换为浮点数,complex()转换为复数(注意括号内若为字符串不能有空格),pow(x,y)和x**y都是计算x的y次方且eg:pow(2,3,5)==2**3%5都是BIF即内置函数,eg:divmod(3,2)=(1,1),因为3//2=1,3%2=1;
- 布尔类型:False和True.结果为False:(1)定义为False的对象None和False;(2)值为0的数字类型:0,0.0,0j,Decimal(0),Fraction(0,1)(分子为0分母为1的有理数);(3)空的序列和集合:'',(),[],{},set(),range(0)
- 逻辑运算符:(1)and:左右两边若是判断表达式只有两边都是True结果为True;遇到假停(2)or:若两边为判断表达式则只要有一边True结果为True;遇到真停(3)not:eg:not True返回False;(4)优先级依次:not,and,or
- 流程图:
- 思维导图:
- 列表的增删插清:eg
:(1)列表增加.append(增加的一个元素)和.extend([增加的多个元素])(可以理解成一个元素不用[],多个元素要用[])(2)列表任意位置插入.insert(位置,插入的元素)(3)列表删除元素.remove(元素)如果要删除的元素存在好几个就会删除最前面那个(4)删除某个位置元素用.pop(位置)(5)清空列表.clear()
- 列表改:(1)列表是可变的,字符串是不可变的(列表和字符串都可以用索引下标来改)(2)s.[3:]=["武松",“林冲”]意味着把第四个第五个元素替换为“武松”和“林冲”(3)s.sort()使s中元素从大到小排序,s.reverse()使s中元素从大到小排序或使元素顺序反过来
- 列表查:(1)s.conut(3)查看3出现了几次(2)s.index("绿巨人")查看‘绿巨人’位置(3)s.index(3,1,7)查看从1到7中3的位置(3)s1=s.copy()等同于s1=s[:](切片法)都是是把s拷贝给s1,这两种为浅拷贝
- 列表加法和乘法
s = [1,2,3] t = [4,5,6] s + t返回[1,2,3,4,5,6] t * 3返回[4,5,6,4,5,6,4,5,6]
- 二维列表
###(1)嵌套列表 matrix = [[1,2,3], [4,5,6], [7,8,9]] #访问嵌套列表(迭代一层列表用一层循环,迭代嵌套列表用嵌套循环): for i in matrix: for each in i: print(each) 1 2 3 4 5 6 7 8 9 #一个下标代表第一行 matrix[0]返回[1,2,3] #两个下标代表行和列 matrix[0][0]返回1 for i in matrix: for each in i: print(each,end='') #end=' '是每个元素以空格结尾 print() #print()默认每个循环后换行 #返回下面: 123 456 789 #for i in matrix是锁定嵌套列表的每一个列表,for each in i是锁定嵌套列表中的每一个元素 ### lists = [[]]*3 lists [[],[],[]] #相当于是这种嵌套列表lists=[ # [], # [], # []] lists[0].append(3) lists [[3], [3], [3]] #只对第一行添加一个元素3,但因为*3复制来得三个还是引用用一个列表,所以都添加了3 A = [None]*3 #A是一个列表类型,并且将里面的元素复制三次 A [None, None, None] for i in range(3): A[i] = [None]*2 #A是一个一个列表,并且A的元素也是列表 A [[None, None], [None, None], [None, None]] ####(2)下面三种:只有幅值是引用,后两种copy和切片是浅拷贝是对整个列表对象的复制 ###第一种 x = [1,2,3] y = x x[1] = 1 x [1, 1, 3] y [1, 1, 3]##y是引用x ###第二种 x = [1,2,3] y = x.copy() y [1, 2, 3] x [1, 2, 3] x[1] = 1 y [1, 2, 3]#y就不是对x引用而是对整个列表对象的拷贝,改变x元素,不会i影响y元素 ###第三种 x = [1,2,3] y = x[:] #切片 x [1, 2, 3] y [1, 2, 3] x[1] = 1 y #切片同copy一样不仅仅是引用,改变x元素不会影响y [1, 2, 3] ###(3)对于嵌套列表上面三种理解有所不同 ###对于浅拷贝反而改变x,y也变了,这是因为浅拷贝只是拷贝了外层对象内层还是引用: x = [[1,2,3],[4,5,6],[7,8,9]] y = x.copy() x[0][0] = 0 x [[0, 2, 3], [4, 5, 6], [7, 8, 9]] y [[0, 2, 3], [4, 5, 6], [7, 8, 9]] ###深拷贝:(简单理解为浅拷贝是一个物体有两个名字,而深拷贝是两个完全一样的物体) import copy##导入copy模块,copy模块有两个函数,其中.copy()是浅拷贝,.deepcopy()是深拷贝 x = [[1,2,3],[4,5,6],[7,8,9]] y = copy.copy(x)#利用copy模块的copy函数,其中x为参数,这是浅拷贝 x[0][0] = 0 y [[0, 2, 3], [4, 5, 6], [7, 8, 9]]##改变x也改变y,这是浅拷贝 x = [[1,2,3],[4,5,6],[7,8,9]] y = copy.deepcopy(x) ###这是深拷贝 x[0][0] = 0 y [[1, 2, 3], [4, 5, 6], [7, 8, 9]]###深拷贝,改变x不改变y
- is 运算符:
x = "123" y = "123" x is y True x = [1,2,3] y = [1,2,3] x is y False #对于列表即便一样,python也为他们存放了不同的列表中
- 列表推导式:[表达式 for 要操作目标 in 可迭代对象]
###(1)例如 x = [1,2,3,4] x = [i+1 for i in x] x [2, 3, 4, 5] ###例如(2) x = [i*2 for i in "fish"] x ['ff', 'ii', 'ss', 'hh'] ### code = [ord(i) for i in "FishC"]##调用ord内置函数,将单个字符串转换为对应编码 code [70, 105, 115, 104, 67] ###例如(3) a = [[1,2,3], [4,5,6],] b = [x[1] for x in a]###获得每一行第二个元素 b [2, 5] ###例如(4) s = [[0]*3 for i in range (3)] s [[0, 0, 0], [0, 0, 0], [0, 0, 0]]##i不管是多少都输出常量函数[0]*3,有意义地执行了几次i ###例如(4) even = [i for i in range(10) if i % 2 == 0] even [0, 2, 4, 6, 8] ###例如(5) word = ["Fantastic","Fish","Great"] fwords = [w for w in word if w[0] == 'F']##w是一个字符串 fwords ['Fantastic', 'Fish'] #循环是通过迭代逐个修改列表中元素,而列表推导式是重新创建一个列表再赋值给原先的变量名 ###下面对于嵌套:例如(1) matrix = [[1,2,3],[4,5,6],[7,8,9]] flatten = [col for row in matrix for col in row] flatten [1, 2, 3, 4, 5, 6, 7, 8, 9]#降维,相当于前面for row in matrix为外层循环,for col in row内层
- 元组(序列包括字符串,列表,元组):元组既能像列表一样容纳多种类型对象,又拥有字符串的不可修改。列表用[],元组用(),元组也可以不加(),但最好都加上()
###元组(1) s = 1,2,3 #逗号把元素分开 t = 4,5,6 w = s,t #逗号是构成元组的基本元素 w ((1, 2, 3), (4, 5, 6)) ###(2)元组可生成列表 s = (1,2,3) [each*2 for each in s ] ###利用列表推导是可由元组生成列表 [2, 4, 6] ###(3)加了逗号才是元组 x = (123) type(x) <class 'int'> #不加逗号这是一个整数类型 x = (123,) type(x) #关键字x看是什么类型 <class 'tuple'> #加了逗号才是元组类型 ###打包和解包不仅适用于元组,也适用于列表和字符串 t = (123,"fish",3.14) t (123, 'fish', 3.14)#元组打包 (x,y,z) = t x 123 y 'fish' z 3.14 #元组解包 # t = [123,"fish",3.14] t [123, 'fish', 3.14]#列表打包 [x,y,z] = t x 123 y 'fish' z 3.14#列表解包 ###元组虽然不可变,但是元组中的元素指向可变的列表依然是可以变的 w = ([1,2,3],[4,5,6]) w[0][0] = 0 w ([0, 2, 3], [4, 5, 6])
- 异常捕获:try-except-else/finally
- 类和对象:需要先创建一个类(class)
class Turtle:##定义一个类 head = 1#属性 eyes = 2#属性 legs = 4#属性 shell = True#属性 def crawl(self):#方法 print("人们总是抱怨我动作慢吞吞的,殊不知不积跬步无以至千里的道理") def run(self):#方法 print("虽然我行动很慢,但如果遇到危险,还是会拼命狂奔") def bite(self):#方法 print("人善被人欺,鬼善被鬼骑,我可是会咬人的") def eat(self):#方法 print("谁知盘中餐粒粒皆辛苦,吃得好不如吃得饱") def sleep(self):#方法 print("Zzzz...") # = RESTART: C:/Users/lenovo/AppData/Local/Programs/Python/Python310-32/TingKe.py t1 = Turtle()##调用函数,t1为Turtle类的对象(也叫实例对象) t1.head#属性 1 t1.legs 4 t1.run()##方法要加() 虽然我行动很慢,但如果遇到危险,还是会拼命狂奔 t2 = Turtle()##t2为另一个Turtle类对象 t2.head = 3 t2.head 3 t1.head 1#修改t2对象属性不会改变t1 t1.mouth = 1#动态地添加属性 t1.mouth 1 dir(t1)#用dir函数查看t1里面比t2多了mouth属性 ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bite', 'crawl', 'eat', 'eyes', 'head', 'legs', 'mouth', 'run', 'shell', 'sleep']
- 面向对象编程三个属性之封装 :像原先定义的Turtle类把甲鱼的特征属性和行为能力封装到一起
- python处处是对象
type(t1) <class '__main__.Turtle'>#例如这是刚才定义的Turtle类的实例对象 x = 123 type(x) <class 'int'>#例如这是整数类的实例对象,不是一般的BIF(内置函数) y = "fish" type(y) <class 'str'>#例如这是字符串类的一个实例对象,不是一般的BIF(内置函数)
- 流程图: