流程控制while+else、for循环、range关键字、字符串内置方法

2022.3.8学习笔记

  • 昨日作业讲解
  • while+else
  • 死循环与while的嵌套
  • for循环基本使用
  • range关键字
  • for循环补充(break、continue、else)
  • for循环的嵌套
  • 基本数据类型及内置方法

bg8CNR.jpg

一、昨日作业讲解

注意:前期作为小白的我,要先用中文写出步骤,之后翻译成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('对不起用户名或密码错误!')

bg82VJ.jpg

posted @ 2022-03-08 16:56  马氵寿  阅读(104)  评论(0)    收藏  举报