一 编程与编程语言
什么是编程语言?
能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质。
什么是编程?
编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。
二 编程语言分类
#机器语言:计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件;
优点:执行效率高;缺点:开发效率低,学习成本高;
#汇编语言:简写的英文标识符取代二进制去编写程序,本质仍然是直接操作硬件;
优点:执行效率高(但不如机器语言);缺点:开发效率仍然低,没有摆脱对硬件的直接操作,学习成本高;
#高级语言:直接用人类能懂表达方式的字符去编写程序,屏蔽了直接对硬件操作。但计算器无法理解,必须经过翻译才能被计算器执行。
优点:开发效率仍然高;缺点:执行效率低
根据翻译的方式不同,高级语言又分为两类:
编译型:把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。
程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等.
优点:开发效率低;缺点:执行效率高
解释型:解释性语言在运行程序的时候才翻译;先把源文件转换为字节码文件交给虚拟机运行。虚拟机边执行边翻译成机器语言。如shell,python等
优点:开发效率高,跨平台;缺点:执行效率低。
三 主流编程语言介绍
#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介绍
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、百度、腾讯、汽车之家、美团等。
五 安装python解释器
Python是一门强大的语言,目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows10系统上需要安装一下,超简单
1. 打开官网 https://www.python.org/downloads/windows/ 下载中心
2. 下载完毕后打开进行安装,勾选(all users),然后点击(customize installation)自定义安装,
3. 之后进入该界面,这是一些可选的项,全部默认勾选进行下一步,
3. 该界面是选择安装路径,最好是自己创建一个新的路径方便查找,勾选项默认
4. 完成以上步骤之后,就开始进行安装了
5. 安装完成之后,进行环境变量的设置,控制面板 ==》 系统和安全 ==》 系统 ==》 高级系统设置 ==》 环境变量 ==》 在系统变量中找到 path 双击 ==》 新建路径 Python解释器和 script
6. 实现多版本共存,同理,之前安装了3.6版本再安装一个2.7版本的解释器,
7. 注意:这样写好后还没完,在 python36 中,从文件目录中找到 python.exe 文件后复制一份并重命名为 python36.exe ,同理在python2中找到 python.exe 复制后并重命名为 python2.exe
这样写的目的就是在系统变量解析的时候不会永远是python3,因为当你在 cmd 命令行输入 python 时,在系统变量中会默认输入的第一个命令行的 python 解释器,不管你输入的是 python2 还是 python3 都会是在系统变量中默认找到的第一个 python
当然,还有要注意的一点,就是不要去改 python.exe 文件的名字,复制再重命名。
8. 好了以上就是安装python解释器的步骤,恭喜入坑,记得在 cmd 命令行输入 print(“Hello World”)
六 第一个python程序
运行python程序的两种方式:
1、交互式:不能永久保存代码:输入代码立即得到反馈结果,主要用于学习。
2、python3 test.py:可以将代码永久保存在文件中,文件通常以.py结尾.
过程:a.先启动python解释器。
b.将test.py文件的内容当中普通字符读入内容
c.解释器解释test.py的代码(此时才会检查语法错误)
强调:python解释器执行程序是解释执行,即打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾
七 变量
1.什么是变量:
量:记录现实世界中的某种状态
变:记录的状态是需要经常变化的
2.为什么要有变量:
#程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
#比如:
英雄的等级为1,打怪升级(变)为10
僵尸的存活状态True,被植物打死了,于是变为False
人的名字为egon,也可以修改为Egon
语法:变量名 = 值
变量名:专门用来访问变量值的。变量存在的意义就是被使用、通过变量名访问
值:是我们存储的数据(存到内存),用来表示现实世界中的某种状态
变量名定义的规范:
#1. 变量名只能是 字母、数字或下划线的任意组合
#2. 变量名的第一个字符不能是数字
#3. 关键字不能声明为变量名['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:
id:用来反映变量在内存中的地址:
两种变量的比较方式:
== :用来比较两个变量的值是否相等
is :用来比较两个变量的内存地址(即比较id)是否相等
结论:id相同,值一定相同;值相同,id不一定相同
type:用来反映变量的数据类型:
小整数池
1.在交互式模式下:
Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,
范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被GC回收每创建一个-5到256之间的整数,
都是直接从这个池里直接拿走一个值
2.在pycharm中:
但在pycharm中运行python程序,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,
我们只需要记住这是一种优化机制,至于范围到底多大,无需细究:
常量:
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量 举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量 AGE_OF_OLDBOY = 56
八 用户与程序交互
#在python3中 input:用户输入任何值,都存成字符串类型
#在python2中 input:用户输入什么类型,就存成什么类型
raw_input:等于python3的input
九 基本数据类型
数字(整形,长整形,浮点型,复数)
#1、整型int (无小数点的数据) # age=10 实质性 #age=int(10)
#作用:记录年龄、等级、身份证号、手机号
注意:在python3 中所有整数都是 int类型,而p'ython2中整数较大者为long(长整形)类型,较小者为int(整形)类型
#2、浮点型: salary=3.1 实质性 #salary=float(3.1)
#作用:记录身高、体重、薪资
字符串str 实质性str(值)
#定义:在单引号、双引号、三引号内包含一串字符
#作用:记录描述性质的状态,
区别1:三引号可以多行
区别2:
# info='my name is "link"'
# info="my name is 'link'"
注意:字符串可以使用+与* 进行运算
常用操作+内置方法:
1、按索引取值:
2、切片:从一个大字符串中切除一个子字符串(顾头不顾尾,步长)
3.len 取长
4.成员运算in not ni,判断是否含有某字符串
5.移除空白: strip
6.切分split:把一个字符串按照某种分割符切成一个列表
rsplit:
7.join 拼接字符串
8、循环
for循环取值不依赖索引,
9.lstrip,rstrip:
10.lower,upper
11.startswith,endswith
12.format的三种玩法:
13.replace:替换
14.isdigit 判断是否为存数字类型字符串,
isdecimal,isdigit,isnumeric 对比
n1 = b'4' #byte类型
n2 = u'4' #默认unicode字符
n3 = '四' #中文四
n4 = 'Ⅳ' #罗马数字4
byte类型只有isdigit函数
unicode数字,三个函数都是返回true
中文数字 isnumeric 返回true,isdigit,isdecimal 返回false
罗马数字 isnumeric 返回true,isdigit,isdecimal 返回false
15.find,rfind,rindex,index,count
16.center,ljust,rjust,zfill
17.is数字系列
18.
总结:
字节串:1.存一个值
2.没有有序或无序的概念,只能取值
3.不可变
练习:
# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
name = " aleX"
# 1) 移除 name 变量对应的值两边的空格,并输出处理结果
# 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果
# 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
# 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
# 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
# 6) 将 name 变量对应的值变大写,并输出结果
# 7) 将 name 变量对应的值变小写,并输出结果
# 8) 请输出 name 变量对应的值的第 2 个字符?
# 9) 请输出 name 变量对应的值的前 3 个字符?
# 10) 请输出 name 变量对应的值的后 2 个字符?
# 11) 请输出 name 变量对应的值中 “e” 所在索引位置?
# 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
列表类型list 实质性list(值)
定义:在[]内用逗号隔开,存放多个任意类型的值
作用:用于存放多个值,并且可以按照索引灵活取出任意位置对应的值
创建:
value= [1,2.1,'asa',"assa",[1,2,3]] 或者 list([1,2.1,'asa',"assa",[1,2,3]] )
取值: 取第N个元素: value[N-1]
常用操作+内置函数:
1.按索引取值:(正向取,反向取):即可取也可改
ps:不能根据索引往列表里面添加值
append,追加值:
2.切片:从一个大的列表中切出一个子列表(顾头不顾尾)
3.len 长度:
4..in, not in 成员判断
5..insert 插入:
6.remove 删除,单纯的删除无返回值
7.pop 拿走一个值
8.循环 for
语法:for item in 列表
9.clear 清空列表 ,copy 复制到一个新列表 ,count 计数,extend 追加一个列表,
10. index 找元素值
11.reverse 反转
12.sort ps相同类型之间才能做比较
13.
总结:1.能存多个值
2.有序
3.可变
练习:
1. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
2. 用列表模拟队列
3. 用列表模拟堆栈
4. 有如下列表,请按照年龄排序(涉及到匿名函数)
l=[
{'name':'alex','age':84},
{'name':'oldboy','age':73},
{'name':'egon','age':18},
]
答案:
l.sort(key=lambda item:item['age'])
print(l)
#简单购物车,要求如下:
实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
元组 tuple 不可变列表
定义方式:在()用逗号分开多个任意类型的元素
为什么要元祖: 占用内存比列表空间小,
常用操作:
1.按索引取值: 只能取
2.切片:切出来的是小元祖
3.len长度
4.成员运算 in not in
5.index 查找
总结:
1.不可变
2.有序
3.存多个值
字典 dict
定义方式:在{}内用逗号开多个元素,每一个元素都是k:v的形式,其中v可以是任意数据类型,而k大部分都应该是字符串类型。key必须是不可变类型
作用:用来存多个值,但是每一个值都有一个明确key来与其对应,key对value应该具有描述性的功能
创建:
info={
'name':'alex',
'age':18,
'sex':'male',
'compay_info':{
'cname':'oldboy',
'addr':'BJ',
'emp_num':200
}
}
或者
info2 = dict(值)
取值:info[key]
# 列表vs字典
# 当存放的多个值有明显的种类区分时最好用字典
# 当存放的多个值种类都一样时最好列表
常用操作:
1.按key取值:可存可取可改:
2.长度len
3.成员运算in 和not in:判断是字典的key
4.pop删除并拿走值
不存在会报错,可指定默认值
5.健keys(),值values(),键值对items();
常用在for循环取值:
for k in d.keys(); for v in d.values(); for k,v in d.items()
6.get取值: ???为什么有呢。 因为['key']的取值方式在 key参数不存在的情况会报错-程序崩溃。 get 则不会
第二个可指定默认值, 取值成功返回正确值,否则返回默认值。 默认为None
7.popitem() 删除 随机删除item元素。 无参数
8.update 更新, 用一个新的字典去更新老的字典,以新的为准, 老字典有的元素则该元素key不变,值改变,老字典没有的,新的字典元素加进去
9.setDefault() 两个参数 第一个参数指定key,第二个参数指定的值.
a.当指定的key存在,则不改变字典对应元素的值。会返回原值
b.当指定的key不存在,则新添加一个元素。会返回新值
集合
作用;去重复(有局限性),关系运算
1.局限性:集合是无序,去重后不能保证原序列的顺序
定义:逗号隔开多个元素
常用方法:
1. == 比较值是否相等
2.父集: > >= ;存在包含与被包含的关系 issuperset
3.子集: < <= ;存在包含与被包含的关系 issubset
4.长度 Len
5. in 或 not in
6.求交集
7.求左差集
8.求右差集
9.求并集
10.求交集的对称差集
11.add ,增加 只能添加 不可变类型数据
12. difference_update 更新差集
13.discard 删除一个元素,若指定元素不存在,则do nothing
14.pop 随机删除
15.update 添加多个,会去重
16.
总结:
1.存多个值
2.不可变,里面的元素必须是不可变类型
3.无序
布尔类型:只有两个False,True
定义:布尔值就两个:True,False
作用:用于判断真假
十基本运算符
#数学运算
注意:运算符 / 运算的结果一定带有小数点。
#比较运算
#赋值运算
#位运算
#逻辑运算
and-or结合使用:
- 结合了前面的两种语法,推理即可。
- 为加强程序可读性,最好与括号连用,例如:
(1 and 'x') or 'y'
#成员运算
运算符的优先级:
十一 流程控制之if...else
# 语法1:
# if 条件1:
# code1
# code2
# code3
# ...
#语法2:
# if 条件1:
# # 条件成立时执行的子代码块
# code1
# code2
# code3
# ...
# else:
# # 条件不成立时执行的子代码块
# code1
# code2
# code3
# ....
#
#语法3:if判断的嵌套
#语法4:if的多分支
# if 条件1:
# code1
# code2
# code3
# ...
# elif 条件2:
# code1
# code2
# code3
# ...
# elif 条件3:
# code1
# code2
# code3
# ...
# ......
# else:
# code1
# code2
# code3
# ...
十二 流程控制之while循环
while 条件:
# 循环体
# 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
# 如果条件为假,那么循环体不执行,循环终止
# 语法:
# while 条件:
# code1
# code2
# code3
# ....
#while+break:跳出本层循环
#while+else: else的代码块会在循环正常结束后执行,break中断循环不被执行
1.正常情况
2.break打断:
十四 流程控制之for循环
主要用于取值.
十五 开发工具IDE
十六 扩展阅读
十七 作业
1 练习题
简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型
执行 Python 脚本的两种方式是什么
Pyhton 单行注释和多行注释分别用什么?
布尔值分别有什么?
声明变量注意事项有那些?
如何查看变量在内存中的地址?
写代码
实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
写代码
a. 使用while循环实现输出2-3+4-5+6...+100 的和
b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 使用 while 循环实现输出 1-100 内的所有奇数
e. 使用 while 循环实现输出 1-100 内的所有偶数
现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1 = 123456
n2 = n1
2 编写登录接口
基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)