python学习笔记

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:
        print("没有此业务,请重新选择!")
        continue
  break

冒泡排序

从第一个元素开始,往后比较相邻两个元素,按照需求进行交换(升序和降序),经过多轮比较完成排序。

总轮数=列表长度-1 每轮比较次数=列表长度-轮数

#排序算法:冒牌排序

#总轮数=列表长度-1
#每轮比较次数=列表长度-轮数
lista=[5,9,6,8,2,7,3,4,1]
for x in range(1,len(lista)-1+1):
   print("第",x,"轮比较!")
   for y in range(0,len(lista)-x+1-1):
      print(y,"-------",y+1)
      if lista[y]>=lista[y+1]:
         #两个数值交换
         c=lista[y]
         lista[y]=lista[y+1]
         lista[y+1]=c
print(lista)

4.函数

函数是一段实现某个功能的业务代码,定义好以后可重复使用,也成为方法。

函数能提高应用的模块性,和代码的重复利用率。

函数的分类

内置函数

Python内部已经写好的公共方法,例如:求和,最大值最小值等。

自定义函数

开发人员自己编写的函数,可以在项目中的多个地方调用。

例如:超市系统中,查询商品详细信息的业务。

#调用函数:函数名(参数列表)

lista=[121,2131,24,3,43,31,15,32,31]

newlist=sorted(lista)
print(newlist)

常见内置函数

#常见内置函数
lista=[121,2131,24,3,43,31,15,32,31]

#排序
newlist=sorted(lista,reverse=True)#降序
print(newlist)

#最大值最小值
print(max(lista))
print(min(lista))


#求和
print(sum(lista)/len(lista))

#反转序列
newlist=reversed(lista)
for x in newlist:
   print(x)

#获取变量id
a=5
b=5
print(id(a))
print(id(b))

#二进制转换

a=12
r=bin(a)
print(r)

自定义函数

#自定义函数

#1。定义一个函数
def function1():
  print("函数function1被执行了!")
  print("呵呵!")

#2.调用函数
function1()
for x in range(100):
  function1()

def getsum(a,b):
  result=a+b
  print("相加的结果是:",result)
#------------------------------------------
getsum(4,5)

参数和返回值

全局变量能在整个文件中被访问 函数内部不能给全局变量重新赋值

局部变量函数或者类的内部被访问

#参数和返回值

#参数:函数执行时需要从外部传入的数据
def getsum(a,b): #形参
  result=a+b
  print("相加的结果是:",result)
#------------------------------------------
getsum(4,5) #实参

#实参个数和形参必须一致

#返回值:函数执行后返回的结果
def fun1(lista):
  r=sum(lista)/len(lista)
  print("平均值:",r)
  return r
#------------------------------------
result=fun1([2,2114,1324,24,34,35,2,21])   #接收返回值
print(result)


#返回多个值
def fun2():
  print("fun2被执行了!")
  a=21
  b=33
  c=22
  return a,b,c
#-------------------------------------
r1,r2,r3=fun2()
print(r1,r2,r3)


def juicer(f1):
  print("榨汁机开始工作。。。。")
  juice=f1+"汁"
  return juice
#-----------------------------------
j=juicer("苹果")
print("榨出一杯:",j)

变量作用域

#函数中变量作用域

a="北京"       #全局变量(定义在函数或者类的外部)
def function():
   b="深圳"   #局部变量(定义在函数或者类的内部)
   a="上海"   #相当于创建了同名的局部变量a
   print(a)
   print(b)
#------------------------
function()
print(a)


#全局变量能在整个文件中被访问
#函数内部不能给全局变量重新赋值

#局部变量函数或者类的内部被访问

#global
a="北京"       #全局变量
def function():
   global a  #将函数内部的a设置为全局变量
   a="上海"  
   print(a)
   
#------------------------
function()
print(a)

函数练习

1.写函数,接受3个数字参数,返回最大的那个数字。

def getmax(a,b,c):
   r=max([a,b,c])  #在函数中调用函数
   return r
#----------------------------------
d=getmax(23,45,67)
print(d)

2.编写一个用户登录函数(用户名密码提前设置):

返回用户登录成功或者失败的结果:

name="aaa"
password="123"
def login():
   msg="失败"
   uname=input("请输入用户名:")
   upassword=input("请输入密码:")
   if uname==name and upassword==password:
      print("登录成功!")
      msg="成功"
   else:
      print("登录失败!")
   return msg   #函数一旦执行到return将会停止
r=login()
print("登陆结果:",r)

3.做一个分数统计器:

函数中让用户循环输入一组分数,输入结束后保存到一个列表中。

把平均分,最高分,最低分,及格人数,及格率返回出来(接收列表为参数)。

def getdata():
   avgscore=0
   maxscore=0
   minscore=0
   passcount=0
   passpercent=0
   scorelist=[]
   while 1==1:
      s=int(input("-----请输入一个分数:"))
      scorelist.append(s)
      if s>=60:
         passcount+=1
      c=int(input("结束请按1,继续输入请按2:"))
      if c==1:
         break
   avgscore=sum(scorelist)/len(scorelist)
   maxscore=max(scorelist)
   minscore=min(scorelist)
   passpercent=passcount/len(scorelist)
   return avgscore,maxscore,minscore,passcount,passpercent
avgscore,maxscore,minscore,passcount,passpercent=getdata()
print("******",avgscore,maxscore,minscore,passcount,passpercent)

return的另一个用法

#return的另一个用法


#嵌套循环终止问题
for x in range(1,11):
  msg=0
  print("---------第",x,"年!")
  for y in range(1,13):
     print("第",x,"年!第",y,"月!")
     if x==5 and y==5:#在第五年第五月终止整个循环
        msg=1
        break
  if msg==1:
     break


def function2():
  for x in range(1,11):
     print("---------第",x,"年!")
     for y in range(1,13):
        print("第",x,"年!第",y,"月!")
        if x==5 and y==5:#在第五年第五月终止整个循环
           msg=1
           return #退出整个函数
function2()

5.综合训练-商品管理系统

项目分析和数据准备

大宝的超市开业了,为了更好的管理商品信息,准备开发一个商品管理系统。

系统需要用户先登录,再进行操作,其中包含以下功能菜单:

1.显示商品列表

2.增加商品信息

3.删除商品

4.设置商品折扣

5.修改商品信息

6.退出

a.使用列表嵌套字典的方式保存用户数据(包含用户名,密码,姓名):

b.使用列表嵌套字典的方式保存商品数据(包含编号,名称,价格,折扣):

c.编写用户登录的函数,返回登陆结果:

d.循环提示菜单,业务完毕时,返回主菜单,退出时回到登陆页面:

e.将功能菜单中的业务功能各自编写到函数中:

f.用户选择不同业务编号时,调用已经写好的各种函数。

#数据准备
user1={"用户名":"aaa","密码":"123","姓名":"张三"}
user2={"用户名":"bbb","密码":"123","姓名":"李四"}
user3={"用户名":"ccc","密码":"123","姓名":"王五"}
userlist=[user1,user2,user3] #用户列表

p1={"编号":"1001","名称":"苹果","价格":"5","折扣":"1"}
p2={"编号":"1002","名称":"香蕉","价格":"3","折扣":"1"}
p3={"编号":"1003","名称":"牛奶","价格":"4","折扣":"1"}
p4={"编号":"1004","名称":"白菜","价格":"1","折扣":"1"}
p5={"编号":"1005","名称":"西瓜","价格":"2","折扣":"1"}
productslist=[p1,p2,p3,p4,p5] #商品列表


#用户登录
def login():
  msg="失败"
  while 1==1:
     uname=input("请输入用户名:")
     upwd=input("请输入密码:")
     for user in userlist:
        if uname==user["用户名"] and upwd==user["密码"]:
           print("----验证成功!欢迎你,",user["姓名"],"!")
           msg="成功"
           break
     if msg=="失败":
        print("用户名密码错误,请重新输入!")
        continue
     else:
        break
  return msg   #返回登录结果

#1.显示商品列表
def showprducts():
  print("-编号---名称----价格----折扣-")
  for product in productslist:
     print(product["编号"]+"---"+product["名称"]+"-----"+str(product["价格"])+"-----"+str(product["折扣"]))
  print("---------------------------")

# 2.增加商品信息
def addprduct():
  #生成新编号
  lista=[]  #c=存放所有商品
  for product in productslist:
     lista.append(int(product["编号"]))
  newNum=str(max(lista)+1)
  name=input("请输入商品名称:")
  price=float(input("请输入商品单价:"))
  newproduct={"编号":newNum,"名称":name,"价格":price,"折扣":"1"}
  productslist.append(newproduct)
  print("----商品",name,"添加成功!")
  showprducts()

# 3.删除商品(通过编号删除)
def delprduct():
  while 1==1:
     msg=0 #记录商品是否存在
     num=input("请输入要删除的商品编号:")
     for product in productslist:
        if num==product["编号"]:
           print("---正在删除",product["名称"],"商品.......")
           productslist.remove(product) #删除商品
           print("----删除成功!")
           msg=1
           break
     if msg==0:
        print("商品不存在!")
        choice=int(input("重新输入请按2,取消请按1:"))
        if choice==1:
           break
        else:
           continue
     else:
        showprducts()
        break

# 4.设置商品折扣
def setprduct():
  while 1==1:
     msg=0 #记录商品是否存在
     num=input("请输入要设置折扣的商品编号:")
     for product in productslist:
        if num==product["编号"]:
           newdiscount=float(input("请输入新的折扣(0.1-1):"))
           product["折扣"]=newdiscount  #设置折扣
           print("---商品",product["名称"],"折扣已设置成功,",newdiscount*10,"折!")
           msg=1
           break
     if msg==0:
        print("商品不存在!")
        choice=int(input("重新输入请按2,取消请按1:"))
        if choice==1:
           break
        else:
           continue
     else:
        showprducts()
        break

# 5.修改商品价格信息
def setprice():
  while 1==1:
     msg=0 #记录商品是否存在
     num=input("请输入要调整价格的商品编号:")
     for product in productslist:
        if num==product["编号"]:
           newprice=float(input("请输入新的价格:"))
           product["价格"]=newprice  #设置价格
           print("---商品",product["名称"],"价格已设置成功,",newprice,"元!")
           msg=1
           break
     if msg==0:
        print("商品不存在!")
        choice=int(input("重新输入请按2,取消请按1:"))
        if choice==1:
           break
        else:
           continue
     else:
        showprducts()
        break

#6.根据价格排序显示商品列表
def sort():
  choice=int(input("请选择升序或者降序(1.升序 2.降序):"))
  plista=[] #存放所有价格信息
  for product in productslist:
     plista.append(product["编号"])
  plista=list(set(plista))  #去掉重复的编号
  print("-编号---名称----价格----折扣-")
  if choice==1:
     newlist=sorted(plista)
     for price in newlist:
        for product in productslist:
           if price==product["编号"]:
              print(product["编号"]+"---"+product["名称"]+"-----"+str(product["价格"])+"-----"+str(product["折扣"]))
  else:
     newlist=sorted(plista,reverse=True)
     for price in newlist:
        for product in productslist:
           if price==product["编号"]:
              print(product["编号"]+"---"+product["名称"]+"-----"+str(product["价格"])+"-----"+str(product["折扣"]))



#模块化
# ---------------
#显示主菜单,调用已经以写好的业务函数
while 0==0:
  result=login()
  if result=="成功":
     while 2==2:
        print("------------------主菜单-------------")
        print("1.显示商品列表")
        print("2.增加商品信息")
        print("3.删除商品")
        print("4.设置商品折扣")
        print("5.修改商品信息")
        print("6.按照价格排序显示")
        print("7.退出")
       
        choice=int(input("请选择业务编号(输入1-6):"))
        if choice==1:
           showprducts()
        elif choice==2:
           addprduct()
        elif choice==3:
           delprduct()
        elif choice==4:
           setprduct()
        elif choice==5:
           addprice()
        elif choice==6:
           sort()
        elif choice==7:
           print("---------正在退出。。")
           break
        else:
           print("没有此功能,请重新选择!")
           continue
showprducts()
setprduct()
setprice()

6.文件读写

文件读写介绍

文件作用

文件把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

内存:临时数据(当程序关闭时会从内存清空) 磁盘:永久态数据(文件)

读文件:磁盘》》》》内存 写文件:内存》》》》磁盘

读文件

#读文件
f=r"C:\Users\HP\Desktop\个人文件\U9\U9更新账号密码语句.txt" #不要忘记加r
file=open(f,"r") #open(文件路径名,访问模式)  r---read读文件
data=file.read()
file.close() #关闭文件资源

print(data)
print(type(data))

写文件

#写文件
# 如果文件不存在,则创建新文件 如果存在,则覆盖写入
# 文件路径必须存在
s="你好,深圳!"
file=open(r"C:\Users\HP\Desktop\个人文件\U9\hello0401.txt","w")  #w---write写
file.write(s)
file.close() #关闭文件资源

s="你好,北京!"
file=open(r"C:\Users\HP\Desktop\个人文件\U9\hello0401.txt","a")  #a---append追加写入
file.write(s)
file.close() #关闭文件资源

#文本文件:r w a

二进制文件读写

# 二进制文件:rb wb ab

#读文件
file1=open(r"C:\Users\HP\Desktop\个人文件\微信图片_20220321234935.jpg","rb")
data=file1.read()
file1.close()

#写文件
file2=open(r"C:\Users\HP\Desktop\个人文件\微信图片_杨尚楠.jpg","wb")
file2.write(data)
file2.close()

with open()语句

# with open()语法
with open(r"C:\Users\HP\Desktop\个人文件\U9\hello0401.txt","r") as file:
   data=file.read()
   print(data)


#文件复制
with open(r"C:\Users\HP\Desktop\个人文件\微信图片_20220321234935.jpg","rb") as file1,open(r"C:\Users\HP\Desktop\个人文件\微信图片_杨尚楠.jpg","wb") as file2:
   data=file1.read()
   file2.write(data)

7.模块

#模块介绍
import random as ran #引入随机数模块

#模块名.函数名()
r1=ran.randint(1,6)  #随机输出1-6的整数
r2=ran.uniform(1,6)  #随机输出1-6的小数
print(r1)
print(r2)

python文件引入和main函数

同一个项目中,函数可以进行相互引入。例如:text1的函数就可以被text2进行引入

如果text1中有函数的默认执行语句,那么在text2中引入text1函数后,也会去执行默认语句。若想要其不执行语句,那么需要加上这个语句:

#当直接执行当前文件时运行的语句,被其他文件引入时不执行
if __name__ == '__main__':
  main()

内置模块random

#random
import random as ran
#模块名.函数名()
r1=ran.randint(1,6)  #随机输出1-6的整数
r2=ran.uniform(1,6)  #随机输出1-6的浮点数
r3=ran.choice([1,345,32,52,356,33,563,4,3]) #在一个序列中随机获取一个值
r4=ran.random()  #生成0-1的浮点数
print(r1)
print(r2)
print(r3)
print(r4)

#抽奖程序:一等奖 笔记本电脑 0.001 二等奖 冰箱 0.01 三等奖 音响 0.05 谢谢回顾 1-0.001-0.01-0.05
import random
print("正在抽奖.......")
r=random.randint(1,1000)
print("--------您的抽奖号码是:",r)
if r==1:
  print("******恭喜你,获得一等奖笔记本电脑!")
elif 10<=r<=19:
  print("******恭喜你,获得二等奖 冰箱!")
elif 100<=r<=149:
  print("******恭喜你,获得三等奖 音响!")
else:
  print("****** 谢谢惠顾!")

内置模块time

#内置模块time

import time


s=time.time() #获取一个时间戳:当前时间距离1970年元旦0时的秒数
print(s)

s1=time.time()
for x in range(1,10001):
  print(x)
s2=time.time()
print(s2-s1)

#获取当前本地的日期和时间
t=time.localtime()
print(t)

#将日期和时间转换成指定格式的字符串
strtime=time.strftime("%Y年-%m月-%d日----%H:%M:%S",t)
print(strtime)

#程序休眠
time.sleep(10)
print("hello")


#倒计时
i=10
while i>=0:
  print("倒计时",i)
  time.sleep(1)
  i-=1

内置模块datetime

#内置模块datetime
import datetime

#获取当前的日期时间
now=datetime.datetime.now()
print(type(now))

#获取一个指定时间
d1=datetime.datetime(2018,2,13,5,23,45)
print(d1)

#日期转字符串
s1=d1.strftime("%Y年-%m月-%d日   %H:%M:%S")
print(s1)

#字符串转日期(格式一定要一致)

s2="2018/02/13   05:23:45"

d2=datetime.datetime.strptime(s2,"%Y/%m/%d   %H:%M:%S")
print(d2,type(d2))

内置模块urllib

#内置模块urllib (爬虫模块)
#爬虫:爬取互联网数据的程序
from urllib import request

url="http://www.baidu.com"

data=request.urlopen(url).read() #发送请求并读取数据
print(data.decode()) #decode()解码:将二进制转换成字符

with open (r"0406.html","wb") as f:
  f.write(data)

第三方模块介绍

第三方模块安装

打这个命令可以python -m pip install --upgrade pip -i https://pypi.douban.com/simple

 

posted @ 2022-04-11 22:21  $V  阅读(178)  评论(0)    收藏  举报