python学习day01
# 一、python介绍
1.python简介
Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。
主要特点:
1.面向过程,面向对象
2.语法简单,易学易用
3.模块丰富,功能强大
4.跨平台,具有可移植性
5.具有很好的扩展性
简单、易学、免费开源、高层语言、可移植性、解释性、面向对象、可扩展性、可嵌入型、丰富的库
2.编译器与解释器
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。
解释器种类
cpython解释器(*) jpython解释器 ironPython解释器 rubyPyhton解释器 ..... pypy解释器
3.python版本
python的版本分为2系列和3系列,目前使用最多的是3系列。
核心区别
1.Python3对Unicode字符的原生支持
Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3只支持unicode的string。python2和python3字节和字符对应关系为:
Python2中编码需要在脚本中说明是utf-8,而Python3中默认使用utf-8
print语句被python3废弃,统一使用print函数
2.Python3采用的是绝对路径的方式进行import。
Python2中相对路径的import会导致标准库导入变得困难(想象一下,同一目录下有file.py,如何同时导入这个文件和标准库file)。Python3中这一点将被修改,如果还需要导入同一目录的文件必须使用绝对路径,否则只能使用相关导入的方式来进行导入。
3.Python2中存在老式类和新式类的区别,Python3统一采用新式类。新式类声明要求继承object,必须用新式类应用多重继承。
4.Python3使用更加严格的缩进。Python2的缩进机制中,1个tab和8个space是等价的,所以在缩进中可以同时允许tab和space在代码中共存。这种等价机制会导致部分IDE使用存在问题。Python3中1个tab只能找另外一个tab替代,因此tab和space共存会导致报错:TabError: inconsistent use of tabs and spaces in indentation.
4.字节码 vs. 机器码
了解字节码和机器码(或者native code)的区别是很重要的,最好的办法或许是看看例子:
- C代码被编译成机器码,将在处理器上直接执行。每一条指令控制CPU工作。
- Java代码被编译成字节码,将在Java虚拟机(JVM)这个抽象的计算机上执行。每一条指令由JVM处理,JVM同计算机本身之间交互。
简而言之:机器码快的多,但字节码更易迁移,也更安全。
机器码随机器的变化而变化,但字节码在所有的机器上都是一样的。有人可能会认为机器码是对特定环境优化了的。
回到CPython,工具链的执行过程如下:
- CPython编译你的Python源代码,生成字节码。
- 字节码随后在CPython虚拟机上执行。
二、python安装
1.官网下载安装包
https://www.python.org/ftp/python/3.6.5/python-3.6.5.exe
三、输入输出
输入:
1 print("欢迎访问我的博客") 2 结果: 3 欢迎访问我的博客
输出:
1 input("请输入你最爱的博主:") 2 结果: 3 请输入你最爱的博主:生哥
完整代码:
1 print("欢迎访问我的博客!") 2 bozhu = input("请输入你最爱的博主:") 3 print(bozhu) 4 结果显示: 5 欢迎访问我的博客! 6 请输入你最爱的博主:生哥 7 生哥
四、变量
变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。
基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
变量赋值
Python 中的变量赋值不需要类型声明。
每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
例如
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 name = "生哥" 4 age = 22 5 job = "python" 6 print(name) 7 print(age) 8 print(job) 9 print(type(name)) 10 print(type(job)) 11 print(type(age))
结果
1 生哥 2 22 3 python 4 <class 'str'> 5 <class 'str'> 6 <class 'int'>
变量命名规则
1. 变量名的长度不受限制,但其中的字符必须是字母、数字、或者下划线(_),而不能使用空格、连字符、标点符号、引号或其他字符。
2. 变量名的第一个字符不能是数字,而必须是字母或下划线。
3. Python区分大小写。
4. 不能将Python关键字用作变量名
例如:
1 name = "生哥" 2 age = 22 3 job = "python" 4 print(name) 5 print(age) 6 print(job)
五、数据类型
字符串(String)
Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠(\)转义特殊字符。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 name = "shengge" 4 print(name) 5 print(name[0]) 6 print(name[0:2]) 7 print(name[6]) 8 print(name + name)
执行结果
1 shengge 2 s 3 sh 4 e 5 shenggeshengge
整数(int)
整数类型定义的时候变量名后面直接跟数字,数字类型是不可变数据类型
>>> age = 20 >>> type(age) <class 'int'> >>>
列表(list)
列表是常见的数据类型,用中括号[]定义,可以存多个任意类似的值,列表和字符串一样都是有序排列的,可以用切片和索引的方式访问数据,并且列表是可变数据类型。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 lis = ["user","name","root","admin"] 4 print(lis) 5 name = "adminroot" 6 li = list(name) 7 print(li)
执行结果
1 ['user', 'name', 'root', 'admin'] 2 ['a', 'd', 'm', 'i', 'n', 'r', 'o', 'o', 't']
根据索引和切片切片输出
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 lis = ["user","name","root","admin"] 4 print(lis) 5 print(lis[0]) 6 print(lis[1:3]) 7 print(lis[3:]) 8 print(lis[0:3:2])
执行结果
1 ['user', 'name', 'root', 'admin'] 2 user 3 ['name', 'root'] 4 ['admin'] 5 ['user', 'root']
字典
字典是一种映射型的数据类型,每个元素成对出现,即key- value,每对元素key 和 value“:”冒号分开,元素之间用逗号隔开,整个字典包括子在{}中。
字典中的“key”必须是不可变类型,“value”则可以是任意类型,如果出现一个“key”被多个“value”赋值,那么值为最后一个被赋的值,字典是可变数据类型,并且是无序的。所有不可变的数据类型都可以作为字典中的key,例如数字,字符串,元祖。字典的基本操作包括 创建,增加,删除,修改,查找,遍历,更新,in or not in 等。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 user = {'name': '123', 'age': '123', 'sex': '123'} 4 print(user) 5 print(user['name']) 6 print(user['age']) 7 print(user['sex'])
执行结果
{'name': '123', 'age': '123', 'sex': '123'} 123 123 123
六、条件控制
if语句
- 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
- 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
列表是常见的数据类型,用中括号[]定义,可以存多个任意类似的值,列表和字符串一样都是有序排列的,可以用切片和索引的方式访问数据,并且列表是可变数据类型。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 print("欢迎进入猜狗狗年龄程序!") 4 age = int(input("请输入你家狗狗的年龄: ")) 5 print("") 6 if age < 0: 7 print("你是在逗我吧!") 8 elif age == 1: 9 print("相当于 14 岁的人。") 10 elif age == 2: 11 print("相当于 22 岁的人。") 12 elif age > 2: 13 human = 22 + (age -2)*5 14 print("对应人类年龄: ", human) 15 ### 退出提示 16 input("点击 Enter 键退出")
执行结果
1 欢迎进入猜狗狗年龄程序! 2 请输入你家狗狗的年龄: 22 3 对应人类年龄: 122 4 点击 Enter 键退出
if嵌套
if 表达式1: 语句 if 表达式2: 语句 elif 表达式3: 语句 else: 语句 elif 表达式4: 语句 else: 语句
实例
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #10086提醒 4 print("欢迎使用10086服务") 5 msg = """ 6 1.查询话费 7 2.查询流量 8 3.人工服务 9 """ 10 print(msg) 11 choice = input("请选择需要的服务:") 12 if choice == "1": 13 print("1.查询本机:2.查询消费:3.查询账本:") 14 se_type = input("请输入查询类型:") 15 if se_type == "1": 16 print("查询本机") 17 elif se_type == "2": 18 print("查询消费") 19 elif se_type == "3": 20 print("查询账本") 21 else: 22 print("查询类型无效") 23 elif choice == "2": 24 print("1.查询总流量:2.查询剩余流量:3.查询使用流量:") 25 se_type = input("请输入查询类型:") 26 if se_type == "1": 27 print("查询总流量") 28 elif se_type == "2": 29 print("查询剩余流量") 30 elif se_type == "3": 31 print("查询使用流量") 32 else: 33 print("查询类型无效") 34 elif choice == "3": 35 print("人工服务") 36 else: 37 print("输入无效")
七、循环
Python中有两种循环,分别为:for循环和while循环。
for循环
for循环语句是python中的一个循环控制语句,任何有序的序列对象内的元素都可以遍历,比如字符串、列表List、元组等可迭代对像。
语法格式:
for <val> in <序列>: <循环体>
val 是一个变量,在每次迭代中,用于接收将序列中元素的值。
循环会一直继续,直到到达序列的最后一项。循环体与其余的代码使用缩进分隔。
流程图:
实例
#!/usr/bin/env python # -*- coding:utf-8 -*- for letter in 'Jay': print('当前字母:', letter) songs = ['安静', '蜗牛', '稻香'] for song in songs: print('正在播放:', song)
执行结果:
1 当前字母: J 2 当前字母: a 3 当前字母: y 4 正在播放: 安静 5 正在播放: 蜗牛 6 正在播放: 稻香
while循环
语法格式:
1 while <判断条件>: 2 <循环体>
进入 while 循环,首先检测判断条件,只有当其为 True 时,才会进入循环体。一次迭代后,再次检测判断条件,此过程一直持续到判断条件为 False。
和 for 循环一样,while 的循环体也通过缩进来确定。
流程图:
实例
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 i = 0 4 while i < 5: 5 print('正在播放:牧马城市') 6 i += 1
执行结果
正在播放:牧马城市 正在播放:牧马城市 正在播放:牧马城市 正在播放:牧马城市 正在播放:牧马城市
break语句
continue语句
#!/usr/bin/env python # -*- coding:utf-8 -*- user_list = [ {"username":"kk","passwd":"123","num":0}, {"username":"ks","passwd":"123","num":0}, {"username":"kw","passwd":"123","num":0}, {"username":"pp","passwd":"123","num":0} ] user_nam = input("请输入用户名:") user_pwd = input("请输入密码:") flag = False for i in user_list: if i["username"] == user_nam and i["passwd"] == user_pwd : # print("登录成功") flag = True break else: pass if flag: print("登录成功") else: print("登录失败")
八、练习题
1、求1-100的所有数的和
1 num = 1 2 sum_num = 0 3 while num < 101: 4 sum_num = sum_num + num 5 num += 1 6 print(sum_num)
2、输出 1-100 内的所有奇数
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 num = 1 4 while num <100: 5 if num%2 == 1: 6 print(num) 7 num += 1
3、输出 1-100 内的所有偶数
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 num = 1 4 while num <101: 5 if num%2 == 0: 6 print(num) 7 num += 1
4、求1-2+3-4+5 ... 99的所有数的和
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 sum = 0 4 for num in range(100): #range函数,默认从0开始跳跃间隔默认为1 5 if num%2 == 0: 6 sum = sum - num 7 else: 8 sum = sum + num 9 print(sum) 10 11 sum = 0 12 num = 1 13 while num < 100: 14 if num%2 == 0: #如果取余=0说明是奇数,那么进行减法动作, 15 sum = sum - num 16 else: #取余!=0说明是偶数,那么进行加法动作 17 sum = sum + num 18 num += 1 19 print(sum)
5、用户登录(三次错误机会)
#!/usr/bin/env python # -*- coding:utf-8 -*- print("欢迎使用用户登录程序,你可以尝试登录三次哦!") user = "ljs" pwd = "ljs" num = 1 while num < 4: user_name = input("请输入用户名:") user_pwd = input("请输入密码:") if user_name == user and user_pwd == pwd: print("登录成功!") break else: print("请重新输入!") continue