开发第一个Python程序
Pycharm编写程序
-
打开 Pycharm,选择 Create New Project,创建一个新项目
-
设置Python项目存放目录 同时选择要使用的解释器版本 点击Create
-
右键项目, 选择New, 再选择Python File 创建Python文件
-
点击完Python File后 在弹框中输入Python文件名后回车创建Python文件成功
-
显示01-第一个Python程序.py后表明文件创建成功,在右侧空白区输入代码后再右键点击Run运行程序代码
-
运行成功后,Pycharm Console窗口将显示我们的输出结果
注释
注释的作用
注释:在程序代码中对程序代码进行解释说明的文字。
作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够
大大增强程序的可读性。
注释的分类
单行注释:以 #开头,#右边 的所有文字当作说明,而不是真正要执行的程序,起辅助说明作用
多行注释: 以 三对引号 引起来 (“”" 解释说明 “””)来解释说明一段代码的作用使用方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/74d3d2ce0aa84ddfaa4706d2b5eb7545.png)
总结:
注释: 对代码起到解释说明的作用
单行注释: 以# 为开头
多行注释: 以三对引号括起来
变量以及类型
变量:
① 变量是存储数据的容器
② 变量在程序运行过程中是可以发生改变的量
③ 变量存储的数据是临时的
变量的定义
注意:
=等号两边都要保留一个空格 !变量名可以自定义,但是要满⾜标识符
命名规则。
变量的类型
注意:
布尔类型: 除了True和False以外 0可以用来表示假 任何非0的数据都可以表示真 即非0即为真
字符串类型: “双引号” ’单引号’ 都可以用来表示字符串 甚至 ”””三引号 ”””也是字符串
总结:
- 变量
就是用来存储数据的 - 变量类型
int 有符号整形
float 浮点型
bool 布尔类型
string 字符串类型 - type函数
可以查看变量的类型
标识符和关键字
标识符命名规则
- 见名知意
name = 张三
- 由字母、下划线和数字组成,且数字不能开头
my_Boolean 2ndObj
- 区分大小写的
关键字
- 不能和关键字重复
Python中的关键字
驼峰命名法
小驼峰式命名法(lower camel case)
第一个单词以小写字母开始,第二个单词的首字母大写
例如:myName
大驼峰式命名法(upper camel case)
每一个单字的首字母都采用大写字母
例如:FirstName
下划线
用下划线“_”来连接所有的单词
例如:send_buf
总结:
-
标识符命名规则
见名知意
由字母、下划线和数字组成,且数字不能开头
区分大小写
不能与关键字重复 -
关键字
import keyword -
小驼峰式命名法: myName
大驼峰式命名法: FirstName
下划线: send_buf
输出
print输出函数
格式化输出
格式化输出干什么的?
print("我今年10岁")
print("我今年11岁")
print("我今年12岁")
输出的内容根据age的变化而变化
age = 10
print("我今年%d岁" % age)
Q:在输出年龄的时候,用了多次"我今年xx岁",能否简化一下程序呢???
A:字符串格式化
- 格式化输出可以更灵活的进行输出
age = 18
name = "传智"
print("我的姓名是%s, 年龄是%d" % (name, age))
常用的格式符号
总结:
print函数
自带换行
消除换行: print(“传”, end=“”)
-
格式化输出
print(“我的姓名是%s, 年龄是%d” % (name, age)) -
常用的格式符号
%s 字符串(string)
%d 无符号整形(int)
%f 浮点型(float)
输入
获取键盘输入的数据的方法是采用 input 函数
password = input("请输入密码:")
print('您刚刚输入的密码是:%d' % password)
input函数的注意点:
- input()的小括号中放入的是,提示信息,用来在获取数据之前给用户的一个简单提示
- input()在从键盘获取了数据以后,会存放到等号右边的变量中
- input()会把用户输入的任何值都作为字符串来对待
总结:
-
input()的小括号中放入的是,提示信息,用来在获取数据之前
给用户的一个简单提示 -
input()在从键盘获取了数据以后,会存放到等号右边的变量中
-
input()会把用户输入的任何值都作为字符串来对待
运算符
算术运算符
赋值运算符
复合赋值运算符
数据类型转化
常见的数据类型转化
循环语句
while循环
注意点:
设置终止条件,否则会产生死循环
while循环应用: 1~100的求和
需求:计算1~100的累加和(包含1和100)
分析:
需求:计算1~100之间偶数的累加和(包含1和100)
分析:
while嵌套循环以及运用
- while嵌套循环基本格式
- while嵌套循环的应用
要求:打印如下图形:
要求:打印如下图形:
for循环
- for循环基本格式
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码
- for循环和while循环的区别:
相同点:(功能完成上)
while循环可以完成的功能for循环基本都可以实现, for循环可以完成的功能while循环基本也都可以实现.
不同点:(选择使用上)
for循环往往用在遍历 字符串 列表等
while循环往往用在重复多次运行上
- for的应用
- 遍历字符串
定义字符串name name = ”itheima”
遍历字符串 for x in name:
print(x)
定义字符串name name = ”hello” 遍历字符串
print(x) if x == 'l’: print("Hello world!") ```
range(5)表示可以循环5次, 同时i可以获取0~4的数值
for i in range(5):
print(i)效果等同于 while 循环的:
i = 0
while i < 5:
print(i)
i += 1
总结:
for循环:
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码
注意点:
临时变量只在for循环内部使用, 不在for循环外部使用
循环中断 : break和continue
break的作用:
立刻结束break所在的循环
continue的作用:
用来结束本次循环,紧接着执行
下一次的循环
总结:
break的作用:
立刻结束break所在的循环
continue的作用:
用来结束本次循环,紧接着执行下一次的循环
注意点:
break/continue只能用在循环中,除此以外不能单独使用
break/continue在嵌套循环中,只对最近的一层循环起作用
判断语句和循环语句
If语句的基本格式
比较和逻辑运算符
比较运算符
逻辑运算符
If…else…语句
If…elif…else语句
If嵌套语句
案例:石头剪刀布
Python数据容器
容器介绍
Python中常见容器有如下几种:
①字符串
②列表
③元组
④字典
字符串介绍
字符串下标和切片
字符串常用操作方法
列表介绍
列表的遍历
列表常用操作方法
元组及其应用场景
字典的定义及其应用场景
集合的定义及其应用场景
数据序列的公共方法
列表集合字典推导式
Python函数
函数介绍
总结:
- 函数的作用: 对代码进行封装, 进而提高代码的复用率
- 函数使用步骤:
先定义函数
后调用函数
函数说明文档
函数的参数
总结:
- 定义时小括号中的参数,用来接收参数用的,称为 “形参”
- 调用时小括号中的参数,用来传递给函数用的,称为 “实参”
函数的返回值
函数的嵌套调用
函数的应用
变量的作用域
总结:
- 局部变量: 就是在函数内部定义的变量
其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
- 全局变量: 如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量, 这样的变量一般在函数外部定义
在函数外边定义的变量叫做全局变量
全局变量能够在所有的函数中进行访问
多函数程序执行流程
Python函数进阶
函数返回多个返回值
函数的多种参数
使用方式上的不同, 函数有4中常见参数:
位置参数
关键字参数
不定长参数
缺省参数
-
位置参数:调用函数时根据函数定义的参数位置来传递参数
注意:
传递的参数和定义的参数的顺序及个数必须一致 -
关键字参数:函数调用时通过“键=值”形式传递参数.
作用: 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求.
注意:
函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序 -
缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).
作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.
注意:
函数调用时,如果为缺省参数传值则修改默认参数值, 否则使用这个默认值 -
不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
作用: 当调用函数时不确定参数个数时, 可以使用不定长参数
不定长参数的类型:
①位置传递
②关键字传递
位置传递
注意:
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递关键字传递
注意:
参数是“键=值”形式的形式的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典.
总结:
-
掌握位置参数
·根据参数位置来传递参数 -
掌握关键字参数
·通过“键=值”形式传递参数 -
掌握缺省参数
·不传递参数值时会使用默认的参数值 -
掌握不定长参数
· 位置传递 args 元组的形式接受参数
· 关键字传递 kwargs 字典的形式接受参数
拆包
拆包: 对于函数中的多个返回数据, 去掉元组, 列表 或者字典 直接获取里面数据的过程
对元组拆包:
一个元组中有多个元素, 当我们想要获取元组中的每一个元素的时候就可以使用拆包获取
对函数的多个函数值拆包: 当函数有多个返回值的时候, 返回值会组成一个元组
对列表拆包:
对字典拆包:
对字典拆包的时候, 这里的ret1, ret2获取的是字典的key值. 也就是 ’name’ 和 ’age’
- 变量数值交换
拆包应用除了获取各种容器中的元素外, 还可以使用在变量的数值交换上
需求:有变量a = 10和b = 20,交换两个变量的值
方法一
借助第三变量存储数据
# 1. 定义中间变量
c = 0
# 2. 将a的数据存储到c
c = a
# 3. 将b的数据20赋值到a,此时a = 20
a = b
# 4. 将之前c的数据10赋值到b,此时b = 10
b = c print(a) # 20
print(b) # 10
需求:有变量a = 10和b = 20,交换两个变量的值
方法二
拆包
a, b = 1, 2
a, b = b, a
print(a) # 2
print(b) # 1
引用
Python中在使用 “=” 进行赋值传递的时候传递的是地址, 也就是引用传递
- 函数参数的引用传递
- 可变类型与不可变类型
所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
可变类型
列表 字典 集合不可变类型
整型 浮点型 字符串 元组
匿名函数
Python文件操作
在日常生活中,文件操作主要包括打开、关闭、读、写、备份等操作。
文件操作概述
文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
文件的基本操作
想想我们平常对文件的基本操作,大概可以分为三个步骤(简称文件操作三步走):
① 打开文件
② 读写文件
③ 关闭文件
注意:可以只打开和关闭文件,不进行任何读写
open()打开函数
mode访问模式详解
读操作相关方法
close()关闭函数
写操作快速入门
# 1. 打开文件
f = open('python.txt', 'w')
# 2.文件写入
f.write('hello world')
# 3. 关闭文件
f.close()
注意:
w模式和a模式:如果文件不存在则创建该文件;如果文件存在,w模式先清空再写入,a模式直接末尾追加。
r模式:如果文件不存在则报错。
Python异常、模块与包
了解异常
当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”, 也就是我们常说的BUG
异常演示
例如:以r
方式打开一个不存在的文件。
f = open('linux.txt', 'r')
执行结果:
异常的捕获方法
- 捕获常规异常
基本语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
快速入门
需求:尝试以r
模式打开文件,如果文件不存在,则以w
方式打开。
try:
f = open('linux.txt', 'r')
except:
f = open('linux.txt', 'w')
- 捕获指定异常
基本语法:
try:
print(name)
except NameError:
print('name变量名称未定义错误')
注意:
① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
② 一般try下方只放一行尝试执行的代码。
- 捕获多个异常
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。
try:
print(1/0)
except (NameError, ZeroDivisionError):
print('ZeroDivision错误...')
执行结果:
- 捕获异常并输出描述信息
基本语法:
try:
print(num)
except (NameError, ZeroDivisionError) as e:
print(e)
执行结果:
- 捕获所有异常
基本语法:
try:
print(name)
except Exception as e:
print(e)
执行结果:
- 异常else
else表示的是如果没有异常要执行的代码。
try:
print(1)
except Exception as e:
print(e)
else:
print('我是else,是没有异常的时候执行的代码')
执行结果:
- 异常的finally
finally表示的是无论是否异常都要执行的代码,例如关闭文件。
try:
f = open('test.txt', 'r')
except Exception as e:
f = open('test.txt', 'w')
else:
print('没有异常,真开心')
finally:
f.close()
异常的传递
异常是具有传递性的
当函数func01中发生异常, 并且没有捕获处理这个异常的时候, 异常
会传递到函数func02, 当func02也没有捕获处理这个异常的时候
main函数会捕获这个异常, 这就是异常的传递性.
提示:
当所有函数都没有捕获异常的时候, 程序就会报错
Python模块
什么是模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾. 模块能定义函数,类和变量,模块里也能包含可执行的代码.
模块的作用:
python中有很多各种不同的模块, 每一个模块都可以帮助我们快速的实现一些功能,
比如实现和时间相关的功能就可以使用time模块. 我们可以认为一个模块就是一个工具包,
每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能.
模块在使用前需要先导入
导入的方式如下:
import 模块名
from 模块名 import 功能名
from 模块名 import *
import 模块名as 别名
from 模块名 import 功能名 as 别名
- import模块名
基本语法:
import 模块名
import 模块名1,模块名2
模块名.功能名()
案例:导入time模块
# 导入时间模块
import time
print("开始")
# 让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")
- from 模块名 import 功能名
基本语法:
from 模块名 import 功能名
功能名()
案例:导入time模块中的sleep方法
# 导入时间模块中的sleep方法
from time import sleep
print("开始")
# 让程序睡眠1秒(阻塞)
sleep(1)
print("结束")
- from 模块名 import *
基本语法:
from 模块名 import *
功能名()
案例:导入time模块中所有的方法
# 导入时间模块中所有的方法
from time import *
print("开始")
# 让程序睡眠1秒(阻塞)
sleep(1)
print("结束")
- as定义别名
基本语法:
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
案例:
# 模块别名
import time as tt
tt.sleep(2)
print('hello')
# 功能别名
from time import sleep as sl
sl(2)
print('hello')
- 自定义模块
制作自定义模块
Python中已经帮我们实现了很多的模块. 不过有时候我们需要一些个性化的模块, 这里就可以通过自定义模块实现, 也就是自己制作一个模块
案例:新建一个Python文件,命名为my_module1.py,并定义test函数
注意:
每个Python文件都可以作为一个模块,模块的名字就是文件的名字. 也就是说自定义模块名必须要符合标识符命名规则
测试模块
在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,
这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码test(1,1)
def test(a, b):
print(a + b)
test(1, 1)
问题:
此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行test
函数的调用
解决方案:
def test(a, b):
print(a + b)
# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == '__main__':
test (1, 1)
all
如果一个模块文件中有__all__
变量,当使用from xxx import *
导入时,只能导入这个列表中的元素
Python包
什么是Python包
从物理上看,包就是一个文件夹,在该文件夹下包含了一个 init.py 文件,该文件夹可用于包含多个模块文件
从逻辑上看,包的本质依然是模块
包的作用:
当我们的模块文件越来越多时,包可以帮助我们管理这些模块, 包的作用就是包含多个模块,但包的本质依然是模块
快速入门
步骤如下:
① 新建包my_package
② 新建包内模块:my_module1
和 my_module2
③ 模块内代码如下
Pycharm中的基本步骤:
注意:新建包后,包内部会自动创建__init__.py
文件,这个文件控制着包的导入行为
导入包
方式一:
import 包名.模块名
包名.模块名.目标
方式二:
注意:必须在__init__.py
文件中添加__all__ = []
,控制允许导入的模块列表
from 包名 import *
模块名.目标
总结:
导入模块方法
import 模块名
from 模块名 import 目标
from 模块名 import *
导入包
import 包名.模块名
from 包名 import *
all = [] :允许导入的模块或功能列表