Python 第一课笔记
本节内容
- Python介绍
- Python类型
- 安装
- Hello World程序
- Pycham安装
- 变量
- 字符编码
- 注释
- 用户输入
- 格式化输出
- 模块初识
- 表达式if ...else语句
- 表达式for 循环
- break and continue
- 表达式while 循环
1.python介绍
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
目前Python主要应用领域:
- 云计算: 云计算最火的语言, 典型应用OpenStack
- WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系统运维: 运维人员必备语言
- 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI: PyQT, WxPython,TkInter
2.Python 是一门什么样的语言?
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。
编译和解释的区别是什么?
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
编译型vs解释型
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
python是解释型
3.python 安装
Windows
1、下载安装包
https://www.python.org/downloads/
2、安装
默认安装路径:C:\python27
3、配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
Linux ,Mac
无需安装,原装Python环境
ps:如果自带2.6,请更新至2.7
4、Hello World程序的两种方法
在windows下执行
1、编辑器里输入,不用编译
print("Hello World!") 直接就可以运行
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107125339206-1242382514.jpg)
2、可以存成一个程序再运行
存成一个文本,新建一个.py文件。到cmd中执行
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107130245987-2079930042.jpg)
运行脚本 python Hello.py
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107131313784-1169179070.jpg)
在linux 下创建一个文件叫hello.py 并输入
print("Hello World!")
执行前需给予 hello.py 执行权限,chmod 755 hello.py
1 #!/usr/bin/env python 2 3 print "hello,world"
#!/usr/bin/env python #可写可不写
要是把代码变成一个可执行程序,必须在第一行声明解释器是什么
这个声明有两种写法
1 #!/usr/bin/env python #第一种写法 2 3 #!/usr/bin/python #第二种写法
env是找环境变量 ,到整个系统里找一个叫python的环境变量
第二种是写死了就找/usr/bin/python目录下的文,如果装了3.5,仍然用的是系统原装2.7版本的python不好,不要用这个
5、Pycham安装
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107134034112-1831515252.jpg)
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107134119222-1271756120.jpg)
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107134149691-878204340.jpg)
![](https://images2015.cnblogs.com/blog/1089519/201701/1089519-20170107134514456-711953626.jpg)
进入项目,修改模板【view】——》【Toolbar】
写好程序运行程序,右键【run】
右运行后自动保存
6、变量
什么是变量,用来存东西的,后面要调用的,变量存在内存里,
1 name = "rainbow"
变量名,给变量赋值
1 name = "rainbow" 2 3 print("my name is ",name)
以下代码:运行结果【my name is rainbow rainbow】
1 name = "rainbow" 2 3 name2=name 4 print("my name is ",name,name2)
以下代码运行结果
my name is rainbow rainbow
Paoche ge rainbow
1 name = "rainbow" 2 name2=name 3 print("my name is ",name,name2) 4 name="Paoche ge" 5 print(name,name2)
实际name2只是向name问路,自己指向内存地址,而不是指向name
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
![](https://images2018.cnblogs.com/blog/1089519/201807/1089519-20180713110214815-651144062.png)
变量名要有含义
复杂的变量名用下划线区分,或者驼峰法表示
1 gf_of_oldboy="Amy" 2 GfOfOldboy="lala"
如何定义常量呢,不支持常量,但是想表示的话
变量名大写,表示常量
1 PIE=3.14 #不应该改,但是可以改而已,尽量不改
7、字符编码
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
用0和1表示数字,通过1010组合表示
1 128 64 32 16 8 4 2 1 2 1 1 1 1 1 1 1 1
二进制是计算机中能表示的最小单位,
一个二进制位bit
8 4 2 1 的规律,之前所有数字之和加1,也是2的n次方
8bit=1byte字节
1024byte=1kbyte
1024kbyte=1mbyte
1024mbyte=1gb
1024gb=1T
任意数字要用一个bit表示,8个字节表示,
字符编码把二进制和字母转换
ASCII码,最多用8位表示一个字节,8位表示255个符号
关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
从128到255留给中文等做扩展
GB2312——1980年 (7445个字符)
GBK——1995年 (2W+个字符)
GB18030——2000年 (27484个字符)
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,
规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
UTF-8可变长度的英文ASCII码格式
Unicode占2个字节16位、ASCII占1个字节8位、UTF-8中文占3个字节
8、注释
1 #单行注释 2 ''' 3 多行注释 4 1行 5 2行 6 3行 7 4行 8 5行 9 6行 10 7行 11 8行 12 '''
#号单行指数
‘’‘多行注释‘’‘ 三个单引号或者三个双引号
1 msg=''' 2 1、aaaaaaaaaaaa 3 2、bbbbbbbbbbbb 4 3、cccccccccccc 5 4、555555555555 6 7 ''' 8 print(msg)
【运行结果】
1、aaaaaaaaaaaa
2、bbbbbbbbbbbb
3、cccccccccccc
4、555555555555
9、用户输入
input用户交互
1 username=input("输入用户名:") 2 pwd=input("输入密码:") 3 print(username,pwd)
输入用户名:阿斯蒂芬
输入密码:asdf
阿斯蒂芬 asdf
10.格式化输出
1 name=input("name") 2 age=input("age") 3 job=input("job") 4 Salary=input("Salary") 5 6 7 info=''' 8 ---------Info of '''+ name +'''------------- 9 Name:'''+ name +''' 10 Age:'''+ age +''' 11 job:'''+ job +''' 12 Salary:'''+ Salary +''' 13 ------------------------------- 14 ''' 15 print(info)
【运行结果】
1 name kaka 2 age 18 3 job IT 4 Salary 20000 5 6 ---------Info of kaka------------- 7 Name: kaka 8 Age: 18 9 job: IT 10 Salary: 20000 11 -------------------------------
另外一种写法
1 name=input("name") 2 age=input("age") 3 job=input("job") 4 Salary=input("Salary") 5 6 7 info=''' 8 ---------Info of %s------------- 9 Name:%s 10 Age:%s 11 job:%s 12 Salary:%s 13 ------------------------------- 14 '''%(name,name,age,job,Salary) 15 print(info)
【运行结果】
namenono age19 jobart Salary15000 ---------Info of nono------------- Name:nono Age:19 job:art Salary:15000 -------------------------------
%s是占位符,代表string
%d是数字类型,帮助验证输入的数据类型是否正确
%f浮点,可以理解为小数
1 name=input("name") 2 age=input("age") 3 job=input("job") 4 Salary=input("Salary") 5 6 7 info=''' 8 ---------Info of %s------------- 9 Name:%s 10 Age:%d 11 job:%s 12 Salary:%s 13 ------------------------------- 14 '''%(name,name,age,job,Salary) 15 print(info)
【运行结果】报错
namebaby age34 jobshowgirl Salary30000 Traceback (most recent call last): File "D:/Python/s014/Day1.py", line 16, in <module> '''%(name,name,age,job,Salary) TypeError: %d format: a number is required, not str
调试状态
1 name=input("name:") 2 age=input("age:") 3 #打印一个变量的数据类型 4 print(type(age)) 5 job=input("job:") 6 Salary=input("Salary:")
运行结果,默认输入的都是字符串,需要强行转换一下
name:aaaa age:33 <class 'str'> job
强制转换,并打印
1 name=input("name:") 2 age=int(input("age:")) 3 #打印一个变量的数据类型 4 print(type(age),type(str(age))) 5 6 job=input("job:") 7 Salary=input("Salary:")
[运行结果]
name:kiwi age:18 <class 'int'> <class 'str'> job:
第二种格式输出,格式化拼接
1 name=input("name:") 2 age=int(input("age:")) 3 job=input("job:") 4 Salary=input("Salary:") 5 6 7 info2=''' 8 ---------Info of {_name}------------- 9 Name: {_name} 10 Age: {_age} 11 job:{_job} 12 Salary:{_Salary} 13 ------------------------------- 14 '''.format(_name=name, 15 _age=age, 16 _job=job, 17 _Salary=Salary 18 ) 19 print(info2)
【运行结果】
1 name:nana 2 age:36 3 job:IT 4 Salary:50000 5 6 ---------Info of nana------------- 7 Name: nana 8 Age: 36 9 job:IT 10 Salary:50000 11 -------------------------------
第三种方式的拼接
1 name=input("name:") 2 age=int(input("age:")) 3 job=input("job:") 4 Salary=input("Salary:") 5 6 7 info3=''' 8 ---------Info of {0}------------- 9 Name: {0} 10 Age: {1} 11 job:{2} 12 Salary:{3} 13 ------------------------------- 14 '''.format(name,age,job,Salary) 15 16 print(info3)
【运行结果】
1 name:pink 2 age:67 3 job:study 4 Salary:12345 5 6 ---------Info of pink------------- 7 Name: pink 8 Age: 67 9 job:study 10 Salary:12345 11 -------------------------------
11、初识模块
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。引用的时候必须把模块导入到程序中
1 import getpass
2
3 4 username=input("输入用户名:") 5 pwd=getpass.getpass("输入密码:") 6 print(username,pwd)
运行结果不正确,结论是Pycharm中getpass不好用,只能在cmd中执行
表达式if ...else语句
没有大括号,必须有缩进
1 _name="alex" 2 _password="abc123" 3 4 5 username=input("输入用户名:") 6 pwd=input("输入用户名:") 7 8 if _name==username and _password==pwd: 9 print("Welcome user {name} ,login......".format(name=username)) 10 else: 11 print("invalid username or paddword!")
【输出结果1】
1 输入用户名:aa 2 输入用户名:asdf 3 invalid username or paddword!
【输出结果2】
1 输入用户名:alex 2 输入用户名:abc123 3 Welcome user alex ,login......
猜年龄小游戏
1 age_of_old_boy=56 2 3 guessage=int(input("guess age:")) 4 5 if guessage==age_of_old_boy: 6 print("Yes,you got it!") 7 elif guessage > age_of_old_boy: 8 print("Too old") 9 else: 10 print("Too young")
【运行结果】
1 guess age:56 2 Yes,you got it!
1 guess age:1 2 Too young
1 guess age:59 2 Too old
while循环
1 count=0 #添加一个计数器 2 3 while True: #永远成立,永远执行
4 print(count) 5 count+=1 #循环一次自增加1
1 …… 2 859725 3 859726 4 859727 5 859728 6 859729 7 859730 8 859731 9 859732 10 859733 11 859734 12 859735 13 859736 14 859737 15 859738 16 859739 17 859740 18 859741 19 859742 20 859743 21 859744 22 859745 23 859746 24 859747 25 859748 26 859749 27 859750 28 859751 29 859752 30 859753 31 859754 32 859755 33 859756 34 859757 35 859758 36 859759 37 859760 38 859761 39 859762 40 859763 41 859764 42 859765 43 859766 44 859767 45 859768 46 859769 47 859770 48 859771 49 859772 50 859773 51 859774 52 859775 53 859776 54 859777 55 859778 56 859779 57 859780 58 859781 59 859782 60 859783 61 859784 62 859785 63 859786 64 859787 65 859788 66 859789 67 859790 68 859791 69 859792 70 859793 71 859794 72 859795 73 859796 74 859797 75 859798 76 859799 77 859800 78 859801 79 859802 80 859803 81 859804 82 ……
循环猜年龄
1 age_of_old_boy=56 2 3 count = 0 4 while count < 3: 5 guessage=int(input("guess age:")) 6 7 if guessage==age_of_old_boy: 8 print("Yes,you got it!") 9 break 10 elif guessage > age_of_old_boy: 11 print("Too old") 12 else: 13 print("Too young") 14 count += 1 15 16 else: 17 print("too meny times you have try,fuck off...")
1 guess age:57 2 Too old 3 guess age:23 4 Too young 5 guess age:99 6 Too old 7 too meny times you have try,fuck off...
表达式for循环
1 for i in range(10): 2 print("loop:",i)
【运行结果】
1 loop: 0 2 loop: 1 3 loop: 2 4 loop: 3 5 loop: 4 6 loop: 5 7 loop: 6 8 loop: 7 9 loop: 8 10 loop: 9
以上程序用for的实现
1 age_of_old_boy=56 2 3 for i in range(3): 4 guessage=int(input("guess age:")) 5 6 if guessage==age_of_old_boy: 7 print("Yes,you got it!") 8 break 9 elif guessage > age_of_old_boy: 10 print("Too old") 11 else: 12 print("Too young") 13 else:#正常走完流程的时候执行else,如果上面语句break不执行此句 14 print("too meny times you have try,fuck off...")
【运行结果一样】
1 guess age:67 2 Too old 3 guess age:33 4 Too young 5 guess age:56 6 Yes,you got it!
【程序】隔一个打一次
#跳着打印,每隔一个打一次 for i in range(0,10,2):#从0开始,到10结束,步长是2 print("loop:",i)
【运行结果】
1 loop: 0 2 loop: 2 3 loop: 4 4 loop: 6 5 loop: 8
【打印奇数】
1 for i in range(1,10,2):#从0开始,到10结束,步长是2 2 print("loop:",i)
1 loop: 1 2 loop: 3 3 loop: 5 4 loop: 7 5 loop: 9
continue、break和exit()
1 age_of_old_boy=56 2 3 count = 0 4 while count < 3: 5 guessage=int(input("guess age:")) 6 7 if guessage==age_of_old_boy: 8 print("Yes,you got it!") 9 break 10 elif guessage > age_of_old_boy: 11 print("Too old") 12 else: 13 print("Too young") 14 count += 1 15 if count==3:#询问是否退出,不想退出继续循环 16 continue_or_not=input("continue play?") 17 if continue_or_not != 'n': 18 count=0#清空计数器,重新来过 19 else: 20 print("too meny times you have try,fuck off...")
1、continue是结束本次循环跳到下一个循环
1 #continue的用法 2 for i in range(0,10):#从0开始,到10结束 3 if i < 5 : 4 print("loop:",i) 5 else: 6 continue 7 print("hehe....")#
1 loop: 0 2 hehe.... 3 loop: 1 4 hehe.... 5 loop: 2 6 hehe.... 7 loop: 3 8 hehe.... 9 loop: 4 10 hehe....
程序打上断点都
*******continue是跳出本次循环,继续到下次循环,**********
*******break是结束整个循环***************************
2、break是结束当前循环层
for循环嵌套
1 for i in range(10): 2 print("*******外循环次数**********",i) 3 for j in range(10): 4 print("....内循环次数....",j) 5 if j > 5: 6 break #退出本次循环,而不是外层循环
运行结果
1 *******外循环次数********** 0 2 ....内循环次数.... 0 3 ....内循环次数.... 1 4 ....内循环次数.... 2 5 ....内循环次数.... 3 6 ....内循环次数.... 4 7 ....内循环次数.... 5 8 ....内循环次数.... 6 9 *******外循环次数********** 1 10 ....内循环次数.... 0 11 ....内循环次数.... 1 12 ....内循环次数.... 2 13 ....内循环次数.... 3 14 ....内循环次数.... 4 15 ....内循环次数.... 5 16 ....内循环次数.... 6 17 *******外循环次数********** 2 18 ....内循环次数.... 0 19 ....内循环次数.... 1 20 ....内循环次数.... 2 21 ....内循环次数.... 3 22 ....内循环次数.... 4 23 ....内循环次数.... 5 24 ....内循环次数.... 6 25 *******外循环次数********** 3 26 ....内循环次数.... 0 27 ....内循环次数.... 1 28 ....内循环次数.... 2 29 ....内循环次数.... 3 30 ....内循环次数.... 4 31 ....内循环次数.... 5 32 ....内循环次数.... 6 33 *******外循环次数********** 4 34 ....内循环次数.... 0 35 ....内循环次数.... 1 36 ....内循环次数.... 2 37 ....内循环次数.... 3 38 ....内循环次数.... 4 39 ....内循环次数.... 5 40 ....内循环次数.... 6 41 *******外循环次数********** 5 42 ....内循环次数.... 0 43 ....内循环次数.... 1 44 ....内循环次数.... 2 45 ....内循环次数.... 3 46 ....内循环次数.... 4 47 ....内循环次数.... 5 48 ....内循环次数.... 6 49 *******外循环次数********** 6 50 ....内循环次数.... 0 51 ....内循环次数.... 1 52 ....内循环次数.... 2 53 ....内循环次数.... 3 54 ....内循环次数.... 4 55 ....内循环次数.... 5 56 ....内循环次数.... 6 57 *******外循环次数********** 7 58 ....内循环次数.... 0 59 ....内循环次数.... 1 60 ....内循环次数.... 2 61 ....内循环次数.... 3 62 ....内循环次数.... 4 63 ....内循环次数.... 5 64 ....内循环次数.... 6 65 *******外循环次数********** 8 66 ....内循环次数.... 0 67 ....内循环次数.... 1 68 ....内循环次数.... 2 69 ....内循环次数.... 3 70 ....内循环次数.... 4 71 ....内循环次数.... 5 72 ....内循环次数.... 6 73 *******外循环次数********** 9 74 ....内循环次数.... 0 75 ....内循环次数.... 1 76 ....内循环次数.... 2 77 ....内循环次数.... 3 78 ....内循环次数.... 4 79 ....内循环次数.... 5 80 ....内循环次数.... 6