python学习笔记
1.编程基础
注释
注释是对代码的说明和解释。
用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性。
注释不是代码的一部分,不会被执行。
单行注释(行注释)
以#开头,#右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用。
示例代码如下:
#这是一个单行注释
print("Hello,word!")
*快速注释:ctrl+/**
多行注释(块注释)
如果希望编写的注释信息很多,一行无法显示,就可以使用多行注释。
要在Python程序中使用多行注释,可以用一对连续的三个引号。
示例代码如下:
'''
这是一个多行注释
在多行注释之间,可以写很多很多的内容
'''
print("Hello,python!")
变量
变量是什么?
变量就是内存中的一块空间,用于存储某个数据的值,并且这个空间中存储的值是可以改变的,这就是变量。
例如:要保存某张银行卡的余额。
变量的声明
变量使用前,需要先声明。
声明格式:
变量名=变量值
当我们要是用这个数据的时候,通过这个别名就可以找到这个变量并使用存储在其中的数据。
#声明变量
name="张三"
age=18
hobby="打球"
#使用变量 通过变量名获取变量值
print(name)
变量的三要素
变量名:给变量的名称,通过变量名获取变量值。
变量值:具体的值,可以是一个常量,也可以是其他变量的值。
变量的类型:值的类型,比如:数字、普通字符等。
数据类型
计算机中与要处理各种各样的数据,不同的数据,需要定义不同的数据类型。
例如:人的名字、年龄、爱好
在python中,能够直接处理的数据类型有以下几种:
整型 浮点型 字符串 布尔值 空
整型(int)
表示整数。Python可以处理业务中的各种整数,如人数、年龄等。
在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0等等。
浮点型(float)
表示各种小数。例如金额、身高等。
注意:
整数和浮点数存储的方式不同,浮点数运算时可能会产生一点误差。
字符串(str)
字符串表示的是一串字符,用来保存普通文本。
定义时需要以单引号或双引号括起来,比如'abc',"xyz"等等。
布尔值(bool)
布尔值表示真假的判断,一个布尔值只有True、False两种值,要么是True,要么是False。
在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以表达式计算。
空值(None)
空值表示什么也没有。
None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
#int 整型
a=5
b=128
print(a*2+b+5)
#float 浮点型
c=3.14
d=5.5
e=6.0
print(c+d)
#整型和浮点型都是数值型,可以参与数学运算
#str字符串
#字符串常量使用引号包围
#引号只是字符串的标识,而不是字符串
s1="hello word"
s2="你好,上海!"
s3="" #空字符串
s4="6" #数值形式的字符串
print(s1+s2) #字符串拼接
#bool 布尔类型
b1= True #真
b2= False #假
print(5>3)
print(6<2)
#None 空
n=None
#获取一个数据的类型 type(数据)
print(type(s3))
字符串拼接
我们经常需要将多个字符串拼接到一起,组合成一个大的字符串,这种拼接有多种方法,我们介绍常用的2种。
1.使用+号拼接
2.使用拼接函数
#字符串拼接
#拼接时,需要保证每一个子字符串必须都是字符串类型
a1="张三"
a2="李四"
c=a1+"爱"+a2
print(c)
#format函数拼接
s1="hello!{}{}{}".format("张三","李四",666)
s2="hello!{0}{1}{2}".format("张三","李四",666)
s3="hello!{a}{b}{c}".format(a="张三",b="李四",c=666)
print(s1)
转义字符
#转义字符
#字符串中一些表达特殊意义的字符
s1="这是第一行!\n这是第二行!" #\n 换行符
s2="你是谁?\t离我远点!" #\t 制表符
print(s1)
#取消转义 文件路径 网址
s1=r"C:\users\mango\Desktop\python代码\test"
s1="C:\\users\\mango\\Desktop\\python代码\\test"#双重转义=不转义
print(s1)
数据类型转换
数据类型转换可以把一些数据转换成我们需要的类型。
函数int()、float()、str()和bool()分别用于将变量转换成整型、浮点型、字符串和布尔型变量。
int()——————将值转换成整数
float()———————将值转换成小数
str()————————将值转换成字符串
bool()——————将值转换成布尔值
#int()函数 将其他类型转换为整型
s1="565"
ns1=int(s1)
print(ns1+5)
#float()函数 将其他类型转换为浮点型
s1="3.14"
ns1=float(s1)
print(ns1+3)
print(type(ns1))
#str()函数 将其他类型转换为字符串
a=5
b=3.4
na=str(a)
nb=str(b)
print(type(na),type(nb))
#bool()函数 将其他类型转换为布尔型
#表示空意义的数据被转换成False,其他数据都会转成True
a=12
b="hello"
print(bool(""))
接受键盘输入
在程序中,我们经常需要让用户输入一些值。
这个内容由前端页面显示。
我们可以用input()这个函数来模拟用户输入。
#接收用户数据变量=input("提示语句")
#提示语句中只能是一个单独的字符串,不能写逗号以及其他类型
#input()输入的语句将统一被解析成字符串
money=int(input("请输入你的银行存款:"))
print("您的银行存款是:",money)
print("明年银行存款是:",money*1.03)
运算符
运算符是Python语言各种表达式中的符号。
a=12+b
Python语言主要运算符:
算术运算符 赋值运算符
关系运算符 逻辑运算符
算术运算符:
赋值运算符:
#算术运算符:数学运算中的符号 a=5 b=2 print(a/b)#除法 print(a//b)#除法,只保留整数部分 print(a%b)#获取余数 print(a**b)#获取幂次方 #赋值运算符:给变量赋值 a=125 b=a+1 a+=5 #在a的基础上再加5 ---a=a+5 print(a)
关系运算符 :
逻辑运算符:
#关系运算符:比较两个变量之间关系
#> < == >= <= !=
#关系运算符运算的结果是布尔值
a=5
b=6
print(a>b)
print(a<b)
print(a==5)
print(a>=b)
print(a!=b)
#字符串是否相等(不相等)
c="hello"
d="你好"
print(c==d)
print(c!=d)
#逻辑运算符:判断表达式之间的逻辑关系
# and or not
print(5>3 and 6>3) #左右的布尔表达式都为真,整个表达式为真
print(5>3 or 6>3) #左右的布尔表达式只有一个为真,整个表达式为真
print(not 6>3) #对右边布尔表达式取反
列表
在程序中,我们可以将多个数据通过容器保存在一个变量中。
列表(list)
列表是一个有序的序列结构。可以存放不同的数据类型的数据。
列表每一个元素有一个索引。
列表可以进行一系列操作,添加、删除、修改元素。
#列表 list
#特性:有序;元素可以重复;可以存放多种的数据类型
lista=["张三","李四","王五","张柳",666]
# 0 1 2 3 4
# -5 -4 -3 -2 -1
#通过索引(下标)获取值
print(lista[2])
print(lista[-3])
#切片
print(lista[2:5])
print(lista[2:5:2]) #lista[起始索引:结束索引:步长]
print(lista[2:]) #获取某个索引以后的所有值
print(lista[:4]) #获取某个索引前的所有值(结束索引不包含本身)
#增加数据
lista=["张三","李四","王五","张柳"]
lista.append("大宝")#在末尾添加元素
lista.insert(2,"乔峰")#在指定位置添加元素
print(lista)
#删除数据
lista=["张三","李四","王五","张柳"]
lista.remove("王五") #删除一个具体值
lista.pop(2) #删除指定位置的值
print(lista)
#给元素重新赋值
lista=["张三","李四","王五","张柳"]
lista[0]="张三丰"
print(lista)
元组和多维容器
元组(tuple)
元组是一个有序的序列结构。基本结构和列表类似。
元组也能使用索引获取元素的值。
和列表不一样的是,元组中的元素不支持修改。
#元组 tuple
#特性:有序;元素可以重复;可存放多种数据类型
#不支持元素的修改
tuplea=("张三","李四","王五","张柳")
#索引操作
print(tuplea[1])
print(tuplea[-3])
print(tuplea[1:3])
#元组用在对安全性有一定需求的数据上
#多维容器
lista=[213,131,313,1313,3131,3]
listb=[213,131,313,1313,"你好",(1,21,2121,"北京"),3131,3]
listc=[4,552,23,21,212,21,987]
listx=[lista,listb,listc,[21,2121,1,3,442,435,312,21]] #多维容器
print(listx[1][5][3])
字典
字典(dict)
字典是一种键值对结构的序列结构,其中的键(Key)和值(value)是一一对应的。
字典用在需要高速查找的地方。
#字典 dict
#键:值
#特性:无序;键值对形式;键不可以重复,一般使用字符串作为键
dicta={"name":"zhangsan","age":18,"hobby":"playball"}
#使用键来获取值
print(dicta["hobby"])
print(dicta["name"])
print(dicta["age"])
#修改字典的值
dicta={"name":"zhangsan","age":18,"hobby":"playball"}
dicta["hobby"]="看书"
print(dicta)
#增加数据--给一个原本不存在的键赋值
dicta["sex"]="男"
print(dicta)
#删除数据
dicta.pop("hobby")
print(dicta)
#判断一个键是否存在
print("sex"in dicta)
集合
集合(set)
集合是一种无序的序列结构,集合中的元素不重复。集合经常被用来进行去重复值。
集合也可以进行数学集合运算,如:并、交、差以及对称差等。
#集合 set
#特性:无序;元素不重复;集合本质上是只有键的字典
seta={21,232,33,43,13,33,22,22,"hello"}
print(seta)
#去重
lista=[1,2,1,1313,21,21,23,23,23]
seta=set(lista) #将其他序列转换成set
newlist=list(seta) #将其他序列转换成list
print(seta)
print(newlist)
#集合运算
seta={1,2,3,4,5,6}
setb={7,8,9,4,5,6}
print(seta&setb) #获取交集
print(seta|setb) #获取并集
print(seta-setb) #获取差集
len()函数
#len()函数 获取序列长度(length)
lista=[1,121,213,13,1,31,2,13,12]
teuplea=(1,21,2131,212,22,423,2)
dicta={"name":"zhangsan","age":18,"hobby":"playball"}
seta={21,232,33,43,13,33,22,22,"hello"}
length=len(lista)
print(length)
#获取字符串长度
s1="hello word!"
print(len(s1))
print(s1[-2])
2.选择结构
控制结构
控制结构表示控制程序运行的顺序和结构。
大部分编程语言都有如下三种结构:
1.顺序结构 2. 选择结构 3.循环结构
#顺序结构:代码逐行执行(每行代码执行且执行一次)
#选择结构(分支结构,判断结构)
#通过条件判断决定哪些代码执行,哪些不执行
#循环结构
#代码重复执行
if-else语句
基本语法
if 判断条件:
执行语句
判断条件为真(True)的时候才执行冒号后下面的语句。
比如现在我们判断密码输入正确,就执行进入个人中心的命令。
money=120
#if-else语句:单个条件判断
if money>=100: #如果
print("恭喜你可以买宝马了!")
print("真开心")
else: #否则
print("努力赚钱吧!")
print("程序结束!")
elif多条件判断
#elif多条件判断
money=70
if money>=100:
print("恭喜你可以买宝马了!")
print("真开心")
elif money>=50 and money<100:
print("买丰田!")
elif money>=20 and money<50:
print("买二手车!")
else:
print("共享单车了解一下!")
#if在开头,只有一个,不可省略
#elif可以有任意个
#else只有末尾一个,可以省略
选择结构嵌套
money=int(input("请输入存款金额(万)?"))
day=int(input("今天星期几(1-7)?"))
if money>=100:
print("恭喜你可以买宝马了!")
print("真开心")
if day<=5:
print("周末去提车!")
else:
print("今天下午就去提车!")
elif money>=50 and money<100:
print("买丰田!")
elif money>=20 and money<50:
print("买二手车!")
else:
print("共享单车了解一下!")
#注意事项
#条件后的冒号不要掉
#else后面不要写条件
#缩进必须一致
选择结构练习
1.星期一特价菜:水煮鱼
星期二特价菜:烧排骨
星期三、四特价菜:宫爆鸡丁
星期五、六特价菜:清蒸鲈鱼
其它:干锅肥肠
根据用户输入星期几,输出特价菜是什么?
day=int(input("你周几过来吃饭呢(1-7)?"))
if day==1:
print("今天的特价菜是:水煮鱼")
elif day==2:
print("今天的特价菜是:烧排骨")
elif day==3 or day==4:
print("今天的特价菜是:宫爆鸡丁")
elif day==5 or day==6:
print("今天的特价菜是:清蒸鲈鱼")
else:
print("干锅肥肠")
2.根据输入判断学生的成绩等级,
如果成绩>=90分,则输出“优秀”;
如果成绩>=80分,则输出“良好”;
如果成绩>=60分,则输出“中等”;
否则,输出“差”
score=int(input("请输入学生分数:"))
if score>=90:
print("优秀")
elif score>=80:
print("良好")
elif score>=60:
print("中等")
else:
print("差")
3.现在有一个银行保险柜,有两道密码。想拿到里面的钱必须两次输入的密码都要正确。
如果第一道密码都不正确,那直接把你拦在外面;
如果第一道密码输入正确,才有权输入第二道密码。
只有当第二道密码也输入正确,才能拿到钱!(两道密码自己设)(嵌套if)
password1="123"
password2="abc"
pwd1=input("请输入第一道密码:")
if pwd1==password1:
print("第一道密码输入正确!")
pwd2=input("请输入第二道密码:")
if pwd2==password2:
print("第二道密码输入正确,你可以拿到500亿元!")
else:
print("很遗憾,第二道密码错误!")
else:
print("第一道密码输入错误,请出去!")
4.开发一个计算器,用户输入第一个数、加减乘除、第二个数,控制台显示计算结果。
简单的:
a=int(input("请输入第一个数:"))
b=int(input("请输入第二个数:"))
s=input("请输入计算方式(+ - * /):")
if s=="+":
print("计算结果:",a+b)
elif s=="-":
print("计算结果:",a-b)
elif s=="*":
print("计算结果:",a*b)
elif s=="/":
print("计算结果:",a/b)
中级的:
a=int(input("请输入第一个数:"))
b=int(input("请输入第二个数:"))
s=input("请输入计算方式(+ - * /):")
result=0
msg=1
if s=="+":
result=a+b
elif s=="-":
result=a-b
elif s=="*":
result=a*b
elif s=="/":
result=a/b
else:
print("没有这个计算方式!")
msg=0
if msg==1:
print("计算结果:",result)
案例—超市收银
为一家超市开发一个1简易的收银系统(以3-5种商品为例):
使用变量保存:商品编号 商品价格 商品名字
1.提示用户输入商品编号和数量 ,然后显示总价多少钱。
2.提示用户输入付款金额,然后显示找零金额。
num1="1001"
price1=7
name1="苹果"
num2="1002"
price2=5
name2="香蕉"
num3="1003"
price3=10
name3="梨子"
num=input("请输入商品编号:")
# 提前声明变量保存需要的商品价格和名称
price=0
name=""
if num==num1:
price=price1
name=name1
elif num==num2:
price=price2
name=name2
elif num==num3:
price=price3
name=name3
else:
print("没有此商品!")
if price!=0:
quant=int(input("请输入数量:"))
amount=price*quant #计算商品金额
print("您当家购买的是:",name," 单价:",price,"元 数量:",quant,"件 金额:",amount,"元!")
money=int(input("请输入付款金额:"))
if money<amount:
print("金额不足!")
else:
print("****付款",money,"元!找零",money-amount,"元!")
round()函数
#round()函数:保留指定的小数位 a=15.3 b=3 c=a/b print(round(c,1))
3.循环结构
认识循环
#认识循环
for x in range(10):
print("hello,word!") #循环操作:重复执行的业务
#重复登录
#1000个学号,匹配某个特定学号
for循环
for循环
for 变量名 in 序列:
循环语句
#执行次数=序列中元素的个数
for x in range(0,10):
print(x)
print("hello,word!")
for x in range(0,10):
print("第",x,"次打印hello,word!")
#步长
for s in range(1,101,4):
print(s)
#range(开始值,结束值(不包含),步长)
for x in ["a","b","c"]:
print(x)
for循环遍历容器
#for循环遍历容器 遍历:将容器中的数据一个一个获取出来
names=["张三","李四","王五","赵六"]
#直接遍历
for name in names:
if name=="王五":
print("有这个人 王五")
#构造索引
for i in range(0,len(names)):
print(names[i])
scores=(67,78,56,89,76,79,98,45,65,76)
for i in range(0,len(scores)):
print(score[i])
#求和并获取平均分
total=0
for score in scores:
total=total+score
print(total/len(scores))
#循环遍历字典,只获取键
dicta={"name":"zhangsan","age":18,"hobby":"playball"}
for x in dicta:
print(x,dicta[x])
seta={1,23,123,43,345,46,56}
for x in seta:
print(x)
for循环例子和求和问题
#1.循环操作是什么?
#2.循环的次数
#大宝买车时,贷款12万,分10年还清
totalmoney=0 #保存累计还款金额
for year in range(1,11):
totalmoney=totalmoney+1.2
print("第",year,"年到了!还款1.2万!累计已还",round(totalmoney,2),"万!还剩",round(12-totalmoney,2),"万!")
#1-100之间所有数的和
t=0
for x in range(1,101):
t=t+x
print(x)
print(t)
最大最小值问题
#最大最小值问题
scores=[67,78,56,89,76,79,98,45,65,76]
#最高分数
maxscore=scores[0]
for score in scores:
if score>maxscore:
maxscore=score #将更大值更新为最大值
print(maxscore)
#最低分数
minscore=scores[0]
for score in scores:
if score<minscore:
maxscore=score #将更大值更新为最小值
print(maxscore)
while循环
while循环表示通过判断条件来控制循环语句的执行。
while 判断条件:
执行语句
在你确定循环条件而不确定循环次数时,那么while是最好的选择。
i=1
while i<=10:
print("第",i,"次打印:hello,word!")
i=i+1
#for适合循环次数确定的业务,可直接遍历容器。
#while适合已知循环执行条件的业务。
year=1
while year<=10:
print("第",year,"年,还款1.2万!")
year=year+1
#获取100-200之间的偶数
i=100
while i<=200:
print(i)
i+=2
嵌套循环
#嵌套循环
for year in range(1,11):
print("----------第",year,"年到了!")
for month in range(1,13):
print("第",year,"年,第",month,"月,还款1000元!")
print("----",year)
#遍历多维容器
lista=[1,11112,2,1,21,21,3131]
listb=[212,21313,12,121]
listc=[13,43546,466,5657,4343]
listx=[lista,listb,listc]
for x in listx:
for s in x:
print(s)
循环结构练习
1.用户输入任意10个数,for循环求他们的平均值:
total=0
for x in range(1,6):
num=int(input("请输入"+str(x)+"一个数:"))#input中使用+进行拼接
total+=num
print(total/5)
延申:用户输入任意数,求他们的平均值:
total=0
count=0 #计算循环执行的次数(记录数的个数)
i=1
while i<=1:
num=int(input("请输入"+str(count+1)+"一个数:"))
total+=num
count+=1
msg=int(input("继续输入请按1,结束请按2:"))
if msg==2:
i=1000 #改变i,让循环结束
print(total,"-----",count,"-----",total/count)
2.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848米)?
p=0.08 m=8848000 count=0 #记录对折次数 while p<m: p=p*2 #对折 count+=1 print(count)
3.鸡兔同笼问题:今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?
#穷举法:列举所有可能性,找到正确结果
#鸡 0---35 j 兔=35-鸡 t
for j in range(0,36):
t=35-j
if j*2+t*4==94:
print(j,t)
4.我国古代数学家张邱健在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的:5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。
#公鸡 0-20 g 母鸡 0-33 雏鸡 0-100
for g in range(0,21):
for m in range(0,34):
for c in range(0,100,3):
if g+m+c==100 and g*5+m*3+c/3==100:
print(g,m,c)
#雏鸡=100-公鸡-母鸡
for g in range(0,21):
for m in range(0,34):
c=100-g-m
if g+m+c==100 and g*5+m*3+c/3==100:
print(g,m,c)
break和continue
break:结束整个循环操作
continue:结束本次循环,继续下次循环
for year in range(1,11):
if year==5:
print("第5年疫情原因,今年不用还款了!")
continue
if year==6:
print("第",year,"年到了!还款2.4万!")
if year==8:
print("第8年,提前还清,以后都不用还了!")
break
print("第",year,"年到了!还款1.2万!")
无限循环
如果循环中的循环条件永远为真,且没有break关键字进行终止,那么就形成了一个无限循环,也被称为死循环。
count=1
while 1==1:
print("hello,word!",count)
count+=1
案例-模拟银行ATM
1.模拟3张银行卡,1001、1002、1003,分别设置密码和余额(使用列表嵌套字典的方式);
2.提示用户输入银行卡和密码,遍历每张卡的信息验证是否成功;
3.如果用户输入正确---提示让用户选择取款、存款还是退出,并提示余额多少 输入错误---重新输入卡号密码;
选择取款---提示输入取款额度,如果超过余额,提示余额不足;否则,在余额上减掉相应余额;
选择存款---输入存款额度,余额加上相应额度,并提示余额多少;
选择退出---重新登录;
4.设置3次输入错误账号密码,提示银行卡已被锁定,程序结束。
# 模拟银行ATM
card1={"姓名":"张三","卡号":"1001","密码":"123","余额":10000}
card2={"姓名":"李四","卡号":"1002","密码":"456","余额":20000}
card3={"姓名":"王五","卡号":"1003","密码":"789","余额":30000}
card4={"姓名":"赵六","卡号":"1004","密码":"012","余额":40000}
cardlast=[card1,card2,card3,card4]
count=0
while 1==1:
cnum=input("请输入卡号:")
msg=0 #记录登录状态 0失败 1成功!
for card in cardlast:
if cnum==card["卡号"]:
msg=1
count=0 #当验证成功时,错误次数清零
while 2==2:
cpwd=input("请输入密码:")
if cpwd==card["密码"]:
print("恭喜你!",card["姓名"],"验证成功!")
break
else:
print("密码错误,验证失败!请重新输入:")
continue
if msg==0:
count+=1
if count==3:
print("您已经连续3次输入错误,银行卡被锁定!")
break
print("验证失败!您已经连续",count,"次输入错误,还有",3-count,"次机会!")
continue
#银行业务
while 2==2:
choice=int(input("请输入要办理的业务编号(1.存款 2.取款 3。退出):"))
if choice==1:
money1=float(input("请输入存款金额:"))
for card in cardlast:
if card["卡号"]==cnum:
card["余额"]=card["余额"]+money1
print("存款成功!存入",money1,"元!余额",card["余额"],"元")
break
elif choice==2:
money2=float(input("请输入取款金额:"))
if money2>card["余额"]:
print("余额不足!!")
else:
for card in cardlast:
if card["卡号"]==cnum:
card["余额"]=card["余额"]-money2
print("取款成功!取出",money2,"元!余额",card["余额"],"元")
break
elif choice==3:
print("-------已退出!--------")
break
else:
