Python学习历程-1-20180630
Python学习心得及经验分享-20180630
林海峰老师及各位博友大家早上好:
这是我第一次发个人博客,如有不够之处,还请大家见谅。
林老师,很高兴加入您的Python学习班,写博客是您给我们布置的作业,但是对于我来讲,我并不想让他成为一份作业,而是希望把它变成这两样东西:1、学习心得;2、老师网站学习及Python课后经验分享
1.学习心得:
首先在这先自我介绍一下,我的英文名字叫Jacky, 是一名从事IT工作10多年的IT,在这10多年中,IT销售1年,5年IT桌面技术支持,6年IT桌面技术支持管理,10多年下来,我已经是这个领域的专家,这个领域教会我最大的技能是桌面技术/沟通/人员管理,虽然我拿到的薪水是这个领域中高的,但是和IT整个行业相比,我觉得还是冰山一角,所以温故而知新则成为了我近几年的目标,谈到”知新“,我和我身边的朋友一直在沟通,通过比对与分析,我从IT几个领域中选择了APP,又从APP语言中选择了Python,为什么?原因很简单,身边的IT老总们都在研究AI,什么离AI最近,什么就占据人才市场,就能make那什么(¥)。同时对开发有了基础的理解,通过自己深入后未来管理开发人员就不问题,我的职位又可以更上一层楼,于是我萌发了学习Python的想法。我是一个开发小白,一句代码都不会打的小白,这对于我来说显然很难,很有挑战。而且面对忙碌的工作和我两岁大的孩子来说,一周仅有的就只有微乎其微的这几个小时。但即便如此我觉得自己必须要学,自己也不小了。所以我决定了学习Python这门开发语言,于是我上网看了几家培训机构,当来到老男孩的时候,我静静的在后面听了林海峰老师5分钟的课程,有培训经验的我,听到林老师讲课后,我立刻判断出老师培训水平不一般。通过和老师5分钟的交流后,我报了老男孩周末2期的班级开始学习Python。
2018年6月24日是开班的第一天,我早早的进入了课堂,由于基础差,所以开始了“搭讪”的工作,但没想到第一个被我“搭讪”的同学,竟然是我UST的老同事“欧阳”同学。他有一些开发经验的,他现在在公司主要做网络及桌面运维,曾经用过Python做过爬虫开发。几番交流后,他帮助我提前安装好了Python的软件/配置了环境变量/PyCharm等工具。同时,小李同学也做在了我的右边。给了我一些帮助,在此,像两位表示感谢。9:30分,终于开课了,校长不辞辛劳的以班主任的身份出现在了我们的面前,花了一个半先给我们讲解了班级里的班规,随后牛逼的人物终于在接近中午时闪亮登场了。他幽默、风趣、是一名Python开发的专家,他就是我们的林海峰老师。林老师花了近10个小时为我们讲述了他的第一节课。作为一个小白被灌了10小时开发内容,对于我来说终于体会到了在医院里那些被洗胃,被灌肠病人那种说不出滋味。说不累是骗人的,所以在此我也希望林老师讲课的速度能慢一些,让我们能好好吃透这门艺术,谢谢!
2、课后经验分享:
今天老师讲解了13个部分,以下是我对今天讲课内容的理解:
学会了解编程目的/什么是编程语言/什么是编程?(概念理解与学习)
编程的目的:
计算机的发明,是为了用机器取代/解放人力,而编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑/电脑一样自动执行的效果。
什么是编程语言?
上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质。在编程的世界里,计算机更像是人的奴隶,人类编程的目的就命令奴隶去工作。
什么是编程?
编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。 强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义。
语言分类:
1.机器语言(二进制代码:0101),操作对象:硬件
优点:计算机最底层语言,执行速度最快
缺点:最复杂,难读难记,导致开发效率最低,开发时间成本高
2.汇编语言(英语单取代二进制代码:print、if、etc),操作对象:硬件
优点:最接近底层语言,执行速度较快
缺点:较复杂,开发效率较低,开发时间成本较高
3.高级语言(编译型及解释型)操作对象:用机器语言编程后开发软件
编译型(编译器)
优点:执行速度快,不依赖语言环境运行,开发时间成本高
缺点:跨平台差
解释型(解释器)
优点:一份代码用于多个平台开发,开发时间成本低;
缺点:是执行速度慢,且依赖解释器运行
世界上的编程语言有600多种,但真正大家主流在使用的最多二三十种,不同的语言有自己的特点和擅长领域,随着计算机的不断发展,新语言在不断诞生,也同时有很多老旧的语言慢慢无人用了。有个权威的语言排名网站,可以看到主流的编程语言是哪些
*2017年5月数据(https://www.tiobe.com/tiobe-index/ )
长期语言排名
主流编程语言:
#C语言:
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
#C++:
C++是C语言的继承的扩展,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
#JAVA:
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
#PHP:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域
Ruby:
Ruby 是开源的,在Web 上免费提供,但需要一个许可证。[4]
Ruby 是一种通用的、解释的编程语言。
Ruby 是一种真正的面向对象编程语言。
Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。
Ruby 可以用来编写通用网关接口(CGI)脚本。
Ruby 可以被嵌入到超文本标记语言(HTML)。
Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby
#GO:
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
由其擅长并发编程
#Python:
Python是一门优秀的综合语言, Python的宗旨是简明、优雅、强大,在人工智能、云计算、金融分析、大数据开发、WEB开发、自动化运维、测试等方向应用广泛,已是全球第4大最流行的语言。
Python的创始人为吉多·范罗苏姆(Guido van Rossum)。人称“龟叔”,1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。所以从编程语言天赋上来讲,欧美国家的优势是显而易见的,作为国人,我们也需要不断像他们学习。
最新的TIOBE排行榜,Python赶超PHP占据第4, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团、Odoo等。
Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows系统上需要安装一下,操作步骤简单
打开官网 https://www.python.org/downloads/windows/ 下载中心
测试安装是否成功 windows --> 运行 --> 输入cmd ,然后回车,弹出cmd程序,输入python,如果能进入交互环境 ,代表安装成功。
多版本共存演示 注意:在安装目录下找到python.exe,拷贝一份,命名为python2.exe或python3.exe,一定要保留原版,因为pip工具会调用它。
学编程的同学都应该知道,用第一个代码生成的结果一定是”Hello World“,以下就让我们来做一个各类代码语言的比对;
#C++ #include <iostream>
int main(void)
{
std::cout<<"Hello world";
}
#C
#include <stdio.h>
int main(void)
{
printf("\nhello world!");
return 0;
}
#JAVA
public class HelloWorld{
// 程序的入口
public static void main(String args[]){
// 向控制台输出信息
System.out.println("Hello World!");
}
}
#PHP
<?php
echo "hello world!";
?>
#Ruby
puts "Hello world."
#GO
package main
import "fmt"
func main(){
fmt.Printf("Hello World!\n God Bless You!");
}
#Python
print(‘hello world’)
执行 Python 脚本的两种方式是什么?
一种是交互式方式[-5,256];(无法永久保存程序,输入一行代码,立刻反馈结果,多用于调试程序)
内存的变量值
另一种是集成开发环境工具(IDE)Python解释器[unknown],文件命名为.py结尾(可将代码永久保存到文件中)
什么是变量(变量的概念)
变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态。
为什么要有变量
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。 #游戏升级的等级变化即为由变量的产生变化
如何定义变量(图解)
变量名(相当于家里门牌号,指向值所在的空间),等号,变量值
示例:name(变量名)=(等号)'Egon'(变量值) sex='male' age=18 level=10
变量的定义规范
1. 变量名只能是 字母、数字或下划线的任意组合,该组合中字母为第一个组合项且,变量名的第一个字符不能是数字
2. 关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
定义方式:
驼峰体 AgeOfOldboy = 56 ;NumberOfStudents = 80
下划线(推荐使用) age_of_oldboy = 56 ;number_of_students = 80
定义变量名不好的方式
1. 变量名为中文、拼音
2. 变量名过长
3. 变量名词不达意
定义变量包含三个特征:
id:变量值的身份证号码:用来反应变量值在内存中的位置
type:类型
value:反应现实世界状态的
”=“与”is“的区别
”=“比较值(Value)
”is“比较变量在内存中存放位置(id)
强调:
1. id相同,type(类型)和value必定相同(同属于一个内存区域),示例:
2. value相同,type(类型)肯定相同,id可能不同,示例:
变量的修改与内存管理(引用计数与垃圾回收机制)
Python解释器自带垃圾回收机制,会在变量值没有任何引用的情况下自动回收垃圾
常量:
常量即指不变的量,如π= 3.141592653..., 或在程序运行过程中不会改变的量 举例,假如:人的年龄会变,那这就是个变量,但人一旦去世了,在这种情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量 AGE_OF_OLDBOY = 56
#ps:在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错 (固定格式)
小时候,我和妈妈去银行取钱,需要有一个银行业务员等着我们把自己的账号密码输入给他,然后他去进行验证,成功后,我们再将取款金额输入后告诉系统
如今,银行会为客户提供一台ATM机(就是一台计算机),让ATM机跟用户交互,从而取代人力。然而机器是死的,我们必须为其编写程序来运行,这就要求我们的编程语言中能够有一种能与用户交互,接收用户输入数据的机制
#在python3
input:用户输入任何值,都存成字符串类型
#在python2
input:用户输入什么类型,就存成什么类型 raw_input:等于python3的input
代码注释
随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,这太正常了。 另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,所以复杂或自己不容易理解的代码请务必加上注释(注释格式用中文及英文,不要用拼音)
代码注释的类型:
单行注释#(按Ctrl键+?键)
多行注释''' '''(按 三下“ ’ ”引号 键生成三对引号,我们称为三引号,并按回车键分割需要多行注释的内容)
代码注释分单行注释和多行注释, 单行注释用#
,多行注释可以用三对双引号""" """
什么是数据?为何要有多种类型的数据?
数据即变量的值,如age=18,18则是我们保存的数据。
变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识
数字
1.int整型(数字为整数)
定义:age=10 #age=int(10)
用于标识:年龄,等级,身份证号,qq号,个数
2.float浮点型(数字含小数点)
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重
字符串
1.字符串型
在python中,只要加了引号的字符就是字符串类型,python并没有字符类型。
定义:name='egon' #name=str('egon')
用于标识:描述性的内容,如姓名,性别,国籍,种族
那单引号、双引号、多引号的什么区别?
单双引号无任何区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is Egon , I'm 18 years old!"
多引号有什么作用?作用就是多行字符串必须用多引号
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)
字符串拼接:
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。顺序按照数字运算法则,“先乘后加”。
#注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次
#注意2:只能字符串加字符串,不能字符串加其他类型
列表
在[ ]内用逗号分隔,可以存放n个任意类型的值 定义:students=['egon','alex','wupeiqi',] #students=list(['egon','alex','wupeiqi',]) 用于标识:存储多个值的情况,比如一个人有多个爱好
]中的代码由外到内,写代码时需注意引号及代码层级,取值范围从“0”开始, 依次类推。
字典
定义方式:在{ }号内用逗号个隔开多个元素,每一个元素都是k:v的形式,其中v可以是任何数据类型(数字、字符串、列表、字典、布尔),而k大部分应该是字符串类型
示例1(列表形式):
示例2(一个花括号):
示例3(两个花括号):
备注:出现bug时,先检查标点符号如逗号、各类括号等
列表与字典的比较:
当存放的多个值有明显的种类区分时最好用字典
当存放的多个值种类都一样时最好列表
布尔
计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
定义:布尔值有两个:True、False
作用:判断真假
示例1:
示例2:
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式
比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
这就用到了占位符,如:%s(字符串、数字)、%d(数字)
#%s字符串占位符:可以接收字符串,也可接收数字
print('My name is %s,my age is %s' %('egon',18))
#%d数字占位符:只能接收数字
print('My name is %s,my age is %d' %('egon',18))
print('My name is %s,my age is %d' %('egon','18')) #报错
#接收用户输入,打印成指定格式
name=input('your name: ')
age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d
print('My name is %s,my age is %s' %(name,age))
#注意:
#print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以会报错
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
算数运算
以下假设变量:a=10,b=20
比较运算
以下假设变量:a=10,b=20
赋值运算
以下假设变量:a=10,b=20
逻辑运算
身份运算
is比较的是id
==比较的是值
1 如果:女人的年龄>30岁,那么:叫阿姨
age_of_girl=31 if age_of_girl > 30: print('阿姨好')
2 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐
age_of_girl=18 if age_of_girl > 30: print('阿姨好') else: print('小姐好')
3 如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨
age_of_girl=18 height=171 weight=99 is_pretty=True if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True: print('表白...')else: print('阿姨好')
#在表白的基础上继续: #如果表白成功,那么:在一起 #否则:打印。。。 age_of_girl=18 height=171 weight=99 is_pretty=True success=False if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True: if success: print('表白成功,在一起') else: print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...') else: print('阿姨好')
4 如果:成绩>=90,那么:优秀
如果成绩>=80且<90,那么:良好
如果成绩>=70且<80,那么:普通
其他情况:很差
score=input('>>: ') score=int(score) if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('很差')
1 为何要用循环
我们已经学会用if .. else 来猜年龄的游戏,但是只能猜一次就中的机率太小了,如果想给玩家3次机会呢?就是程序启动后,玩家最多可以试3次,这个怎么弄呢?你总不会想着把代码复制3次,所以我们要用循环
age_of_oldboy = 48
guess = int(input(">>:"))
if guess > age_of_oldboy :
print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")
#第2次
guess = int(input(">>:"))
if guess > age_of_oldboy :
print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")
#第3次
guess = int(input(">>:"))
if guess > age_of_oldboy :
print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")
#即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。
那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场
2 条件循环:
while,语法如下
while 条件:
# 循环体
# 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
# 如果条件为假,那么循环体不执行,循环终止
3 死循环:
import time
num=0
while True:
print('count',num)
time.sleep(1)
num+=1
4 循环嵌套与tag:
tag=True
while tag:
......
while tag:
........
while tag:
tag=False
5 break与continue
break用于退出本层循环
while True:
print "123"
break
print "456"
continue用于退出本次循环,继续下一次循环
while True:
print "123"
continue
print "456"
6 while+else
与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count = 0
while count <= 5 :
count += 1
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----out of while loop ------
#如果执行过程中被break啦,就不会执行else的语句啦
count = 0
while count <= 5 :
count += 1
if count == 3:break
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
输出
Loop 1
Loop 2
-----out of while loop ------
从早上5:00到现在终于第一节课的视频全看了一边,边做边练,其它不多说了,希望有一天能学好这门语言吧。晚安