第一篇 python入门
#高级语言 高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。 高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,像最简单的编程语言PASCAL语言也属于高级语言。 高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类: 编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是cpu可以理解的2进制的机器码组成的),使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .obj,也就是OBJ文件)才能执行,只有目标文件而没有源代码,修改很不方便。 编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等 解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Java、PHP、Ruby等语言。
三、Python介绍
1、Python目前的主要应用领域
3、Python 2 or Python 3?
#测试安装是否成功 Windows -->运行 -->输入cmd , 回车,弹出cmd程序,输入Python ,如果能进入交互环境 ,表示安装成功。
#多版本共存演示 注意:在安装目录下找到python.exe,拷贝一份,命名为python2.exe或python3.exe,一定要保留原版,因为pip工具会调用它。
五、第一个Python程序
#进入解释器的交互式模式:调试方便,无法永久保存代码
#脚本文件的方式(使用nodpad++演示):永久保存代码
注意:python解释器执行程序是解释执行,即打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾
六、变量
1、什么是变量?
变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态
2、为什么要有变量?
#程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。 #比如: 英雄的等级为1,打怪升级(变)为10 僵尸的存活状态True,被植物打死了,于是变为False 人的名字为dream,也可以修改为Dream
3、如何定义变量?
#变量名(相当于门牌号,指向值所在的空间),等号,变量值 name='Dream' sex='female' age=18 level=10
4、变量的定义规范:
#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']
5、定义方式:
#驼峰体 AgeOfDream = 56 NumberOfStudents = 80 #下划线(推荐使用) age_of_dream = 56 number_of_students = 80
6、定义变量名不好的方式
#变量名为中文、拼音 #变量名过长 #变量名词不达意
7、定义变量会有:id、type、value
#1 等号比较的是value, #2 is比较的是id #强调: #1. id相同,意味着type和value必定相同 #2. value相同type肯定相同,但id可能不同,如下 >>> x='Info Egon:18' >>> y='Info Egon:18' >>> id(x) >>> id(y) >>> >>> x == y True >>> x is y False
8、变量的修改与内存管理(引用计数与垃圾回收机制)
# 变量的引用计数为0,就会进入P垃圾回收机制线程
9、常量
常量即指不变的量,如π:3.1415926.....,或者在程序运行中不会改变的量
eg:一个人的年龄是变化的,这个是变量,但是某一些情况下他的年龄不会发生变化,那就是常量。
在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名的全部大写代表常量。
eg:AGE_OF_DREAM = 18
PS:
在C语言中有专门的常量定义语法如下,一旦定义为常量,更改即会报错。
const int count = 60;
七、用户与程序交互
#在Python3中 input:用户输入任何值,都存成字符串类型 #在Python2中 input:用户输入什么类型,就存成什么尅性 raw_input:等于Python3的input
注释
代码注释分单行注释和多行注释,当行注释用#,多行注释可以用三对双引号""" """
代码注释的原则:
#1.不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可 #2.注释可以用中文或英文,但不要用拼音
文件头
#!/usr/bin/env python # -*- coding: utf-8 -*-
八、基本数据类型
什么是数据?为何会有多种类型的数据?
#数据即变量的值,如:age = 18,18则是我们保存的数据 #变量是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识。
1、数字
#int 整型 定义:age = 10 #age=int(10) 用于标识:年龄、等级、身份证号、qq号、个数。。。。。。 #float 浮点型 定义:salary = 3.1 #salary = float(3.1) 用于标识:工资、身高、体重。。。。。。
2、字符串
#在Python中,加了引号的字符就是字符串类型,Python并没有字符类型。 定义:name = 'dream' #name = ('dream') 用于标识:描述性的内容,如姓名、国际、种族
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。 >>> name='dream' >>> age='18' >>> name+age #相加其实就是简单拼接 'dream18' >>> name*5 'dreamdreamdreamdreamdream' #注意1:字符串相加的效率不高 字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次, #注意2:只能字符串加字符串,不能字符串加其他类型 字符串拼接(只能在字符串之间进行,且只能相加或相乘)
3、列表
#在[]内用逗号分隔,可以存放n个任意类型的值 定义:students=['Dream','Jessie','Jones',] #students=list(['Dream','Jessie','Jones',])
用于标识:存储多个值的情况,比如一个人有多个爱好
#存放多个学生的信息:姓名,年龄,爱好 >>> students_info=[['Dream',18,['play',]],['Jessie',18,['play','sleep']]] >>> students_info[0][2][0] #取出第一个学生的第一个爱好 'play'
4、字典
#为何还要用字典? 存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下 >>> info=['dream','male',18] 定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用 >>> info[2] 但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄 即: #name, sex, age info=['dream ','female',18] 而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
#在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
定义:info={'name':'egon','age':18,'sex':18} #info=dict({'name':'egon','age':18,'sex':18})
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值
1 info = { 2 'name':'dream', 3 'hobbies':['play','sleep'], 4 'company_info':{ 5 'name':'gengmei', 6 'type':'education', 7 'emp_num':4 8 } 9 } 10 print(info['company_info']['name']) #取公司名 11 12 students=[ 13 {'name':'Dream','age':18,'hobbies':['play','sleep']}, 14 {'name':'Jessie','age':20,'hobbies':['read','sleep']}, 15 {'name':'Jones','age':58,'hobbies':['music','read','sleep']}, 16 ] 17 print(students[1]['hobbies'][1]) #取第二个学生的第二个爱好
5、布尔 bool
#布尔值,一个True一个False #计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识 >>> a=3 >>> b=5 >>> >>> a > b #不成立就是False,即假 False >>> >>> a < b #成立就是True, 即真 True 接下来就可以根据条件结果来干不同的事情了: if a > b print(a is bigger than b ) else print(a is smaller than b ) 上面是伪代码,但意味着, 计算机已经可以像人脑一样根据判断结果不同,来执行不同的动作。
重点:
#1、可变类型:在id不变的情况下,value可以变,则称为课表类型,如列表,字典 #2、不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
九、格式化输出
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式
比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
这就用到了占位符,如:%s、%d
#%s字符串占位符:可以接收字符串,也可接收数字 print('My name is %s,my age is %s' %('dream',18)) #%d数字占位符:只能接收数字 print('My name is %s,my age is %d' %('dream',18)) print('My name is %s,my age is %d' %('dream','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,所以会报错
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式 ------------ info of Egon ----------- Name : Egon Age : 22 Sex : male Job : Teacher ------------- end ----------------- 小练习
十、基本运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
1、算术运算
以下假设a=10,b=20
运算符 | 描述 | 实例 |
+ | 加-两个对象相加 | a+b输出结果 30 |
- | 减-得到负数或是一个数减去另一个数 | a-b输出结果 -10 |
* | 乘-两个数相乘或是返回一个被重复若干次的字符串 | a*b输出结果 200 |
/ | 除-x除以y | a/b输出结果 2 |
% | 取余-返回除法的余数 | a%b输出结果 0 |
** | 幂-返回X的Y次幂 | a**b输出结果 1e21 |
// | 取整除-返回商的整数部分 | a//b输出结果 4, 9.0//2.0结果4.0 |
2、比较运算
== 等于
!= 不等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
3、赋值运算
= 简单的赋值运算符
+= 加法的赋值运算符
-= 减法的赋值运算符
*= 乘法的赋值运算符
/= 除法的赋值运算符
%= 取余的赋值运算符
**= 幂的赋值运算符
//= 取整的赋值运算符
4、逻辑运算
and 与
or 或
not 非
>>> True or Flase and False True >>> (True or Flase) and False False
5、身份运算
#is比较的是id
#而==比较的是值