1 基础知识点
单行注释 : # (快捷键ctrl +/)
多行注释 : 三对双引号或三对单
出现PEP8只是代码规范问题,使用ctrl alt L自动格式化代码
1.变量
1>变量必须先定义(保存数据)后使用(取出数据)
2>变量名规范 : 由字母(区分大小写)数字下划线组成,不能以数字开头和使用关键字
变量名 = 数据值 #定义变量,数据保存到变量中,可直接使用变量名
name = '张三' #示例:定义一个变量name,存储数值为张三
print(name) #张三
print('name') #输出引号中的内容,是name
# 加引号则当前值不可更改
age = '18+1' #输出18+1
age1 = 18+1 #输出19
3>数据类型 整型(int) 浮点型(float) 布尔(bool),TF大写, 字符串(str) 列表[list] 元组(tuple) 字典{dict} 函数type(变量)获取变量的数据类型.
2.输入input
变量 = input(" ") #用户使用键盘录入的内容,输入类型为字符串
变量 = 要转变的类型(原数据) #确定数据原来类型以及要转换成的类型,不改变原类型,生成新的数据类型
age = input("请输入年龄")
age1 = int(age) #将转换后的age定义为age1
print(type(age1),type(age),age) #输出结果:<class 'int'> <class 'str'> 123
这些有些小问题需要补充!!!转换
str() 任意类型
int() 文字类和小数类字符串(例3.1)不能转换,浮点数或者整数类型字符串可以
#这里如果赋值给变量,会正常输出
age = 3.14
age1=int(age)
print(type(age1),type(age))
print(age1,age)
-------输出结果----------------
<class 'int'> <class 'float'>
3 3.14
-------------------------------
age = input("请输入年龄:")
age1=int(float(age)) #注意!!! input输入都是str类型,不能直接转为int
float() 文字类无法转换成整数,整数或数字类型字符转换成浮点数,末尾为.0
3.输出print
%f(浮点型数据) %s(字符串) %%(出%)
name ='小明'
age=18
height=1.71
stu_num = 1
print('我的学号是:%06d'%stu_num) #%0nd n表示占位数
print('成绩及格率是:%d%%'%stu_num) #%%才是输出%
1> % (变量)格式输出对应数据,字符串和变量之间用%连接
print('我的名字是 %s, 年龄是 %d, 身高是 %.2fm' % (name,age,height))
2> f{变量}格式输出,需加:
print(f'我的名字是{
name}, 年龄是 {
age}, 身高是{
height:.3f} m,学号{
stu_num:06d},本次考试及格率为{
stu_num}%')
3> 格式 '{ },{ },... '.format(变量,变量..)
print('我的名字是{}, 年龄是 {}, 身高是{:.3f}m,学号{:06d},本次考试及格率为{}%'.format(name,age,height,stu_num,stu_num))
运算符
注意:/得到的是浮点类型 //是求商 %求余数 **是求幂
优先级() > */ // % > + -
(优先级和其他运算符随用随查注意区分and和&)
4.判断语句 if elif else
注:条件成立时,缩进范围内的会执行,if else之间不能有顶格书写的代码
if 判断条件: #if后有空格,代码需tab缩进
条件成立的代码
else:
不成立代码
#示例 input获取年龄,判断是否满足18岁,满足输出语句
age = input("请输入年龄:")
if int(age)>18:
print('满18岁了可以进入网吧')
print('与if无关,无论怎样都会执行')
if 条件判断1:
条件1成立执行的代码
elif 条件判断2: #可以有无数个elif
条件1不成立而2成立执行
else:
都不成立执行
# if嵌套(在if elif else)中嵌套另一个if,条件满足继续判断第二个
if 条件判断1:
条件1成立执行的代码
if 条件判断2:
条件2成立执行的代码
else:
条件2不成立执行
else:
条件1不成立执行
#示例 提款机取钱,密码为123456,账户余额为1000,提示用户输入密码并判断是否正确,正确后提示取款金额,判断取款金额和余额的关系
passwd = input('请输入密码:')
if passwd == '123456':
print('密码正确,登录成功')
money = input('请输入需要取的金额:')
if money <='1000':
print(f'您当前取款金额为{
money}')
else:
print('余额不足')
else:
print('密码错误')
#示例2 猜拳游戏(注意边界值4)
#1.自己出石头(1)/剪刀(2)/布(3) input player
#2.电脑随机出使用函数random
#3.判断输赢
# 3.1玩家胜利 play == 1 and com == 2
# play == 2 and com == 3
# play == 3 and com == 1
# 3.2平局 play == com
# 3.3 玩家输 false
import random
num = random.randint(1,3) #电脑出拳
play =int(input('请出拳头(1)/剪刀(2)/布(3)'))
if (play == 1 and num == 2) or (play == 2 and num == 3) or (play == 3 and num == 1):
print('玩家赢了!')
elif play == num:
print("平局")
elif play!=1 and play!=2 and play!=3: #注意边界值,还可以继续优化
print('数字无效')
else:
print('玩家输了')
5.循环语句while
初始条件
while 判断条件:
需要重复执行的代码
改变循环的初始条件
# 无限循环和死循环
# 无限循环的使用一般会在循环中加一个if判断,当if条件成立时,使用关键字break来终止循环
while true:
(重复执行的代码) #可以在if上边,也可在if的下边
if 判断条件:
break #终止循环
(重复执行的代码)
#示例 100以内的和 只求100内偶数的值
i = sum = 0 i=sum=0
while i<100: while i<=100:
i+=1 if i%2==0:
sum+=i sum+=i
print(sum) i+=1
print(sum)
# 猜数字游戏
import random
# 电脑随机产生随机数
num=random.randint(1,100)
while True:
innum=int(input("输入数字:"))
if innum==num:
print("当前你的数字是:",num)
break
elif innum>num:
print("大了")
# continue 可写可不写
else:
print("小了")
注:判断使用or时,前后条件一定要写全,数字0代表False,其余全为True,空字符串' '是False,其余为True
6.for循环
for可以遍历容器(字符串str,列表list,元组tuple,字典dict)中的数据,for和in都是关键字,不能用于取名.
for 变量名 in 容器: #容器中几个元素执行多少次,每次循环取出数据保存在in前边的变量中
重复执行的代码
# 示例:
my = 'iname'
for i in my: #每次循环取出数值保存在in前测变量中
print("循环中",i) # print同时输出多个值,逗号隔开输出i
-----------输出结果--------
循环中 i
循环中 n
循环中 a
循环中 m
循环中 e
for做指定次数的循环,range()变形,左闭右开
for 变量 in range(n): # for做指定次数的循环,指使用可以生成[0,n)之间的整数
重复执行的代码
for 变量 in range(a,b): # 生成[a,b)中数字,不包括b
重复的代码
range(start,end,step) # 左闭右开区间
#示例: 可以遍历也可以求和
for i in range(5,11): # 输出5-10
print(i)
range(1,10,2) # 1 3 5 7 9
range(1,10,3) # 1 4 7
range(1,10,5) # 1 6
补充:列表推导式:快速生成列表
变量名=[生成数据的规则 for 变量 in xxx] # 循环每执行一次,在列表中添加一个数据
list1=[]
for i in range(5):
list1.append(i)
# 例
list1=['hello' for i in range(5)]
print(list1) # ['hello', 'hello', 'hello', 'hello', 'hello']
list2=[i for i in range(5)]
print(list2) # [0, 1, 2, 3, 4]
# 遍历
list3=[i for i in list1]
print(list3) # ['hello', 'hello', 'hello', 'hello', 'hello']
break是终止循环,不符合条件直接到最后
continue是停止本次循环,开始下一次循环直到循环结束
2 容器
容器称为数据序列,或者高级数据类型,存放多个数据
2.1 字符串
1. 定义:使用引号(单双三)引起来的内容是字符串
my_str ='hello' # 1.使用单引号定义
my_str2 ="hello"
my_str3 ="""hello"""
my_str4 ='''hello'''
my_name="I'm 小明" # 4.字符串本身包含单用双,包含双用单
my_name='I\'m 小明' # 或采用转义字符\转义
# 5.本身含有转义,要再加\\---->\
my_name1='I\\\'m 小明'
# 5.1字符串前加r""后,输出原生字符串,字符串中的\不会作为转义字符
my_name1=r'I\'m 小明'
my_name2=r'I\\\'m 小明' # 输出结果:I\\\'m 小明
2. 下标:位置编号,从0开始,也可从右到左进行编号,从-1开始.
str = 'anmdbm'
num=len(str) # 获取字符串的长度(字符的个数)len(字符串)
print(num)
print(str[num-1])
print(str[len(str)-1])#最后一个字符
3. 切片:获取字符串中多个字符(下标有规律,等差数列)
字符串[start:end:step] #start开始下标,end是结束,左闭右开,step是步长,下标间的差值,不写默认是1
# 例:[1:5:2] #开始下标为1,间隔长度为2,得到1 3
特殊应用:反转逆置字符串,注意步长,即print(str[::-1])
#示例:
str ='asdfghj'
print(str[0:3:1]) #切片会得到一个字符串 asd
print(str[:3]) #从0开始可不写,步长为1可以省略数字:输出asd
str ='abcdefg'
print(str[-3:7]) #负数输出看具体长度 efg
print(str[4:7]) # 输出efg
print(str[4:]) # 最后一个字符也要取,末尾省略 efg
print(str[:]) # 开始结束都不写,获取全部 abcdefg
print(str[::2]) # 获取aceg部分元素
4. 查找find
字符串.find(sub_str,start,end)
# 在字符串中查找是否存在sub_str这样的字符串(在大字符串中找小的字符串)
# start是开始位置,一般不写默认为0
# end是结束位置,查找到哪个下标结束,一般不写默认为len(),若找到了返回sub_str在字符串中第一次出现的下标,没找到返回-1
#示例
str1 = "and itcast and itheman and python"
#字符串中查找and,输出为0
num=str1.find('and')
print(num)
#找第二个and出现的下标,从第一次出现的后一位,输出为11
num1=str1.find('and',num+1)
print(num1)
5. 替换方法replace
字符串.replace(old_str,new_str,count) #将字符串中old_str替换为new_str
注:old_str是需要被换的内容,new_str是替换的内容,count是替换次数,一般不写默认全部替换
返回替换后的完整的字符串,只输出结果变更,原来的字符串没发生任何改变
#将str1中的g换成G
str1 ="good good study"
str2=str1.replace('g','G')
print(str1,str2)
#将str1中第一个good换成GOOD
str3=str1.replace('good','GOOD',1)
print(str1,str3)
#将str1中第二个good转换成GOOD--先把所有good替换,再把第一个GOOD变成小写
str4=str1.replace('good','GOOD')
str5=str4.replace('GOOD','good',1)
6.拆分split
字符串.split(sep,maxsplit) #将字符串按照sep格式进行分割
注:sep,字符按照什么格式划分,默认是空白字符(空格,换行\n,tab键\t)
maxsplit分割次数,一般不写全部分割
返回:将一个字符串拆分为多个,存到列表中
注:不写sep又想要指定分割次数,使用字符串.split(maxsplit=n),n是次数
#示例:按照and字符串拆分
str1 = "demo and itcast and itheman and python"
str2=str1.split('and') # ['demo ', ' itcast ', ' itheman ', ' python']
#按照and拆分一次
str3=str1.split('and',1) # ['demo ', ' itcast and itheman and python']
#按照空白字符分割
str4=str1.split() # ['demo', 'and', 'itcast', 'and', 'itheman', 'and', 'python']
#按照空白分割一次
str5=str1.split(maxsplit=1)#输出:['demo', 'and itcast and itheman and python']
7.链接join
字符串.join(列表) #括号中主要是列表,也可以是其它容器
作用:将字符串插入到列表中相邻的两个元素之间,列表必须都为字符
示例:
list=['demo','and','itcast','itheman','and','python']
#将列表中字符串使用空格连起来
str1 =' '.join(list) # demo and itcast itheman and python
#列表中的字符串用_zero连起来
str2 ='_zero '.join(list) # demo_zero and_zero itcast_zero itheman_zero and_zero python
2.2 列表[list]
1.列表定义
列表可存储多个元素,元素间使用逗号隔开,可以存放任意类型的数据
列表名 = [ ] #用[]定义,英文逗号隔开
变量 = list() #通过类实例化列表(不常用)
# 1实例化方法不常用
# 1.1定义空列
list1 = list()
print(type(list1)) # <class 'list'>
# 1.2类型转换,将其它容器转换成列表,转换字符串时会将每个元素作为数据存入列表
list2=list('hello')
print(type(list2),list2) # <class 'list'> ['h', 'e', 'l', 'l', 'o']
# 2直接使用[]进行定义
# 2.1定义空列
my_list = []
print(my_list)
# 2.2非空列表,存放任意数据
my_list1 = [1,'ming',3.14,False]
print(my_list1) # [1, 'ming', 3.14, False]
1.1 列表下标和切片(获取某个位置的数据,列表切片还是列表)
my_list1 = [1,'ming',3.14,False]
#获取第一个数据
print(my_list1[0]) # 1
#获取第一二个数据
print(my_list1[:2]) # [1, 'ming']
#列表支持len()长度求元素个数
print(len(my_list1)) # 4
2.查找列表中数据下标的方法
列表中没有find,查找使用index()方法
列表.index(数据,start,end) # 使用方法和find一致,成功找到返回下标,失败直接报错
列表.count(数据) # 统计出现的次数,返回数据出现的次数
判断容器中某个元素是否存在使用in关键字,存在返回true,不存在返回false
my_list = [1,2,3,5,6,7,8,]
num=my_list.index(3)
print(num) #2
#找数据4出现的下标
#代码报错 num=my_list.index(4)
if my_list.count(4): #判断4出现的次数,为真执行循环体
num1= my_list.index(4)
print(num1)
else:
print('不存在 4')
3.添加数据
1> 尾部添加
列表.append(数据) #将数据添加到列表尾部
注:返回的None(关键字,空),一般不再使用变量保存返回的内容,打印列表即可
2>指定下标位置添加
列表.insert(下标,数据) #在指定的位置添加,有数据的话原数据会后移
3>列表合并
列表1.extend(列表2) #列表2中的所有数据逐个添加到列表1
list1 = [1,2,3,5,6,7,8]
list4=[9,8,7,6]
list1.append(11) # [1, 2, 3, 5, 6, 7, 8, 11]
list1.insert(8,12) # [1, 2, 3, 5, 6, 7, 8, 11,12]
list1.extend(list4) # [1, 2, 3, 5, 6, 7, 8, 11, 12, 9, 8, 7, 6],按元素添加
list1.append(list4) # [1, 2, 3, 5, 6, 7, 8, [9, 8, 7, 6]],把整体添加,带中括号
注:对列表来说,+=的本质是extend操作
def func(list1):
list1+=[1,2]
list1.extend([1,2]) #使用extend会改变原列表
mylist=['a','b']
func(mylist)
print(mylist) # ['a','b',1,2]
4.修改指定数据
列表[下标] = 数据 #修改特定位序的数字
字符串中的字符不能用下标修改,列表可用
mylist =[1,3,5,7]
mylist[2]=3
mylist[-1]='hello' #最后一个数据修改
mylist[-7]='n