复习:
深浅copy
浅的copy:只copy列表第一层(底层,第一层所有的内存地址,不区分可变不可变,全都copy,导致copy得到的新列表,无论是读写,都关联到一起)
深copy:每一层都copy,列表嵌套,对所有层都copy(针对列表第一层,做区分,不可变的内存地址直接copy(沿用原来的地址),可变的创建新的内存地址,然后具体的值还是指向原来的值)关键:跟原来的列表改写操作,会独立开。
while循环(重复做某件事)
while+条件(条件成立执行),换行缩进,子代码
退出循环两种方式:
1)条件在某个时刻,变成false(需要在下一次循环的时候生效,退出循环)
2)break,只要运行到break,立马跳出该层
嵌套的时候跳出循环,每一个while条件加上最内层的条件判定false;用break,得在每一层while循环都要配套break
while+continue(终止本次循环,直接进入下一次循环)
continue之后不要写重复的其他代码,因为是不会执行的
while+else(while循环结束以后,并且不是被break强制退出的时候,才会运行else之下的子代码)
----------今日----------
循环之for循环(迭代循环,取值循环,在某种场景下,比前者更简洁)
what:python提供的第二种循环机制
why:理论上for循环能做的事情,while循环都可以做;之所以要有for循环,是因为在for循环在循环取值(遍历取值)上比while循环上更简洁
how:基本语法与使用
for 变量名 in 可迭代对象(函数的时候,一并讲解;可以是:列表,字典,字符串,元祖,集合) :
代码块
1.1、for循环应用
案例1:列表循环取值
简单版
l = ['alex_dsb','lxx_dsb','egon_nb']
for x in l: # 第一次x=alex_dsb,后面依次覆盖x的值
print (x)
复杂版
l = ['alex_dsb','lxx_dsb','egon_nb']
i = 0
while 1 < 3 :
print(l[i])
i += 1
案例2:字典循环取值
简单版
dic = {'k1':111,'k2':222,'k3':333}
for x in dic :
print (k,dic[k])
复杂版:while循环可以遍历字典,太麻烦了
案例3:字符串循环取值
简单版
msg = 'you can you up,no can no bb'
for x in msg :
print(x)
总结:for&while
1、相同:都是循环,for能做的,while都能做
2、不同:while(条件),循环次数取决条件什么时候变假
for(取值),循环次数取决in后包含的的值的个数
for循环控制循环次数:range(),在python3当中得到的是一直“会下单的老母鸡”,需要的值,临时建造出来
有局限性(顾头不顾尾,最后只能取到倒数第二个值):
range(10) # 0到9,python2
range(1,9) # 1到8,python2
range(1,9,1) # 1到9,最后一个参数位步长,就是1到下一个数字的间隔,python2
补充range:
for搭配range,可以按照索引取值
l = ['aaa','bbb','ccc']
for i in range(len(l))
print (i,l[i])
1.2、for循环嵌套
for i in range(3):
print ('外层循环-->',i)
for j in range(5):
print ('内层-->',j) # 外层循环每循环一次,内层都要完整的循环一遍,终止for循环只有break一种方案
1.3、for+break
for x in range(3) :
inp_name = input('name: ')
inp_pwd = input('passwd: ')
if usrname == inp_name and passwd == inp_pwd :
print ('成功')
break
1.4、for+continue
for i in range(4):
if i == 4:
continue
print (i)
1.5、for+else
关于print的补充
print逗号的使用:
print('hello','world') #
print换行符:
print('hello\n')
print('world')
print值end参数的使用:
print('hello',end='*')
今日内容:基本数据类型极其内置方法(python解释器预先提供好的,方便使用)
1、数字
1.1、int
作用:记录整数相关的数值
定义:对于整数的赋值,eg:age = 10 # 相当于age = int (10)
名字+(),触发一个功能,括号内的为需要传递的参数,得到的结果为返回值
类型转换:int(),可以转换纯数字的字符串转成int(带有小数点的float不能)
数字分各种进制的概念
10->二进制,除二取余法。 # 11->1011
二进制->十进制
10->2 # print (bin(11)) 结果开头的0b代表二进制
10->8 # print (oct(11)) 结果开头的0o代表八进制
10->16 # print (hex(11)) 结果开头的0x代表十六进制
2->10 # int('0b1011',2) 后面的2代表二进制
2->8 # int('0o13',8) 后面的8代表八进制
2->16 # int('0xb',16) 后面的16代表十六进制
使用:
1.2、float
作用:记录小数相关的数值
定义:对于小数的赋值,eg:salary = 3.1
类型转换:float('3.1'),转换完之后可以与int类型做数学运算
----------数字类型(int&float)的使用:
没有需要掌握的内置方法,他们的使用就是数学运算+比较运算
----->了解:数字类型还有一种类型叫虚数(有些场景使用i表示,有些场景使用j表示,因为i跟物理上的单位冲突)
x = 10 + 2j
x.real # 查看真实部分
x.imag # 查看虚数部分
python2中还有长整形long,python3中直接并到了int类型中
2、字符串
作用:记录描述性质的状态
定义:单、双、三引号(单双都可以)之内具有描述性质的字符串
类型转换:str(),可以把任意其他类型都转成字符串
使用:内置方法
2.1、按照索引取值(正向+反向取值):只能取
正向取:
msg = 'hello world'
print(msg[0])
反向取:
print(msg[-1])
只能取(字符串是不可变类型,python对于有序的东西都会提供了索引的功能):
msg[0] = 'H'
2.2、切片:索引的拓展应用,从一个大字符串中copy出一个子字符串
msg = 'hello world'
res = msg[0:5] # 顾头不顾尾
print(res)
步长
res = msg[0:5:2]
print(res)
反向步长
res = msg[5:0:-1] # 起始位置位第六个字符,结束位置为第一个字符,但是第一个字符取不到
print(res)
res = msg[:] # 从开头到结尾,完整的copy
res = msg[::-1] # 将字符串倒过来完整输出一遍
2.3、同级长度len
print(len(msg))
2.4、成员运算in和not in,判断一个子字符串是否存在与一个大字符串中
print('alex' in 'alex is sb')
print('alex' not in 'alex is sb')
2.5、移除空白strip:默认移除字符串左右两侧的符号
msg = ' egon '
res = msg.strip() # 默认去掉空格,不会改变原值
print(res)
了解:strip只去掉两边,不去中间
eg:msg = '******e***gon******'
print(msg.strip('*'))
--->e***gon
应用:
inp_user = input('your name>>:').strip() # 防止用户手抖多输入空格
inp_pwd = input('your name>>:').strip()
if inp_user == 'egon' and inp_pwd == '123'
print('成功')
else :
print('失败')
2.6、切分split:把一个字符串按照某种分隔符尽情切分,得到一个列表
info = 'egon:18:male'
info.split(':') # 括号内的参数不做传导,默认分割符为空格
info.split(':',1) # 后面的1代表指定的分隔次数
2.7、循环字符串
info = 'egon:18:male'
for x in info :
print(x)
2.8、strip,lstrip,rstrip
lstrip() #只去左边
rstrip() #只去右边
2.9、lower,upper:全都改成大写,改成小写
2.10、startswith,endswith:判断是否是某字符开头或者结尾
2.11、format
2.12、split,rsplit:将字符串切成列表
rsplit:从右往左切
2.13、join:把列表拼接成为字符串
l = ['egon','18','male']
res = ':'.join(l) # 按照某个分隔符,把元素全为字符串的列表拼接成一个大字符串
2.14、replace:字符替换
msg = 'you can you up'
msg.replase('you','YOU',) # 最后一个
2.15、isdigit:判断字符串是否由纯数字组成
age = input('输入年龄: ').strip()
if age.isdigit():
age = int (age)
else:
print('必须要输入数字')
------------>了解
2.16、find,rfind,index,rindex,count
msg.find('e') # 返回要查抄的字符串在大字符串中的起始索引,返回的找到的值的位置,找不到返回-1
msg.index('e') # 找不到的时候,程序直接异常
msg='hello egon hahaha egon、 egon'
print(msg.count('egon')) # 计算出egon这个单词出现的次数
2.17、center,ljust,rjust,zfill
print('egon'.center(50,'*')) # 居中对齐
print('egon'.ljust(50,'*')) # 靠左对齐
print('egon'.rjust(50,'*')) # 靠右对齐
print('egon'.zfill(10)) # 规定只能靠右对齐,用0补全
2.18、expandtabs
msg='hello\tworld'
print(msg.expandtabs(2)) # 设置制表符代表的空格数为2
2.19、captalize,swapcase,title
print("hello world egon".capitalize())
print("Hello WorLd EGon".swapcase())
print("hello world egon".title())
2.20、is系列
print('abc'.islower())
print('ABC'.isupper())
print('Hello World'.istitle())
print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True
print('ad'.isalpha()) # 字符串由由字母组成结果为True
print(' '.isspace()) # 字符串由空格组成结果为True
print('print'.isidentifier())
print('age_of_egon'.isidentifier())
print('1age_of_egon'.isidentifier())
2.21、is系列中识别数字(isdigit、isnumberic、isdecimal)
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字
isdigit只能识别:num1、num2
print(num1.isdigit()) # True
print(num2.isdigit()) # True
print(num3.isdigit()) # False
print(num4.isdigit()) # False
isnumberic可以识别:num2、num3、num4
print(num2.isnumeric()) # True
print(num3.isnumeric()) # True
print(num4.isnumeric()) # True
isdecimal只能识别:num2
print(num2.isdecimal()) # True
print(num3.isdecimal()) # False
print(num4.isdecimal()) # False
浙公网安备 33010602011771号