为了谋生,代码渣渣一枚总得付出更多的努力跟上别人的步伐,这样才不会被淘汰~
so~~start our零基础的python3进阶之路吧!!!
- 安装学习需要的环境以及软件(不会的自己搜教程吧,挺多的)
首先安装python3的各种python软件,我是python3.7,安装了pycharm。
- 指定适合自己的学习攻略
原来学过c和c++,所以编程有一点基础。
从知乎以及csdn上看了很多帖子,选择了适合自己的零基础教程,个人喜欢先看视频学习,然后结合书~下面总结的是各位大佬推荐的视频和书籍,我觉得还不错,但是我还在学习,后期再给反馈吧…
视频推荐(都是免费的):
哔哩哔哩–>莫烦python,小甲鱼pyhton
博文–>廖雪峰python
ps:小甲鱼自己有鱼C论坛,课后作业是收费的,python一节2块左右。
书籍推荐:
《python学习手册》(第五版)
《教孩子一起学编程(pyhton版)》
《“笨”办法学python3》
《python机器学习》
那么接下来开始记录我的学习过程,方便以后我忘记了,还能回想,不然真的就都忘了。 - 学习从0开始
1、print()输出
括号里面是成对的引号,单双引号都可以,但是必须是英文符号。
print("nihao")
print('nihao')
2、变量的命名方法(和C一样)
数字、下划线、字母,不可以用数字开头。
3、怎么打印出来引号
用转义字符反斜杠,如下:
print("\"")
4、r的用法,如何加反斜杠(注意r后面是没括号且单引号)
>>> temp = r'c:\nihao'
>>> temp
'c:\\nihao'
>>> print(temp)
c:\nihao
>>>
5、for循环、while循环、if判断
无论是哪个循环,都得记得缩进,python的循环没有大括号,都是按照缩进进行判别循环体。
条件输完,后面都有冒号!
(1)while 条件:
...
break
(2)for 条件:
...
(3)if 条件:
...
else:
...
6、变量之间的类型转换
python自带很多内置函数,类型转换涉及到的函数有:
(1)str();
(2)int();
(3)float();
错误示例:
temp = input("How old are you?")
age = int(temp)
print("you are" + age + "years old!")
执行结果:
======================= RESTART: D:\untitled\hello.py =======================
How old are you?2
Traceback (most recent call last):
File "D:\untitled\hello.py", line 8, in <module>
print("you are" + age + "years old!")
TypeError: can only concatenate str (not "int") to str
原因:age是int型,输出的两边都是str型,所以类型不一致,报错。
修改如下:
temp = input("How old are you?")
print("you are " + temp + " years old!")
执行结果:
How old are you?4
you are 4 years old!
7、type()和isinstance()
type():用来查看括号内的变量是什么类型的;
isinstance(a,b):是用来查看a和b类型是否一致(一致就是ture,否则flase)。
8、算数操作符(加减乘除等)
**是幂运算;除法分/和//:
(1)//是真正的除法,就是左右两边类型一致,结果的类型就和除数被除数一样,如果不一致(一个float,一个int),结果就是float型
(2)/就是除完是多少就多少,如果其中一边是float,结果就是float。
>>> 5/3
1.6666666666666667
>>> 5//3
1
>>> 5.0/3
1.6666666666666667
>>> 5.0//3.0
1.0
>>>
9、逻辑操作符:and、or、not
10、python的缩进强制性规定了谁和谁匹配,如if和else。不像c就近匹配,容易出错(else悬挂事件)。
11、python三元操作符(条件表达式)
下面两段代码是一个意思,但是最下面的是更简洁的版本,也是python这门语言的精华就是简洁易上手。
x,y = 4,5
if x < y:
small = x
elae:
small = y
small = x if x < y else y
12、assert关键字叫:“断言”,当这个关键字后面的条件为假的时候,就会程序崩溃,并且抛出AssertionError异常。
比如:assert 1 > 2
13、range(start,stop,step)
输出为start到stop-step。
>>> for i in range(1,3,1):
print(i)
1
2
14、break语句,可以直接跳出循环
15、continue语句:终止本轮循环,并开始下一轮循环,继续判断循环条件
for i in range(10):
if i%2 == 0:
print(i)
continue
i = i + 2
print(i)
16、列表
(1)创建一个普通列表
list = [1,2,3]
member = ['nihao','yanzi']
(2)创建一个空列表
empty = []
(3)创建一个混合列表
member1 = [1,'nihao',[1,2,3]]
(4)向列表添加元素:append()
每次只能加一个!
>>> member1 = [1,'nihao',[1,2,3]]
>>> member1.append('nihaoaaaaa')
>>> member1
[1, 'nihao', [1, 2, 3], 'nihaoaaaaa']
(5)extend()
以列表的形式添加多个!
>>> member1.extend([3,4,5])
>>> member1
[1, 'nihao', [1, 2, 3], 'nihaoaaaaa', 3, 4, 5]
(6)insert(a,b)
a代表添加到哪个位置,b代表添加的内容
>>> member1.insert(0,'xiaohua')
>>> member1
['xiaohua', 1, 'nihao', [1, 2, 3], 'nihaoaaaaa', 3, 4, 5]
(7)删除
remove():只需要知道你删除的内容就可以,不需要知道位置。
>>> member1.remove(1)
>>> member1
['xiaohua', 'nihao', [1, 2, 3], 'nihaoaaaaa', 3, 4, 5]
del:删除指定位置的内容
>>> member1
['xiaohua', 'nihao', [1, 2, 3], 'nihaoaaaaa', 3, 4, 5]
>>> del member1[1]
>>> member1
['xiaohua', [1, 2, 3], 'nihaoaaaaa', 3, 4, 5]
也可以直接写列表名,整个列表都会被删除。
del member1
pop():取出列表最后一个参数,也就相当于剔除该参数;
pop(a):a代表索引值,就是删除参数的位置。
>>> member1.pop()
5
>>> member1
['xiaohua', [1, 2, 3], 'nihaoaaaaa', 3, 4]
>>>
(8)列表分片:slice
注意:中间是冒号!!!!!!不是逗号,也不是分号!
原列表内容不变!
>>> member1
['xiaohua', [1, 2, 3], 'nihaoaaaaa', 3, 4]
>>> member1[1,3]
Traceback (most recent call last):
File "<pyshell#66>", line 1, in <module>
member1[1,3]
TypeError: list indices must be integers or slices, not tuple
>>> member1[1;3]
SyntaxError: invalid syntax
>>> member1[1:3]
[[1, 2, 3], 'nihaoaaaaa']
>>> member1[]
SyntaxError: invalid syntax
>>> member1[:]
['xiaohua', [1, 2, 3], 'nihaoaaaaa', 3, 4]
>>> member1[1:]
[[1, 2, 3], 'nihaoaaaaa', 3, 4]
>>> member1[:3]
['xiaohua', [1, 2, 3], 'nihaoaaaaa']
17、列表的操作符
列表比大小:默认比较两个列表第0个元素,作为结果。
列表加法:两个列表相加,相当于列表拼接,但是不可以直接+ ‘…’,因为前后类型不同,必须是列表和列表。
列表乘法:将该列表内容重复多少次(你×多少就重复多少)。
列表逻辑运算:
>>> member1
['xiaohua', [1, 2, 3], 'nihaoaaaaa', 3, 4]
>>> 'xiaohua' in member1
True
>>> 1 in member1
False
>>> 1 in member1[1]
True
18、查看list运算
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
(1)count(a):用来计数括号内a出现多少次;
(2)index(a):用来显示a在该列表中的位置,也就是索引;
index(a,b,c):用来显示a在位置b(起始位)和c(结束位)之间,a的索引;
>>> member1.count(1)
0
>>> member1.index('xiaohua')
0
>>> member1
['xiaohua', [1, 2, 3], 'nihaoaaaaa', 3, 4]
>>> member1.index('xiaohua',0,3)
0
(3)reverse():翻转整个列表
>>> list1 = [1,2,3,4]
>>> list1.reverse()
>>> list1
[4, 3, 2, 1]
(4)sort():给列表从小到大排序。
>>> list1
[4, 3, 2, 1]
>>> list1.sort()
>>> list1
[1, 2, 3, 4]
(5)拷贝一个列表尽量使用分片这样拷贝过后,内容不变,如list2;如果直接赋值,后面内容会随原变量变化,如list3。
>>> list1
[1, 2, 3, 4]
>>> list2 = list1[:]
>>> list3 = list1
>>> list2
[1, 2, 3, 4]
>>> list3
[1, 2, 3, 4]
>>> list1.append(0)
>>> list1
[1, 2, 3, 4, 0]
>>> list2
[1, 2, 3, 4]
>>> list3
[1, 2, 3, 4, 0]
18、元组和列表
(1)列表可以随意增删改,元组只能查,不可改。
>>> tuple
(1, 2.3, 4, 5)
>>> tuple[1] = 2
Traceback (most recent call last):
File "<pyshell#101>", line 1, in <module>
tuple[1] = 2
TypeError: 'tuple' object does not support item assignment
(2)列表的特征可以是空的中括号;
元组的特征是空的括号,也可以是括号里面有数字还有逗号,如(1,)!
>>> type(temp)
<class 'int'>
>>> temp = 1,2.3
>>> type(temp)
<class 'tuple'>
>>> temp = (,)
SyntaxError: invalid syntax
>>> temp = (1,)
>>> type(temp)
<class 'tuple'>
>>> temp = ()
>>> type(temp)
<class 'tuple'>
(3)修改元组:利用切片的方式,把元组拆开,然后重新赋值,覆盖原来的内容,就当你“修改了元组”。
>>> temp
('xiaohua', 1, 2, 3)
>>> temp = temp[:2] + ('nihao',) + temp[2:]
>>> temp
('xiaohua', 1, 'nihao', 2, 3)
(4)元组的操作符:重复*8;拼接:逻辑操作符;条件操作符(大于小于)
19、字符串
(1)修改字符串内容:和元组一样,需要拆开进行拼接。
(2)好多操作:
>>> str1 = 'nihao'
>>> str1.capitalize()
'Nihao'
>>> str1.casefold()
'nihao'
>>> str1.center(10)
' nihao '
>>> str1.count('ni')
1
>>> str1.endswith('o')
True
>>> str2 = 'ni\mo\ni'
>>> str2.expandtabs(0)
'ni\\mo\ni'
>>> str2.join('12345')
'1ni\\mo\ni2ni\\mo\ni3ni\\mo\ni4ni\\mo\ni5'
>>> str3 = ' nihao'
>>> str3.lstrip()
'nihao'
>>> str3.partition('h')
(' ni', 'h', 'ao')
>>> str3.replace('h','H')
' niHao'
>>> str3.split()
['nihao']
>>> str3.split('o')
[' niha', '']
>>> str4 = ' nihao
>>> str5 = 'ssssassss'
>>> str5.strip()
'ssssassss'
>>> str5.strip('s')
'a'
>>> str5.translate(str.maketrans('s','b'))
'bbbbabbbb'
20、格式化
(1)关键字参数
>>> "{a} love {c} {b}".format(a = "wo ",c = "a",b = "ni")
'wo love a ni'
(2)位置参数
>>> "{0} love {2} {1}".format("wo ","a","ni")
'wo love ni a'
(3)关键字、位置参数混合(规则:位置参数必须在前)
>>> "{0} love {c} {b}".format("wo ",c = "a",b = "ni")
'wo love a ni'
>>>
(4)一个例子
>>> '{0:.1f}{1}'.format(27.658,'gb')
'27.7gb'
(5)格式化符号
>>> '%c %c %c' % (97,98,100)
'a b d'
>>> '%d - %d = %d'% (4,5,4-5)
'4 - 5 = -1'
(6)格式化辅助符号
>>> '%-10d' % (5)
'5 '
>>> '%10d' % (5)
' 5'
>>> '%+10d' % (5)
' +5'
>>> '%+10d' % (-5)
' -5'
负号表示左对齐,0是填充,但是5后面没有,python作者为了不改变原值(如果不小心在银行敲错,就会出现账户钱扩大很多遍)
>>> '%-010d' % (5)
'5 '
>>> '%010d' % (5)
'0000000005'
进制
>>> '%#X' % (5)
'0X5'
>>> '%#X' % (152)
'0X98'
>>> '%#d' % (5)
'5'
(7)转义字符
’ 单引号
" 双引号
\t 一个tab键
\n 换行
21、序列
序列包括列表、元组、字符串,三者共同点:
(1)都可以通过索引得到每一个元素;
(2)默认索引总是从0开始;
(3)都可以通过分片的方法得到一个范围的元素集合
(4)好多操作符都可以用
22、元组可以变成列表
>>> c = (1,2,2,5,55,6,33,2)
>>> c = list(c)
>>> c
[1, 2, 2, 5, 55, 6, 33, 2]
23、max()、len()、min()、sum()、sorted()
max()返回序列中最大值;
len()返回序列长度;
min()返回序列最小值;
>>> d = 'i love you'
>>> d
'i love you'
>>> max(d)
'y'
>>> len(d)
10
>>> min(d)
' '
sum()将序列中的数字相加(类型不同不可以相加);
sorted()从小到大排序;
>>> c
[1, 2, 2, 5, 55, 6, 33, 2]
>>> sum(c)
106
>>> sum(c,9)
115
>>> d
'i love you'
>>> sum(d)
Traceback (most recent call last):
File "<pyshell#172>", line 1, in <module>
sum(d)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
reversed()返回迭代器对象(但是可以通过list进行复现倒序序列内容);
>>> reversed(d)
<reversed object at 0x0000021A41A177F0>
>>> list(reversed(d))
['u', 'o', 'y', ' ', 'e', 'v', 'o', 'l', ' ', 'i']
enumerate()和reversed()一样,返回的是迭代器对象,可以通过list强制转换。
>>> enumerate(d)
<enumerate object at 0x0000021A41A8A7E0>
>>> list(enumerate(d))
[(0, 'i'), (1, ' '), (2, 'l'), (3, 'o'), (4, 'v'), (5, 'e'), (6, ' '), (7, 'y'), (8, 'o'), (9, 'u')]
zip()和reversed()一样,返回的是迭代器对象,可以通过list强制转换。
成双成对进行显示,多余的比如9,a列表没有就不匹配了。
>>> a = [1,2,5]
>>> b = [4,5,6,9]
>>> list(zip(a,b))
[(1, 4), (2, 5), (5, 6)]
23、函数编写
(1)第一个简单的函数
函数是有一个括号的,末尾要有冒号!!!!!
调用的时候,直接输入函数名字括号,ok~
>>> def MyfirstFunction()
SyntaxError: invalid syntax
>>> def MyfirstFunction():
print("nihao")
>>> MyfirstFunction()
nihao
(2)带有参数传递的函数
>>> def add(name1,name2):
sum = name1 + name2
return(sum)
>>> add(5,6)
11
直接返回结果:
>>> def add(name1,name2):
return name1+name2
>>> print(add(6,9))
15
24、函数文档
25、实参、形参
26、默认参数
27、函数与过程
有返回值的叫函数;没有返回值的叫过程。
28、全局变量和局部变量
全局变量是哪里都可以访问的到的,但是全局变量是不容易被修改的,哪怕你在函数内部创建一个和全局变量名字相同的变量并且赋值,但是这也没办法更改全局变量的值,因为系统会默认存在两个名字相同的变量,但是一个是全局,另外那个就是你妄图修改全局变量创建的值。