赞
踩
单行注释 #
多行注释 ''' 注释内容 ''',支持换行 => 在实际工作中,主要用于实现函数说明文档
场景:保存数据,所以理论上有数据的地方都有变量!
变量名称 = 变量的值
注意:=日常生活中的=,在程序中并不是等于的意义,而是赋值运算符,其执行顺序比较特殊,由右向左进行运算。
重点:变量名称规则
==① 由数字、字母、下划线(_)组成==
==② 不能数字开头==
==③ 严格区分⼤小写==
==④ 不能使⽤内置关键字作为变量名称==
if/while/for/def/list/tuple...
技能:看到一个变量,100%能够知道它是否为合法变量名称!
变量输出 => print() => 函数
print(name)
print(age)
print(address)
print(name, age, address) # name age address显示的时候,两两之间都有一个空格
案例:两个变量值的交换
① 引入第三方变量
② 使用元组拆包a, b = b, a
变量一共有7种基本数据类型:==数值类型、布尔类型、字符串类型、列表、元组、字典、集合==
还可以强制分为两大类:可变数据类型 与 非可变数据类型
==列表、字典、集合==(可变数据类型)
==数值、布尔、字符串、元组==(不可变数据类型)
input() : 在实际工作中,主要用于接收数据
注意:① input()任何时候返回的数据类型都是str字符串
② input()方法具有代码阻塞功能(相当于给程序按了一个暂停键)
print()方法 => 格式化输出,把Python中的变量按照指定格式进行输出显示
① 百分号形式的格式化输出
%s :字符串
%d :整数
%f :浮点数
如果想在百分号格式化输出时,在输出一个%,则print('%%')
② .format()形式的格式化输出
③ f简写形式的格式化输出(后期使用推荐)
实际工作中,为什么需要数据类型转换?Python数据类型较多,经常需要进行相互转换操作。
int() :把其他数据类型转为int整数类型
float() :把其他数据类型转换为float浮点类型
str() :把其他数据类型转换为str字符串类型
eval() :把字符串转换为其他原数据类型(eval方法必须要发生类型转化,否则报错)
eval('[{}, {}, {}]') => list列表
list() : 把其他类型转换为列表类型
tuple() :把其他数据类型转换为tuple元组类型
set() :把其他数据类型转换为集合?因为集合可以天生去重
常见的类型转换 => input() => 字符串类型
简单来说,他们就是日常生活中的加减乘除操作
所谓的算数运算符就是我们日常生活中的加减乘除等待。
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 1 + 1 输出结果为 2 |
- | 减 | 1 - 1 输出结果为 0 |
* | 乘 | 2 * 2 输出结果为 4 |
/ | 除 | 10 / 2 输出结果为 5 |
// | 整除 | 9 // 4 输出结果为 2 |
% | 取余(取模) | 9 % 4 输出结果为 1 |
** | 幂指数 | 2 ** 4 输出结果为 16,即2的4次方,2 * 2 * 2 * 2 |
() | 小括号 | 小括号用来提高运算优先级,即 (1 + 2) * 3 输出结果为 9 |
%取模运算:数7游戏
数字变量 % 7 == 0 代表7的倍数
数字变量 % 10 == 7代表尾数7
**幂指数 => 优先级仅仅次于()小括号
只有一个符号,就是=,把右边的结果或表达式赋值给左边的变量
a = 10
b = 1 + 2
a = b = 1
a, b, c = 1, 2, 3
复合赋值运算符 = 算术运算符 结合 赋值运算符
把右边的值(先进行算数的结果)赋值给左边的变量
易错点:
左边不能是一个具体的值,必须是一个变量
先进行算数,然后把结果赋值给左边的变量,最后打印都要打印左边的变量
在实际工作中,i += 1或i += 2
特别注意:在Python代码中,没有++和--操作,i++,i--,++i,--i
返回布尔类型的数据(要么True,要么为False),主要配合if语句一起使用
and代表与:必须保证两边同时为True,则最终结果为True,反之,则返回False
or代表或:只要有一边结果为True,则最终结果为True,反之,则返回False
not非:取反,文件操作
content = f.readline()
if not content:
break
三大结构 + if嵌套
① 顺序结构 ② 选择结构(分支结构)③ 循环结构
if 条件判断: 缩进代码
if 条件判断: 缩进代码 else: 缩进代码
if 条件判断: 缩进代码 elif 条件判断: 缩进代码 elif 条件判断: 缩进代码 else: 缩进代码
角色:玩家player,电脑computer
if 玩家获胜条件:
玩家获胜
elif player == computer:
平局
else:
电脑获胜
新知识点:随机出拳 => 随机模块
import random random.randint(起始位置, 结束位置) # 随机,目前位置唯一一个包含头部也包含尾部函数
条件成立,返回左边内容 if 条件判断 else 条件不成立,则返回右边内容
让代码高效重复的执行,在Python中,循环主要有两种形式:① wihle循环 ② for循环
while循环:适合实现执行次数的循环
for循环:适合实现对数据容器的遍历操作,当前在代码层面for循环可以代替while循环
但是在性能方面,while循环要明显高于for循环
# 定义计数器 i = 0或i = 1 # 编写循环条件 while i < 100: # 开始编写自己要循环的代码 print('正在重复执行某个操作') # 在循环体内部更新计数器的值 i += 1
两者都可以退出循环,但是退出方式不同
break:强制中止整个循环结构
continue:中止本次循环,继而进入下一次循环
i = 1 sum = 0 while i <= 100: sum += i i += 1 i = 1 sum = 0 while i <= 100: if i % 2 == 0: sum += i i += 1 i = 1 sum = 0 while <= 100: sum += i i += 2 1 3 5 7 9
① 由于程序错误产生的,没有更新计数器,while...continue,continue前面没有进行更新计数器
② 人为构建死循环while True,但是while True本身没有意义,必须和input()语句结合
for循环主要用于实现对容器(字符串、列表、元组、字典、集合)的遍历操作
for 临时变量 in 数据容器: print(临时变量)
range(start, stop, step) : 只顾头不顾尾 range(1, 101, 1) : 返回容器,容器中包含[1-100]
遍历3次:
for i in range(3): # 0 1 2 print(i)
效果与while循环中break与continue完全一致的。
break:终止整个循环结构
continue:中止本次循环,继而进入下一次循环
无论是break还是continue都只能中止最近一次循环,如果是多层循环,只能中止一层
案例:用for循环实现用户登录
① 输入用户名和密码
② 判断用户名和密码是否正确(username='admin',password='admin888')
③ 登录仅有三次机会,超过3次会报错
简单版本:
for i in range(3): username = input('请输入您的用户名:') password = input('请输入您的密码:') if username == 'admin' and password = 'admin888': print('登录成功') break else: print('登录失败')
复杂版本:
trycount = 0 for i in range(3): trycount += 1 username = input('请输入您的用户名:') password = input('请输入您的密码:') if username = 'admin': if password == 'admin888': print('登录成功') break else: print('密码输入错误,请重新输入') print(f'您还剩余{3-trycount}次机会') else: print('用户名输入错误,请重新输入') print(f'您还剩余{3-trycount}次机会')
for i in 数据容器: ... else: ...
要说明:什么时候执行else结构
答:当循环正常结束以后,系统会自动执行else中的代码(只会执行1次)
什么是正常结束呢?
在整个循环过程中,没有遇到或者没有执行break。
学生管理系统中的判断:
name = input('请输入要删除同学的名称:') for i in students: if i['name'] == name: students.remove(i) break else: print('您要删除的同学不存在!')
字符串、列表、元组、字典以及集合
单引号或双引号
新知识点:三引号定义字符串(支持换行)
content = ''' 关关雎鸠, 在河之洲, 窈窕淑女, 君子好逑。 '''
字符串变量 = input()
print(name)
print(name, address)
格式化输出 => 百分号、format以及f简写形式
str1 = 'hello'
str1[索引编号] = h e l l o
索引下标 => 字符串、列表、元组,默认从0开始
len(字符串/列表/元组/集合) :求容器的长度
① 绘制图像(正索引、负索引、数据)
② 背口诀:切片其实很简单,只顾头来尾不管,步长为正正向移,步长为负则逆向移
记住一件事:到底从左向右数,还是从右向左数,重点看步长
numstr = '0123456789' # 1、从2到5开始切片,步长为1 print(numstr[2:5:1]) print(numstr[2:5]) # 2、只有结尾的字符串切片:代表从索引为0开始,截取到索引为5的位置(不包含索引为5的数据) print(numstr[:5]) # 3、只有开头的字符串切片:代表从起始位置开始,已知截取到字符串的结尾 print(numstr[1:]) # 4、获取或拷贝整个字符串 print(numstr[:]) # 5、调整步阶:类似求偶数 print(numstr[::2]) # 6、把步阶设置为负整数:类似字符串翻转 print(numstr[::-1]) # 7、起始位置与结束位置都是负数 print(numstr[-4:-1]) # 8、结束字符为负数,如截取012345678 print(numstr[:-1])
查找指定关键词:
find(),扩展:rfind()代表从左向右查找,查找关键词最后一次出现的位置,找到返回-1
字符串替换方法:
replace(旧关键词, 新关键词),由于字符串属于非可变数据类型,所以replace不会对原有字符串产生任何影响
split() : 把字符串切割成列表
join() :把一个数据容器(如列表)拼接为一个字符串
isdigit() :判断一个字符串是否全部由数字组成
user_num = input('请输入您的操作编号:')
if user_num.isdigit():
user_num = int(user_num)
列表名称 = [元素值1, 元素值2, 元素值3] list1 = ['apple', 'banana', 'pineapple'] # list列表类型支持直接打印 print(list1) # 打印列表的数据类型 print(type(list1)) # <class 'list'>
列表名称[索引下标] # 0, 1, 2, 3 print(列表名称) 遍历操作: i = 0 while i < len(列表名称): print(列表名称[i]) i += 1 for i in 列表名称: print(i)
① 添加数据,append()
② 删除数据,remove()根据值删除元素
③ 修改操作 => 列表名称[索引下标] = 值
④ 查询,查看遍历
in 判断指定数据在某个列表序列,如果在返回True,否则返回False
了解列表的嵌套:
[[], [], []]
演变为多种形式:学生管理系统[{}, {}, {}]
pyecharts数据可视化:[(), (), ()]
和列表类似,都可以用于保存多个数据。但是两者又有所不同,元组中的数据一旦定义就不能进行修改和删除了,起到保护数据的目的!
tuple1 = (1, )
tuple2 = (1, 2, 3, 4)
所以其方法主要是查询方法
编号 | 函数 | 作用 |
---|---|---|
1 | 元组[索引] | 根据==索引下标==查找元素 |
2 | len() | 统计元组中数据的个数 |
列表、元组的时候还给大家做过一个扩展:如何开发一个点名程序
字典适合数据的保存与查询操作,经常我们使用字典来保存一个事物的信息,如一个人、一本书、一个商品信息
person = {key:value, key:value, key:value} 注意:字典中key必须是唯一的,但是value值可以重复。
字典变量 = {} 或 字典变量 = dict() 有数据的变量 = {key:value, key:value} 如果key是字符串类型,必须使用引号引起来 key可以是很多种数据类型、数值类型(相同值算同一个key)、字符串类型、布尔类型、元组类型
① 增加与修改操作
字典名称[key] = value
② 删除操作
del 字典名称[key]
注意:删除的是一个key:value键值对
③ 查询数据
print(字典名称[key])
编号 | 函数 | 作用 |
---|---|---|
1 | keys() | 以类列表返回一个字典所有的键 |
2 | values() | 以类列表返回字典中的所有值 |
3 | items() | 以类列表返回可遍历的(键, 值) 元组数据 |
主要实现了添加与查询功能
集合是一组数据的集合内容,天生去重(无序)
set1 = set() set2 = {1, 2, 3, 4, 5}
set1.add(数据)
set1.pop() :随机删除
set2.remove() :根据提供的参数删除元素
in与not...in :判断集合中是否存在这个元素
所谓的公共方法就是支持大部分数据序列。
运算符 | 描述 |
---|---|
+ | 合并 |
* | 复制 |
in | 元素是否存在 |
not in | 元素是否不存在 |
max() | 返回容器中的最大值 |
min() | 返回容器中的最小值 |
str1 = 'hello'
str2 = 'world'
print(str1 + str2)
print('-' * 40)
max(数据容器)
min(数据容器)
list()方法:把某个序列类型的数据转化为列表
# 1、定义元组类型的序列 tuple1 = (10, 20, 30) print(list(tuple1)) # 2、定义一个集合类型的序列 set1 = {'a', 'b', 'c', 'd'} print(list(set1))
tuple()方法:把某个序列类型的数据转化为元组
# 1、定义一个列表类型的数据 list1 = ['a', 'b', 'c', 'd'] print(tuple(list1)) # 2、定义一个集合类型的数据 set1 = {10, 20, 30, 40} print(tuple(set1))
set()方法:将某个序列转换成集合(但是要注意两件事 => ① 集合可以快速完成列表去重 ② 集合不支持下标)
# 1、定义一个列表类型的数据 list1 = ['a', 'b', 'c', 'd', 'a'] print(set(list1)) # 2、定义一个元组类型的数据 tuple1 = (10, 20, 30, 40) print(set(tuple1))
① 代码重用
② 模块化编程(学生管理系统)
函数时一个被命名的、独立的、完成特定功能的一段连续的代码,并可能给调用它的程序一个返回值。
def 函数名称(参数列表): 函数体代码 return 返回值 在函数定义时,其代码并没有真正的执行,只有在函数调用时代码才真正的被执行。 调用函数: 函数名称(参数)
① 在一个函数中,可以同时拥有多个返回值,但是只有第一个返回值会起作用
return 1
return 2
函数一旦遇到了return,则会自动结束。返回return后面的结果
② 在Python中,函数允许同时返回多个结果,如return 1, 2, 3 , 这个结果通常是一个元组形式
其实拆包不仅可以用于元组,还可以用于列表与字典。
a, b = (1, 2)
实现两个变量值的交换!
def func(): ''' 编写函数功能 @param1 第一个参数 @param2 第二个参数 @return 返回值 ''' return 返回值 help(func) Ctrl + Q
案例1:
''' 编写一个函数,有一个参数str1,输入信息如'1.2.3.4.5',使用函数对其进行处理,要求最终的返回结果为'5-4-3-2-1' ''' def func(str1): str2 = str1[::-1] return str2.replace('.', '-') print(func('1.2.3.4.5'))
案例2:生成4位长度验证码
''' 定义一个函数,用于生成4位长度的验证码。 升级 定义一个函数,用于生成指定长度的验证码。 ''' def func(num): # 定义一个字符串 str1 = '23456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ' code = '' # 从字符串中通过随机索引选择一个元素 import random # 循环4次 for i in range(num): randnum = random.randint(0, len(str1) - 1) code += str1[randnum] # '' => 'a' => '6' => 'J' => 'X' => a6JX return code print(func(4))
# 全局作用域 def func(): # 局部作用域
局部变量与全局变量
在Python中,定义在函数外部的变量就称之为全局变量;定义在函数内部变量就称之为局部变量。
# 定义在函数外部的变量(全局变量) num = 10 # 定义一个函数 def func(): # 函数体代码 # 定义在函数内部的变量(局部变量) num = 100
全局变量既可以在全局访问也可以在局部访问
局部变量只能在函数内部(局部作用域中访问),不能在全局作用域中访问
# 定义一个函数 def func(): # 在函数内部定义一个局部变量 num = 10 print(f'在局部作用域中调用num局部变量:{num}') # 调用func函数 func() # 在全局作用域中调用num局部变量 print(f'在全局作用域中调用num局部变量:{num}')
思考一个问题:我们能不能在局部作用域中对全局变量(非可变数据类型)进行修改呢?
# 定义全局变量num = 10 num = 10 # 定义一个函数func def func(): # 尝试在局部作用域中修改全局变量 num = 20 # 调用函数func func() # 尝试访问全局变量num print(num) # 10
函数内部的局部变量即使和函数外部的全局变量同名,也不会对其产生任何影响。因为全局和局部独立的,内部的局部影响不到全局。
添加global关键字,相当于声明全局变量,代表从这以后,我们使用的这个变量就是全局变量。
# 定义全局变量num = 10 num = 10 # 定义一个函数func def func(): # 尝试在局部作用域中修改全局变量 global num num = 20 # 调用函数func func() # 尝试访问全局变量num print(num)
在函数定义与调用时,我们可以根据自己的需求来实现参数的传递。在Python中,函数的参数一共有两种形式:① 形参 ② 实参
==形参:在函数定义时,所编写的参数就称之为形式参数==
==实参:在函数调用时,所传递的参数就称之为实际参数==
① 函数调用时参数可以划分为两种调用形式:位置参数 + 关键词参数
def func(num1, num2, num3):
pass
位置参数:
func(1, 2, 3)
关键词参数:
func(num1=1, num2=2, num3=3)
如果位置参数与关键词参数同时出现,则位置参数必须放左边,关键词参数必须放右边
② 参数的默认值
def func(name, age, gender='male'): pass 普通参数, 默认值参数 func('Tom', 23) func('Harry', 19, 'female')
③ 不定长参数(变化参数)
*args :固定语法,不定长位置参数(返回结果是一个元组) **kwargs :固定语法,不定长关键词参数(返回结果是一个字典) args 和 kwargs:变量
func()
func(1, 2)
func(1, 2, 3)
不定长参数案例:
''' *args :固定语法,不定长位置参数(返回结果是一个元组) **kwargs :固定语法,不定长关键词参数(返回结果是一个字典) 可以配合在一起使用,但是*args必须放前面,**kwargs必须放后面 ''' # 要求编写一个函数求出1+2+3+4+5的结果 def func(*args, **kwargs): sum = 0 for i in args: sum += i for v in kwargs.values(): sum += v print(sum) list1 = [1, 2, 3] dict1 = {'a':4, 'b':5} func(*list1, **dict1)
如果多个参数混用,有顺序要求:
def func(① 普通参数 ② *args ③ 默认值参数 ④ **kwargs):
pass
可变类型:列表、字典、集合
非可变类型:数值、布尔类型、字符串类型、元组
内存地址一旦固定,其值就不能发生改变了。
内存地址一旦固定,其值是可以发生改变的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。