流程控制while+else、for循环、range关键字、字符串内置方法
2022.3.8学习笔记
- 昨日作业讲解
- while+else
- 死循环与while的嵌套
- for循环基本使用
- range关键字
- for循环补充(break、continue、else)
- for循环的嵌套
- 基本数据类型及内置方法
一、昨日作业讲解
注意:前期作为小白的我,要先用中文写出步骤,之后翻译成python代码,另外编写代码不要考虑优化,实现功能即可。
!!!所以这里作业重新加注释写一遍
要点:先搭建主题功能,再配套优化
作业:
要求:编写一个猜年龄的游戏
基本要求:
如果不对的情况下可以猜三次 如果对了直接结束
拔高练习:
三次机会用完之后提示用户是否继续猜测 如果用户输入了y则再给用户三次机会 如果用户输入n则直接结束
# 1.定义真实的年龄
real_age = 18
# 2.由于需要计数,因此先设置一个计数器初始值
count = 1
# 2.需要用到循环,判断条件是否正确,输入正确则直接结束循环
while count < 4: # 设定计数为3次,条件满足进入循环
# 3.进入循环后需要判断用户输入是否正确,因此需要先获取用户输入信息
guess_age = input('请猜年龄>>>:')
if guess_age == str(real_age): # 判断年龄是否正确
print('答对了!') # 根据要求答对了需要直接结束因此加break
break
else:
count += 1 # 猜错后显示答错了,需要计数1次,因为进入else就说明已经答错了,所以需要放在print前面,否则会多执行1次print('答错了')
print('答错了!')
while count == 4: # count = 3 时代表用户输入了3次,这里加入循环
# 4.答错了之后要求询问用户是否需要再来3次,因此需要加入判断,并且需要与用户交互,需要加入一个input变量
ask= input('是否再来3次y/n>>>:')
if ask == 'y': # 加入判断
count = 1 # 选择y则重新计数
elif ask == 'n': # 选择n结束本层
count = 5
else:
print('错误指令')
二、while循环补充
1.while与else
while与else的关系跟if...else不同,它是并列关系,就是说while正常循环结束之后,会紧接着运行else下的子代码,因此:
(1)while与else连用没有从属以及互斥关系,两者按照顺序结构运行
(2)当while是被人为中断(break),则不运行else的子代码
2.死循环
死循环的意思是while下的子代码无限重复运行,而且会给计算机性能造成负担甚至破坏,如下
count = 1
while True:
count += 2
print(count)
这样的结果就是count = 1+2+2+2...无限循环,因此没有结果,而且无法自动退出循环,所以再写代码的时候需要注意,使用循环代码不是为了无限循环,而是为了达成某种条件结束运行。
3.while嵌套
举例,需要编写用户登录程序,登录成功以后再获取用户指令并打印,代码如下:
tag = True
while tag
username = input('username>>>:')
password = input('password>>>:')
if username == 'jason' and password == '123':
print('登录成功!')
while tag
question = input('请输入指令(exit退出)>>>:')
print(question)
if question == 'exit'
tag = False
else:
print('登录失败!')
这里需要注意,当while多层嵌套时,需要退出所有循环,有几种形式:
(1)while条件设置为数据为布尔值的变量:while tag
(2)while前一行设置初始条件,可以是带数字的变量如count = 1,这样只要想退出所有while循环,只要让此变量count=任意其他值就可以退出while循环
三、for循环
for循环能完成的代码,while循环都能做到,但是for在某些方面更加简单,比如说循环取值的时候。
for循环结构:
for+变量名+in+循环对象
循环对象可以是:字符串、列表、字典、元组、集合等
作用:for循环每1次循环都是在循环对象中将其中一个元素赋值给变量名,一次循环赋值一次,知道元素被取完
eg(这里以列表为例):
name_list = ['jason', 'mark', 'tony', 'tank']
for i in name_list:
print(i)
jason
mark
tony
tank # 运行结果为name_list的所有元素都被i取完
for循环补充:
# for + break
break为结束本层循环
# for + continue
continue为结束本次循环,直接开始下一次
# for + else
for循环正常结束后执行else的子代码
因此可以看出,for循环的结束指令与while相差无几!
range关键字
(1)range(10)
表示[0,1,2,3,4,5,6,7,8,9],range左边默认取0,右边10不取
(2)range(1,10)
表示[1,2,3,4,5,6,7,8,9,],1到9的数据集
(3)range(1,10,2)
表示[1,3,5,7,9],后面的2表示步长,代表1到10之间每隔1个数取值,表示每相邻2个数差值为2
利用for循环和range可以循环取值,如下:
for i in range(10):
print(i) # 运行结果为1-9的数字
四、数据类型内置方法
1.int
(1)类型转换
res = int('123') # 括号里面必须是数字类型的字符串等
(2)进制数转换
整型十进制转其他进制:
bin(100) # 十进制转二进制
oct(100) # 十进制转八进制
hex(100) # 十进制转十六进制
其他进制数转十进制:
int('0b1100100',2) # 二进制转十进制,2代表二进制
2.float
类型转换
res = float('11.11') # 字符串类型数字转浮点型
print(float('11')) # 运行结果为11.0(浮点型数字)
3.str
类型转换:
可以转换所有的数据类型
字符串:
s1 = 'hello world'
(1)索引取值
s1[0],所选值为h
(2)切片操作
s1[1:5],所选值为ello(顾头不顾尾,5所在索引的值不取)
(3)步长
s1[1:5:2],所选值为索引1-4之间间隔为1的数,即el,这个跟range步长取值比较相似,可以类比
(4)索引取切片拓展(倒着来)
s1[-1], 表示获取最后一个字符,即d
s1[-5:-1],表示-5到-2之间的值,即worl
s1[-1:-5:-1],本来括号内数字应当是由小到大,即从左到右,但是通过步长改为-1,可以将索引倒过来取值,即dlro
(5)统计字符串中字符的个数,空格也是字符
len(s1),表示s1字符的长度,结果为11,包含空格
(6)成员运算
print('11' in s1)
True # 结果为True
(7)strip移除字符串首尾指定的字符(使用频率高)
name = '$$jason$$'
name.strip(),表示移除前后字符串
name.strip('$'),表示移除前后$,结果为'jason'
name.lstrip('$'),表示移除左边$,结果为'jason$$'
name.rstrip('$'),表示移除右边$,结果为'$$jason'
(8)split按照指定的字符切割字符串
data = 'jason|123|dbj'
data.split('|'),表示以'|'分割字符串data,并且分割后是一个列表
这里可以结合解压赋值进行赋值
data = 'jason|123|dbj'
name, pwd, hobby = data.split('|') # 解压赋值
print(data.split('|', maxsplit=1)) # 结果为['jason','123|dbj'],默认从左往右切割,maxsplit按照字面意思理解就是最大切割数,为1则是切割1次
print(data.rsplit('|', maxsplit=1)) # 结果为['jason|123', 'DBJ'],rsplit表示从右往左切割,同理只切割1次
五、今日作业解答
'''
作业练习:
编写一个用户登录程序
要求最多尝试失误三次 过期自动提示并可重置尝试次数
用户登录成功之后进入内部循环 用户输入什么就打印什么 并给用户提供一个结束程序的特殊指令
获取用户输入的用户名和密码可以处理首尾空格
用户的用户名和密码使用变量存储 通过程序获取用户名和密码比对
data = 'jason|123'
'''
data = 'jason|123'
real_info = data.split('|')
count = 1
tag = True
while tag:
username = input('输入用户名>>>:').strip()
password = input('输入密码>>>:').strip()
info = [username,password]
if info == real_info:
print('登陆成功!')
while tag:
instruction = input('请输入您的指令>>>:')
if instruction == '退出':
tag = False
else:
print(instruction)
else:
count += 1
if count == 4:
while tag:
ask = input('已错误3次,是否再来3次(是/否)>>>:')
if ask == '是':
count = 1
break
elif ask == '否':
tag = False
else:
print('对不起,错误指令!')
else:
print('对不起用户名或密码错误!')


浙公网安备 33010602011771号