在符合条件的情况下进行循环,否则就退出循环
pk=0# 初始化参数a=1while a<=100:# 判断a是否在100以内 if a%2==0:# 判断a是否为偶数 pk+=a# 对a进行累加 a+=1# 改变参数值使其可以遍历1-100中间的整数print(pk)# 输出结果''' 这就是1-100的偶数之和'''
在使用while循环的时候要注意一定要循环体的末尾进行条件参数的改变,否则会陷入死循环
2.range()函数在我学习for in循环前先进行了range函数的学习,range函数能使我这样的初学者更好的理解for in循环。
rang函数的作用为从0开始生成一个序列(类似于c中的一维数组)
生成一个range函数有三种方式,第一种:
range(stop)只有一个参数,生成一个从0开始步长为1的序列
g=range(5)# 默认从0开始,步长为1print(g)# 生成结果为range(0,5)这里的返回值为迭代器对象print(List(g))# 生成结果为[0,1,2,3,4] 这是一个列表
我们无法直接将range函数的结果直接输出,但是可以通过使用List函数将range函数的运算结果输出
第二种方式:
range(start,stop)默认step为1
print(List(range(1,10)))# 从1开始步长为1,到9结束# 输出结果为[1,2,3,4,5,6,7,8,9]
第三种方式range(start,stop,step)
print(List(range(1,10,2)))# 输出结果为[1,3,5,7,9]print(10 in range(1,10,2))# 运行结果为False说明10并不在这个序列中
其实三种方式归根结底是一种方法,只是前两种方式可以省略一些步骤,使用默认值输出
3.for in循环Python里的for in循环有点类似c里面的for循环,使用格式为
for 自变量 in 可迭代对象
直接看代码会比较直观
sum=0for i in range(101): if i%2==0: sum+=i i+=1print(sum)
上面计算了1-100的偶数之和,in后面一定要是可迭代对象,像列表,元组,字符串之类的,详细的可以去看看这个博主博客[可迭代对象是啥],个人感觉讲的还是蛮清楚地
4.continue和break说道循环结构,就绕不开continue和break这两个控制循环的关键字,这两一般配合if的分支结构来使用,continue是当程序执行到continue时是跳到循环开始的时候继续执行程序
# 输出1-50之间所有5的倍数for item in range(1,51): if item %5!=0: continue else: print(item)
break作用和continue的作用相反,brake是执行到break时跳出循环
""" 输入三次密码,正确的话结束,不正确继续输入直到输完3次结束"""for item in range(3):# 最多输入三次 pwd=input('请输入密码:') if pwd=="45681": print('密码正确') break else: print('密码错误')else: print('对不起,由于密码输入错误过多,该账户已被锁定')"""下面是使用while语句进行实现"""a=0while a<3: pwd=input('请输入密码:') if pwd == "45681": print('密码正确') break else: print('密码错误') a+=1# 这个不加的话a就一直是0然后整体死循环else: print('对不起,由于密码输入错误过多,该账户已被锁定')
简而言之,break和continue的作用对象是在其所对应那一层的循环,break跳出,continue从头再来
在学完循环后常规练习99乘法表
for i in range(1,10): # 外层循环控制行数 for j in range(1,i+1): # 内层循环控制列数 print(j,"*",i,"=",j*i,end="\t") print("")
还有空心矩形
# 接下来试一试空心矩形7*10for i in range(7): for j in range(10): if 0<i<6: if j==0 or j==9: print("*",end=" ") else: print(" ",end=" ") else: print("*",end=" ") print("\n")
在这里学到的东西是end=,这个关键字的意思是,在执行完print函数后,不进行换行 *** 作,打印它“=”后面的参数
二.列表个人将列表理解成了类似C语言里面一维数组,与C语言不同的是,这里的列表存储的数据集类型不仅仅是同一种类型的参数,它的原理是存储各个参数的ID,因此可以存储不同类型的参数
1.列表的创建列表的创建方式有两种:
第一种使用[ ]直接赋值
lst=['hello',132,'world']
创建列表的第二种方式,使用内置函数List( )
lst2=List(['hello','world',998])
在这里学到的是赋值运算的本质是将ID值赋予对象,在调用参数的时候大体上是通过形参里存储的ID找到实参,再参与运算
2.列表的增删改列表的增加lst=['add',33.6,'item',454,77,False]print('修改前的列表ID:',ID(lst))""" 列表元素的增加 *** 作"""# append()在列表末尾增加一个元素lst.append('sg553')print(lst)print('第一次修改后的列表ID:',ID(lst))# 运行结果和初始的ID一样并没有发生改变# extend()在末尾增加至少一个元素(可以增加多个元素)lit2=['ssd','ssd',556]lst.extend(lit2)# 将lit2的元素添加到lit2的末尾print(lst)# inset()在列表的任意位置增加一个元素lst.insert(1,5)# 在索引为1的位置插入一个整数5print(lst)# 切片,在列表的任意位置增加至少一个元素lst2=[55,66,44]lst[2:]=lst2# 这里的意思是将索引2后面的元素全切掉然后将lst2的元素替换进去
上面讲到了列表里的一个关键的点—切片,切片顾名思义就是将列表里面的一段参数切出来进行 *** 作
切片切片格式:
列表名[start:stop:step]
start默认值为0,step默认值为1,stop不赋值的话就默认直接切到末尾,这里是step为 正的情况
如果step为负,就从列表的最后一个元素开始开始,到列表的第一个元素结束
切片范围为[),取左不取右
lst2=[22,33,55,'python','cpp','java']print(ID(lst))# 输出切片前的列表对象的IDprint(lst2[1:5:1])# 输出结果为[33,55,‘python’,‘java’]print(ID(lst2[1:5:1]))# 输出切片后的ID
经过对比后发现切片 *** 作完成之后,列表的ID发生改变,这就说明了切片 *** 作的实质是生成一个新的列表对象,将指定的元素ID给到新生成的对象中去
print(lst2[::-2])# 这里的输出结果为['java','python',33]
里可以用这种方法进行逆序输出
修改代码看的更直观
lst=[77,55,88,66,44,11,2,'sst',True]# 一次修改一个值lst[1]='555'print(lst)# 一次修改多个值需要用到切片 *** 作lst[2:5:]=[44,66]print(lst)
删除lst=[10,20,11,22,11,'assd','kt']lst.remove(11)# 移除列表中的一个元素,如果有重复的元素,默认删除第一个print(lst)lst.pop(2)# 移除索引为2的元素,如果pop()值为空的话默认删除最后一个元素print(lst)
上面是进行单参数的修改,如果进行多元素的修改需要进行切片 *** 作
'''删除指定位置的元素'''lst[1:4:1]=[]# 将切片部分的值替换成空元素print(lst)
清空元素clear
lst.clear()print(lst)
删除列表
del lstprint(lst)# 这里由于lst列表被删除所以报错
3.排序既然有了列表那么肯定会有排序的需求,在C语言里面我个人喜欢用冒泡法对一个数组里的元素进行排序,在Python里面排序好像还挺方便的,使用 列表名.sort() 就可以对列表进行升序排列
lst=[100,55,46,87,44,66,55,22]lst.sort()print(lst)# 默认升序排列lst.sort(reverse=True)# 降序排列print(lst)
还有一种使用内置函数sorted()进行排序
print('---------------使用内置函数进行升序序排列----------------')lst2=[10,55,2,4,66,89]print('排序前的ID:',ID(lst2))lst3=sorted(lst2)print(lst3)print('排序后的ID:',ID(lst3))
在这里我产生了一个大胆的想法,这里是因为将排序后的结果赋值给了另一个变量,如果赋值给自己是不是不会变呢?
于是
lst2=sorted(lst2)print(lst2,ID(lst2))print()
结果是
排序前的ID: 2268982508544
排序后的ID: 2268982508672
直接打脸,这里的ID变了,应该是sorted函数生成了一个新的对象,所以变量名不变并不是代表它的ID不变,此时的变量不是原来的变量
后面我就想着如果列表里面不止一种类型的参数怎么排序
lst4=[True,False,2]lst4.sort()print(lst4)#[False, True, 2]
在将bool值和int型参数比较时,将Ture对应int值转化为1,False值转化为0后进行比较
lst5=['2','py','4','1','gt']lst5.sort()print(lst5)
如果全为str类型的变量,优先进行数字的字符串比较,其他的按序输出
含有str和int类型的参数不能进行比较哦,会报错
# 使用index方法来获取元素的索引(下标?)lst=['hello',667,'hello']print(lst.index('hello'))# 输出结果为0,若列表中有多个相同的元素只返回第一个的索引# print(lst.index('kkk'))# 查找的元素不存在的话,会报错# print(lst.index('hello',1,2))# 会报错,包括索引为1但不包括2print(lst.index('hello',1,3))
5.判断和遍历查找元素是否在列表对象里面使用in,not in
对列表的遍历使用for in
lst=[10,20,30,40,50,60,70,80,90,'hello','ytg']print(10 in lst)# Trueprint(100 in lst)# Falseprint('ytg' not in lst)# Falseprint('--------------------遍历列表元素------------------')for i in lst: print(i)# 输出结果10,20,30,40,50,60,70,80,90,'hello','ytg'
6.快速生成lst=[i*i for i in range(10)]print(lst)# 将0-9的平方数以列表的形式输出lst2=[j for j in range(2,11,2)]print(lst2)
这也没啥东西,看看就行
三.字典字典是一个可变的无序序列,与列表不一样的是,它的存储方式是以键值对的存储的,经过hash函数对键值的计算来确定键值对的位置(通过key值来确定value的位置)
1.创建字典的创建方式有两种
第一种是使用花括号来创建
pwd={'1号':55,'2号':66,'3号':44}print(pwd)# {'1号': 55, '2号': 66, '3号': 44}
第二种是用内置函数dict()创建
xiaoming=dict(name='ming',age=16,occupation='student')print(xiaoming)# {'name': 'ming', 'age': 16, 'occupation': 'student'}print(type(xiaoming))# <class 'dict'>
空字典
d={}print(d)
2.获取字典元素的获取使用[key]和get()函数
# []通过键来获取值print(pwd['1号'])# 55,若果给定的key不存在,会抛出errorprint(pwd.get('1号'))# 55,如果给定的key不存在不会报错会返回none# 可以设置初始的value值来修改返回值print(pwd.get('4号',777))# 当查找的key不存在时输出指定value
3.增删改字典的删除 *** 作使用 del 字典名[‘key’]
pwd={'ex':100,'es':520,'ct':10}print('删除前:',pwd)# 删除前: {'ex': 100, 'es': 520, 'ct': 10}del pwd['es']# 方括号print('删除后:',pwd)# 删除后: {'ex': 100, 'ct': 10}
字典清空
pwd.clear()
字典的新增
pwd['cs']=55# 同时可以用于key的value值的修改print('增加后',pwd)
3.获取字典的视图lay={'1':12,'2':13,'3':14,'4':15,'5':16}print(lay.keys())# 获取字典里所有的键print(lay.values())# 获取字典里全部的值print(lay.items())# 获取字典里所有的键值对,输出形式为元组
4.遍历字典的遍历使用for in循环
lay={'1':12,'2':13,'3':14,'4':15,'5':16}for item in lay: print(item,end='\t')# 默认输出key print(lay[item],end='\t')# 输出value print(lay.get(item))# 或者可以使用get方法获取value
总结:
字典中的元素是无序的,key为不可变对象,int和str类型参数都是不可变对象key不能重复,如果重复会出现值覆盖的情况,value会产生覆盖字典的内存空间是动态的,会根据需求去分配内存空间,它的效率提升是通过增加内存来实现的5.快速生成先定义两个列表一个作为key,一个作为value,这两个列表的元素个数一定要一样
item=['ft','fk','fi','fj']cpt=[15,16,18,147]
然后使用zip一一对应打包成元组
zip(item,cpt)
接着使用for in循环
cpk={item.upper():cpt for item,cpt in zip(item,cpt)}print(cpk)
结果:{‘FT’: 15, ‘FK’: 16, ‘FI’: 18, ‘FJ’: 147}
upper()将字母转化为大写
lower()将字母转化为小写
元组和字符串一样属于不可变的序列(在不改变ID的情况下不能进行增删改的 *** 作),列表,字典,是可变序列可以进行增删改的 *** 作
1.创建元组的创建方式有两种,第一种,直接进行小括号的 *** 作
t=('temp',55,'hello')# 这里的小括号可以省略
第二种使用内置函数tuple()赋值,这个函数可以进行数据类型的强制转换
f=tuple(('temp',56,22))
在定义只有一个元素的远足的时候需要加逗号和小括号
e=(12,)
2.遍历元组是可迭代对象可以使用for in进行输出
h1=[11,22,33]s1=(55,h1,'dlc')for item in s1: print(item)
或者通过索引一个一个输出
h1=[11,22,33]s1=(55,h1,'dlc')print(s1[0])print(s1[1])print(s1[2])
3.注意事项元组存储的是对象的的引用,元组中对象的引用是无法改变的,但是如果引用所指向的的对象是可变的那么该对象是可变的
h1=[11,22,33]s1=(55,h1,'dlc')print('修改前',s1,ID(s1))# 运行结果 修改前 (55, [11, 22, 33], 'dlc') 2291777599232# 这里是s1中的55,h1,dlc不变,但是可变列表h1可以进行增删改的 *** 作h1.extend('hello')print('修改后:',ID(s1))# 运行结果 修改后: (55, [11, 22, 33, 'h', 'e', 'l', 'l', 'o'], 'dlc') 2291777599232
在多个程序进行对数据的访问时,如果数据发生改变,就会导致程序出现问题,所以这时候选择元组,进行 *** 作,元组只能进行引用,但是不能修改
最后博主是纯小白,如果有啥写的不对的地方欢迎指正
以上是内存溢出为你收集整理的Python学习整理(之二)全部内容,希望文章能够帮你解决Python学习整理(之二)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)