内容概要:
- 循环流程控制
- else语句
- string类的驻留机制
- 字符串的切片操作
- 字符串的相关操作
一.循环流程控制(break,continue)
在循环的执行过程中,有时我们需要对循环进行控制,而不是让循环从头到尾彻底执行完。这时我们需要
在程序加入流程控制的关键字。
1.循环流程控制-break
break 只能用在循环体之中. 如果在循环体之中遇到 break, 就会立即结束当前循环结构. (跳出循环的一种方式)
我们的循环有两种结束方式 :
- 判断循环条件得到假而结束.
- 在循环体的内部通过 break 结束. 在循环体的内部判断循环是否应该结束, 如果要结束,就使用break.
- 通常与分支结构if一起使用:
一旦符合if或else条件就会自动结束循环
5.举个例子:
需求:去询问你的姐姐让他给你买一双球鞋,如果她回答不愿意,就一直询问直到愿意为止,如果愿意就谢谢你的姐姐
#定义变量接受姐姐的输入
#问到愿意为止 => 死循环(循环次数未知)
while True:
choice = input('姐姐,你愿不愿意给我买一双球鞋(愿意y 不愿意n):')
if choice == 'y' or choice == 'Y':
print('谢谢!')
break #愿意的话就不用一直循环了,所以结束循环
else:
print('姐姐求求你了/(ㄒoㄒ)/~~')
print('执行后续代码....')
2.循环流程控制-continue
continue 语句只能用在循环语句中.
如果在循环体中碰到了continue则结束本次循环继续下次循环
举个例子就很容易理解啦😀
for i in range(10):
if i == 3:
continue
print(i)
运行得到:
由图可见跳过了3,这就是continue的作用了
二.else语句
与else语句配合使用的几种种情况:
- 之前写过的if…else…分支语句
- while…else…
- for…else…
与循环连用的else语句的作用条件:
如果 程序不是通过break跳出的,是正常结束的,结束后就会执行else的内容
-----举个例子:
需求 : 用户输入密码, 有三次机会, 如果正确, 登录成功.
如果三次机会都输入错误, 冻结此账户.
for i in range(3):
password = int(input('请输入密码:'))
if password == 666888:
print('密码正确,登录成功')
break
else:
print('密码错误')
else:
print('您的账户已被冻结,请联系管理员:陆小果')
运行得到结果如下:
第一种情况:
第二种情况:
三.string类的驻留机制
在程序开发中,字符串是程序员最常处理的数据类型
那么什么是字符串的驻留机制呢?
定义:相同的字符串内容在程序运行中,内存中仅有一份
也就是说,如果几个字符串是一样的(例如都是’python’),那么他们都在一个相同的内存中(这样可以节省内存)并且内存大小是有限的,字符串一般大小不能超过4M否则驻留机制失效
查看字符串的内存地址
使用python的内置方法:id()
例如:
a = 'python'
b = 'python'
print(id(a))
print(id(b))
运行得到:
这两串数字是相同的,也就是说明a与b的内存地址是相同的
四.字符串的切片操作
1.简介:字符串的切片操作就是对字符串进行截取,取出其中的一小段
说明: 字符串是不可变类型
- 不具备增删改等操作.
- 切片操作将产生新的对象
- 下标一般使用正向的
2.格式:
字符串[start:stop:step]
start 从哪个位置开始切呀? 默认为 0
stop 切到哪结束呀? 默认切到最后(与range相类似)
step 怎么切呀? 一个一个切呢? 还是隔一个切呢? 还是隔两个切呢? 默认是一个一个切
3.例题:
需求1 : 切出 hello 子字符串(substring)
str = 'hello,Python'
sub_string = str[0:5]
print(sub_string)
需求2 : 切出 Python 子字符串
str = 'hello,Python'
sub_string = str[6:12]
print(sub_string)
需求3 : 以下切片会得到什么结果?
str[: : 2]
答:从头切到尾,步长为2
str[: : -1]
答:正好将原字符串颠倒过来
str[0] => 取出h
str[6] =>取出P
五.字符串的相关操作
1.根据字符查找下标
刚刚我们是根据下标找到了对应的字符,现在我们要根据字符来查找它的下标
查找方法:
方法一:index() and rindex()
格式:字符串变量名.index() ()内写要查找的字符
需求:查找’hello,Python’中o的下标
index:从左往后筛查且只能找到一个
str = 'hello,Python'
index = str.index('o')
print(index)
运行得到:4
reindex:从右往左筛查且只能找到一个
str = 'hello,Python'
rindex = str.rindex
print(rindex)
运行得到:10
方法二:find and rfind
格式:字符串变量名.find() ()内写要查询的字符
需求:查找’hello,Python’中o的下标
具体操作呢与index和reindex相同
这个时候就会有同学好奇,这两种方法有区别吗?
答案是有但不在这上面
index类与find类的区别
index、reindex只能查找存在的字符,例如只能查找’hello,Python’中的’h’或’e’等等
如果查找一个不存在的字符,例如:'m’则会报错
而find、rfind如果查找不存在的字符,会得到-1 (这里得到的-1并非逆向下标而是不存在的意思)
str = 'hello,Python'
sub_string = str.find('m')
print(sub_string)
2.字符串的大小写转化
upper用法
str = 'LuXiaoguo'
upper_str = str.upper()
print(upper_str)
lower用法
str = 'LuXiaoguo'
lower_str = str.lower()
print(lower_str)
3.字符串的劈分
应用:
定义一个字符串
language = “Python|Java|PHP|JavaScript|C++|C|Swift|HTML”
language = "Python|Java|PHP|JavaScript|C++|C|Swift|HTML"
program_list = language.split('|') #切割后返回的结果是一个列表数据
print(program_list)
运行得到:
- ‘Python’, ‘Java’, ‘PHP’, ‘JavaScript’, ‘C++’, ‘C’, ‘Swift’, ‘HTML’]
这就是一个列表数据,与字符串相类似,[ ]内是一个整体(正如字符串’ '内是一个整体一样)
[ ]中用逗号隔开的是列表的元素,元素可以重复且与字符串一样具有下标(从0开始) - len() => python的内置方法,可以查看这个变量的长度
language = "Python|Java|PHP|JavaScript|C++|C|Swift|HTML"
program_list = language.split('|') #切割后返回的结果是一个列表数据
a = len(program_list)
print('f'a = {a})
运行得到:
a = 8
字符串劈分后返回一个列表数据,还可以通过join()将列表合并为字符串
例如:
language = "Python|Java|PHP|JavaScript|C++|C|Swift|HTML"
program_list = language.split('|') #切割后返回的结果是一个列表数据
result = '='.join(program_list)
print(result)
运行得到:
Python=Java=PHP=JavaScript=C++=C=Swift=HTML
3. len()在for…in…循环中的应用
language = "Python|Java|PHP|JavaScript|C++|C|Swift|HTML"
program_list = language.split('|') #切割后返回的结果是一个列表数据
for i in range(len(program_list)): #len(program_list) =>8 即循环8次
#观察发现:循环时,i的值与program_list中的元素下标相同
print(program_list[i]) #依次取出列表中的元素
运行得到:
4. isdecimal()函数:判断指定字符串是否全部都由十进制的数字组成(记死了:判断字符串)
例如:
password = input('请输入密码:')
a = password.isdecimal()
print(a)
#如果输入的密码均为数字则输出为True,否则输出为False
5. 字符串的替换
str = 'hello,Python,Python'
result = str.replace('Python','China') #将Python替换为China
print(result)
运行得到:
hello,China,China
str = 'hello,Python,Python'
result = str.replace('Python','China',1) #将Python替换为China,且只替换一次
print(result)
运行得到:
hello,China,Python