一:复习
上节课复习:
1、if判断
语法1:
if 条件:
code1
code2
code3
if 条件:
code1
code2
code3
if 条件:
code1
code2
code3
语法2:
if 条件:
code1
code2
code3
else:
code1
code2
code3
语法3:
if 条件1:
pass
elif 条件2:
pass
elif 条件3:
pass
else:
pass
强调:
if的多分支或自上而下一次匹配条件,一旦匹配成功就立刻执行该条件
下的自代码块,其余条件即便是成立也再去执行了
语法4:
if 条件1:
if 条件2:
pass
2、while循环(又称条件循环)
语法:
while 条件:
code1
code2
code3
day=1
while day < 11:
默写
听课
写作业
晚自习
day+=1
while+break:终止本层循环
while+continue:终止本次循环,直接进入下一次循环
while+else:else会在循环结束后进行一次判定,如果循环期间没有被break打断,就应该执行else的代码
while循环的嵌套:
while 条件1:
while 条件2:
break
break
tag=True
while tag:
while tag:
if 条件:
tag=False
3、for循环
语法:
l=[1,2,3]
for i in l:
print(i)
for i in range(1,5,2):#1 3
print(i)
l=['a','b','c']
for i in range(len(l)): #range(3)
print(i,l[i])
for+break
for+continue
for+else
今日内容:
数据类型+内置方法
二:数字类型
一:基本使用
1 int用途:年龄 号码 等级...
2 定义方式
age=10 #age=int(10)
x=int('1111') # int只能将纯数字的字符串转成十进制的整型
print(type(x))
3 常用操作+内置的方法
算数运算,比较运算
二:该类型总结
1 存一个值or存多个值
只能存一个值
age=10
age
2 有序or无序
没有有序无序这么一说
3 可变or不可变
可变不可变类型总结:
可变指的是改变原值,即在原值基础上进行修改
可变类型的底层原理:在id不变的情况下,值可以改变
不可变类型的底层原理:值改变,id也跟着变
int是不可变数据类型
age=10
print(id(age))
age=11
print(id(age))
了解(**):
长整型Long,只有在python2中才有长整型号
复数complex
x=1-2j
print(x.real)
print(x.imag)
print(type(x))
一:基本使用
1 用途:薪资 身高 体重
2 定义方式
salary=3.1 #salary=float(3.1)
n=float('3.1')
3 常用操作
算数运算 比较运算
#二:该类型总结
1 存一个值or存多个值
只能存一个值
2 有序or无序
没有有序无序这么一说
3 可变or不可变
float是不可变类型
x=3.1
print(id(x))
x=3.2
print(id(x))
三:字符串类型
一:基本使用
1 用途: 描述性质的数据,比如人的名字,单个爱好,地址
2 定义方式
name='egon' #name=str('egon')
x=str(1)
y=str(1.1)
z=str([1,2,3])
n=str({'a':1})
print(type(x))
print(type(y))
print(type(z))
print(type(n))
转成str类型
3 常用操作+内置的方法
优先掌握的操作(*****):
1、按索引取值(正向取+反向取) :只能取
msg='hello world'
print(type(msg[5]))
print(msg[-1])
msg[2]='A' 会报错,无法修改
2、切片(顾头不顾尾,步长)
msg='hello world'
print(msg[1:5],type(msg[1:5]))
print(msg[6:-1])
print(msg[6:11])
print(msg[6:])
print(msg[6::2])
了解(**)
print(msg[0:])
print(msg[::-1])
msg='hello world'
print(msg[-3:-6:-1])
print(msg[6:9:-1]) 不合法,会报错
3、长度len
msg='hello world'
print(len(msg))
4、成员运算in和not in
print('SB' in 'my name is alex,alex is SB')
print('alex' in 'my name is alex,alex is SB')
print('egon' not in 'my name is alex,alex is SB') # 推荐
print(not 'egon' in 'my name is alex,alex is SB')
5、移除空白strip
name=' e gon '
print(name.strip(' '))
print(name.strip())
name='****A*e*gon****'
print(name.strip('*'))
name='****egon****'
print(name.lstrip('*'))
print(name.rstrip('*'))
pwd=input('>>: ').strip() #pwd='123 ' 用于与用户交互移除空白字符
if pwd == '123':
print('login successful')
msg='cccabcdefgccccc'
'c'
print(msg.strip('c'))
print('*-=egon *&^'.strip('-= *&^'))
6、切分split
msg='egon:18:male:180:160'
l=msg.split(':')
print(l)
print(l[3])
7、循环(迭代)
msg='hello world'
for x in msg:
print(x)
需要掌握的操作(****)
1、strip,lstrip,rstrip
2、lower,upper
name='EoN'
print(name.lower())
name='egonN'
print(name.upper())
3、startswith,endswith
print('alex is SB'.startswith('alex'))
print('alex is SB'.endswith('B'))
4、format的三种玩法
print('my name is %s my age is %s' %('egon',18))
print('my name is {name} my age is {age}'.format(age=18,name='egon')) # 可以打破位置的限制,但仍能指名道姓地为指定的参数传值
print('my name is {} my age is {}'.format('egon',18))
print('my name is {0} my age is {1} {1} {1} {1}'.format('egon',18))
5、split,rsplit
info='egon:18:male'
print(info.split(':',1))
print(info.split(':',1)) #['egon','18:male']
print(info.rsplit(':',1)) #['egon:18','male']
6、join:只能将元素全为字符串的列表拼成一个大的字符串
info='egon:18:male'
l=info.split(':')
print(l)
new_info='-'.join(l)
print(new_info)
num=['a','b','c']
':'.join(num) #'a'+':'+'b'+':'+'c'
num=[1,2,'c']
':'.join(num) #1+':'+2+':'+'c'
7、replace
msg='my name is wupeiqi,wupeiqi is SB'
print(msg.replace('wupeiqi','Pig',1))
print(msg)
8、isdigit
print('111.1'.isdigit())
print('1111'.isdigit())
AGE=73
age=input('>>: ').strip() #age='asdfasdf'
if age.isdigit():
age=int(age)
if age > AGE:
print('too big')
elif age < AGE:
print('too small')
else:
print('you got it')
else:
print('必须输入数字啊傻叉')
其他操作(了解即可)(**)
1、find,rfind,index,rindex,count
msg='my name is alex,alex is hahaha'
print(msg.find('alex'))
print(msg.find('SB')) #找不到会返回-1
print(msg.index('alex'))
print(msg.index('SB')) # 找不到index会报错
print(msg.find('alex',0,3))
print(msg.count('alex'))
print(msg.count('alex',0,15))
2、center,ljust,rjust,zfill
print('info egon'.center(50,'-'))
print('info egon'.ljust(50,'-'))
print('info egon'.rjust(50,'-'))
print('info egon'.zfill(50))
3、expandtabs
print('a\tb\tc'.expandtabs(1))
4、captalize,swapcase,title
print('my name is egon'.capitalize())
print('my Name Is egon'.swapcase())
print('my name is egon'.title())
5、is数字系列
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='壹' #中文数字
num4='Ⅳ' #罗马数字
isdigit():bytes,unicode
print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit())
print(num4.isdigit())
isdecimal():unicode
print(num2.isdecimal())
print(num3.isdecimal())
print(num4.isdecimal())
isnumberic;unicode,中文,罗马
print(num2.isnumeric())
print(num3.isnumeric())
print(num4.isnumeric())
6、is其他
print('abasdf123123'.isalnum())
print('asdfasdf'.isalpha())
print('egon'.islower())
print('ABC'.isupper())
print(' '.isspace())
print('My Name Is Egon'.istitle())
#二:该类型总结
1 存一个值or存多个值
只能存一个值
2 有序or无序(是否有索引)
有序
3 可变or不可变
不可变 值变,id变
name='egon'
print(id(name))
name='alex'
print(id(name))
四:列表类型
作用:多个装备,多个爱好,多门课程,多个女朋友等
定义:[]内可以有多个任意类型的值,逗号分隔
my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])
l=list('hello') #类型转化 list内只能跟能够被for循环遍历的数据类型
print(l)
l=list({'a':1,'b':2}) #字典只能取key
print(l)
优先掌握的操作:
1、按索引存取值(正向存取+反向存取):即可存也可以取 值变,id不变
names=['alex','wxx','lxx','egon']
print(id(names))
names[0]='ALEX'
print(names)
print(id(names))
2、切片(顾头不顾尾,步长)
names=['alex','wxx','lxx','egon']
print(names[0:3])
3、长度
names=['alex','wxx','lxx','egon']
print(len(names))
4、成员运算in和not in
names=['alex','wxx','lxx','egon',4]
print(4 in names)
5、追加
names=['alex','wxx','lxx','egon']
names.append('cxx1')
names.append('cxx2')
names.append('cxx3')
print(names)
6、删除
names=['alex','wxx','lxx','egon']
del names[2]
print(names)
7、循环
names=['alex','wxx','lxx','egon']
for name in names:
print(name)
需要掌握的操作(****)
names=['alex','wxx','lxx','egon',4,3.1]
names.insert(1,'SB')
print(names)
names=['alex','wxx','lxx','egon',4,3.1]
res=names.remove('wxx') # 单纯的删掉,是按照元素的值去删除,没有返回值
print(res)
print(names)
names=['alex','wxx','lxx','egon',4,3.1]
res=names.pop(1) #拿走一个值,是按照索引去删除,有返回值
print(names)
print(res)
names=['alex','wxx','lxx','egon',4,3.1]
print(names.pop())
print(names.pop())
names=['alex','wxx','lxx','lxx','egon',4,3.1]
print(names.count('lxx'))
print(names.index('lxx'))
names.clear()
print(names)
x=names.copy()
print(x)
names.extend([1,2,3])
print(names)
names.reverse()
print(names)
names=[1,10,-3,11]
names.sort(reverse=True)
print(names)
二:该类型总结
1 存一个值or存多个值
可以存多个值,值都可以是任意数据类型
2 有序or无序
有序
3 可变or不可变
可变
l=['a','b']
print(id(l))
l[0]='A'
print(id(l))
五:今日作业
字符串与列表练习
一、有列表:names=['lxx','alex','wupeiqi','yuanhao',4,5]
#1、取出列表倒数第三个值
#2、从列表中切出子列表['alex','yuanhao']
#3、计算列表的长度
#4、编写程序,判断列表中是否存在'egon',如果不存在则追加一个元素'egon'
#6、编写程序,判断列表中如果存在'alex',则列表中的'alex'改成'alex_SB',如果存在'egon'则删除
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#1.1 names=['lxx','alex','wupeiqi','yuanhao',4,5] print(names[-3]) #1.2 names=['lxx','alex','wupeiqi','yuanhao',4,5] print(names[1:4:2]) #1.3 names=['lxx','alex','wupeiqi','yuanhao',4,5] print(len(names)) #1.4 names=['lxx','alex','wupeiqi','yuanhao',4,5] if 'egon' not in names: print('不存在egon') names.append('egon') #1.6 names=['lxx','alex','wupeiqi','yuanhao',4,5] if 'alex' in names: print('存在alex') i = names.index('alex') names[i] = alex_SB if 'egon' in names: print('存在egon') names.remove('egon')
二、有如下列表,请采用两种方式取出列表中的值
my_girl_friends=['alex','wupeiqi','yuanhao',4,5]
方式一:依赖索引,请写出while循环与for循环两种实现方式
方式二:不依赖索引
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
my_girl_friends = ['alex', 'wupeiqi', 'yuanhao', 4, 5] count = 0 while count < len(my_girl_friends): print(my_girl_friends[count]) count += 1 my_girl_friends = ['alex', 'wupeiqi', 'yuanhao', 4, 5] for i in range(len(my_girl_friends)): print(my_girl_friends[i]) my_girl_friends = ['alex', 'wupeiqi', 'yuanhao', 4, 5] for i in my_girl_friends: print(i)
三、说明白,数字、字符串、列表之间能否比较大小,如果能,请说明白各种情况下的比较方式
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
# 数字只能与数字比较,不能与字符串或列表比较大小 # 字符串只能与字符串比较,元素之间对应比较,不能与数字或列表比较大小 # 列表只能与列表比较,元素之间对应比较,不能与数字或字符串比较大小
四、介绍字符串格式化的两种方式%与format,然后详细介绍format的三种使用方法
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
print('my name is %s my age is %s' %('egon',18)) print('my name is {name} my age is {age}'.format(age=18,name='egon')) print('my name is {} my age is {}'.format('egon',18)) print('my name is {0} my age is {1} {1} {1} {1}'.format('egon',18))
五、链式赋值
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
a=b=c=d=10 print('a={0} b={1} c={2} d={3}'.format(a,b,c,d))
六、交叉赋值
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
x=1 y=2 x,y=y,x print('x={0} y={1}'.format(x,y))
七、变量的解压
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
x,*_,y=[1,2,3,4,5,6] print('x={} y={}'.format(x,y))
八、取倒数第一个字符
name='egon你好'
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
name='egon你好' print(name[-1])
九、切片:切出用户名alex
msg='alex:123:admin'
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
msg = 'alex:123:admin' print(msg[:4])
十、统计msg的字符个数
msg='alex say my name is sb'
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
msg = 'alex say my name is sb' print(len(msg))
十一、成员运算in和not in
有如下列表,打印名字中包含sb的用户的信息(名字、年龄)
students=[
{'name':'alex_sb','age':18},
{'name':'egon','age':18},
{'name':'wupeiqi_sb','age':18},
]
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
students = [ {'name': 'alex_sb', 'age': 18}, {'name': 'egon', 'age': 18}, {'name': 'wupeiqi_sb', 'age': 18}, ] for i in range(len(students)): if 'sb' in students[i]['name']: print(students[i]['name'],students[i]['age'])
十二、编写用户认证程序,程序后台存放的用户名为'egon',密码为'123'
要求用户输入用户名密码,认证通过则打印登陆成功,其中用户输入的用户名左右两侧可能携带多个控制,
请做相应的处理
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
uname_from_db = 'egon' pwd_from_db = '123' uname_from_inp = input('username>>: ').strip() pwd_from_inp = input('password>>: ')#.strip() if uname_from_db == uname_from_inp and pwd_from_db == pwd_from_inp: print('login success') else: print('login failure')
十三、将下述字符串格式化,得到一个列表
user='root:x:0:0::/root:/bin/bash'
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
user = 'root:x:0:0::/root:/bin/bash' l_user = user.split(':') print(type(l_user)) print(l_user)
十四、请用两种方式循环出字符串包含的每个字符
msg='egon你好'
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
msg = 'egon你好' for i in msg: print(i) msg = 'egon你好' count = 0 while count < len(msg): print(msg[count]) count += 1
十五:字符串练习
# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
name = " aleX"
# 1) 移除 name 变量对应的值两边的空格,并输出处理结果
# 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果
# 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
# 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
# 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
# 6) 将 name 变量对应的值变大写,并输出结果
# 7) 将 name 变量对应的值变小写,并输出结果
# 8) 请输出 name 变量对应的值的第 2 个字符?
# 9) 请输出 name 变量对应的值的前 3 个字符?
# 10) 请输出 name 变量对应的值的后 2 个字符?
# 11) 请输出 name 变量对应的值中 “e” 所在索引位置?
# 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#1 name = " aleX" print(name.strip()) #2 name = " aleX" print(name.startswith('al')) #3 name = " aleX" print(name.endswith('X')) #4 name = " aleX" print(name.replace('l','p')) #5 name = " aleX" print(name.split('l')) #6 name = " aleX" print(name.upper()) #7 name = " aleX" print(name.lower()) #8 name = " aleX" print(name[1]) #9 name = " aleX" print(name[:3]) #10 name = " aleX" print(name[-2:]) #11 name = " aleX" print(name.find('e')) #12 name = " aleX" x = len(name) - 1 print(name[:x])
十六:有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
data = ['alex', 49, [1900, 3, 18]] name,age,_ = data bir_year,bir_mon,bir_day = data[2] print(name,age,bir_year,bir_mon,bir_day)
十七:for循环练习
1、使用嵌套for循环打印99乘法表(补充:不换行打印的方法为print('xxxx',end=''))
提示:
for i in range(...):
for j in range(...):
...
2、使用嵌套for循环打印金字塔,金字塔层数为5层,要求每一个空格、每一个*都必须单独打印
*
***
*****
*******
*********
提示:
一个for循环套两个小的for循环,两个小的for一循环,一个控制打印空格,一个控制打印*
思路参考:http://www.cnblogs.com/linhaifeng/articles/7133167.html#_label14
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
# 17.1 for i in range(1,10): for j in range(1,i+1): print('{}*{}={}'.format(i,j,i*j),end=' ') print() # 17.2 max_level = input('请输入层数: ') max_level = int(max_level) for current_level in range(1, max_level + 1): for space in range(max_level - current_level): print(' ', end='') for asterisk in range(2 * current_level - 1): print('*', end='') print()
十八:购物车程序
#需求:
启动程序后,先认证用户名与密码,认证成功则让用户输入工资,然后打印商品列表的详细信息,商品信息的数据结构可以像下面这种格式,也可以自己定制
goods=[
{'name':'mac','price':20000},
{'name':'lenovo','price':10000},
{'name':'apple','price':200},
{'name':'tesla','price':1000000},
]
失败则重新登录,超过三次则退出程序
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额