while和for循环的补充与数据类型的内置方法(int, float, str)
阅读原文时间:2023年07月08日阅读:1

目录

while与for循环的补充

else不仅能和if连用,它还能与while连用。

语法结构:

while 条件:
    循环体代码
    ...
else:
    代码块
    ...

注意:else中的代码块并不是一定会执行,只有在while循环正常结束的情况下才会执行else中的代码,如果使用break跳出while循环,则不会执行else中的代码。

举例:

# 不用break跳出循环时
num = 1
while num < 5:
    print(num)
    num += 1
else:
    print('while循环正常结束了!!')
'''
输出结果
1
2
3
4
while循环正常结束了!!
'''


# 用break跳出循环时
num = 1
while num < 5:
    if num == 3:
        break
    print(num)
    num += 1
else:
    print('while循环正常结束了!!')
'''
输出结果
1
2
'''

死循环就是永远无法结束的循环,并且会一直占用CPU工作,极度的影响电脑的性能,甚至造成硬件的损坏。

举例:

# 死循环
i = 0
while i < 10:
    print('出不去了')
# 如果循环内的代码不会改变i的值
# 这个程序就会一直执行代码print('出不去了')

while与if一样,可以在子代码中加入多个while循环。

举例:

# while的嵌套
i = j = 0
while i < 4:
    while j < 4:
        print('*', end='')  # 让输出在同一行
        j += 1  # 防止死循环
    print()  # 换行
    i += 1  # 防止死循环
    j = 0  # 让程序可以在进入小的while循环
'''
输出结果
****
****
****
****
'''

range函数

range函数在python2和python3中有所区别

  • python2中range是直接生成一个列表,元素很多的情况下比较占用空间
  • python3中range相当于是哆啦A梦的口袋一样,不占空间但是可以取出很多数据。

range函数主要用于生成一个整型的数据集。

举例:

# range函数中只有单个数字,取值范围为0<=i<4的整数
for i in range(4):
    print(i)
'''
输出结果
0
1
2
3
'''
# range函数中有两个数字,取值范围为1<=i<4的整数
for i in range(1,4):
    print(i)
'''
1
2
3
'''
# range函数中有三个数字,前两个代表范围,第三个代表从起始位开始,每次增加的数值
for i in range(1, 6, 2):
    print(i)
'''
1
3
5
'''

break与continue与else

这三个关键字的用法在for循环中与在while循环中一致。

for循环的嵌套

while和if都能嵌套,for循环当然也可以。

举例:

# 输出3*3的星号矩阵
for i in range(4):  # i取值0<=i<4
    for j in range(4):  # j取值0<=j<4
        print('*', end='')
    print()  # 换行
'''
输出结果
***
***
***
'''

数据类型的内置方法

  1. 类型转换

    int()可以将字符串类型转换成整型

    但是字符串不能是带有小数点的数字或文本

    res = int('123')
    print(res, type(res))
    '''
    输出结果
    123
    '''

  2. 进制数转换

    将其他进制转换成十进制

    二进制为0b开头

    print(bin(100)) # 输出结果:0b1100100

    八进制为0o开头

    print(oct(100)) # 输出结果:0o144

    十六进制为0x开头

    print(hex(100)) # 输出结果:0x64

    将十进制转换成其他进制

    使用int(a, b)

    a为字符串类型,填写内容;b为整型,填写需要转成的进制

    print(int('1100100', 2)) # 输出结果:100
    print(int('144', 8)) # 输出结果:100
    print(int('64', 16)) # 输出结果:100

  3. 类型转换

    float()可以将整型或者数字字符串转换成浮点型

    res = float('11.11')
    print(res, type(res)) # 输出结果:11.11
    res = float('11')
    print(res, type(res)) # 输出结果:11.0
    res = float(11)
    print(res, type(res)) # 输出结果:11.0

  1. 类型转换

    str()可以转换所有的基本数据类型

    print(str(11), type(str(11)))
    print(str(11.11), type(str(11.11)))
    print(str([1, 2, 3, 4]), type(str([1, 2, 3, 4])))
    print(str({'name': 'jason'}), type(str({'name': 'jason'})))
    print(str((1, 2, 3, 4)), type(str((1, 2, 3, 4))))
    print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4})))
    print(str(True), type(str(True)))

输出结果:

  1. 索引取值

    s = 'hello,world'

    字符串的索引取值与列表一样,相当于是把字符串中的内容一个个字符拆分开存入列表中

    print(s[0]) # 输出结果:h
    print(s[1]) # 输出结果:e

  2. 切片操作

    在索引取值的基础上,我们可以用切片实现取出部分字符

    s = 'hello,world'
    print(s[1:4]) # 输出结果:ell

    这里的1代表从s[1]:'e'开始,4代表到s[3]:'l'结束,取不到s[4]

  3. 步长

    在切片操作的基础上,我们可以用切片中的步长来跳过一些字符

    s = 'hello,world'
    print(s[1:8:2]) # 输出结果:el,o

    这里的1代表从s[1]:'e'开始,8代表到s[7]:'o'结束,2代表索引加2

    也就是取出了s[1]:'e',s[3]:'l',s[5]:',',s[7]:'o'

  4. 切片拓展

    如果切片里面的数值是负数,代表从右开始数

    s = 'hello,world'
    print(s[-1]) # 输出结果:d

    如果步长为负数,代表从右开始取值

    print(s[-1:-8:-1]) # 输出结果:drwo

  5. 统计字符串长度

    len()用来计算字符串的长度

    print(len('ab cd')) # 输出结果:5

  6. 成员运算

    in可以来判断某个字符串是否被另一个字符串所包含

    print('ll' in 'hello,world') # 输出结果:True

  7. 移除首位指定字符

    strip()用于移除字符串首尾指定字符

    s = ' asd '
    print(s.strip()) # 输出结果:asd

    strip()里面不填写内容默认移除首尾空格

    s = '###asd#'
    print(s.strip('#')) # 输出结果:asd

  8. 按照指定字符切割字符串

    split()用于按照指定字符切割字符串,并以列表形式存储

    data = 'tom|1111|eat'
    print(data.split('|')) # 输出结果:['tom', '1111', 'eat']

    切割字符串时也可以指定切割数量

    print(data.split('|', 1)) # 输出结果:['tom', '1111|eat']

    也可以用rsplit()选择从右边开切

    print(data.rsplit('|', 1)) # 输出结果:['tom|1111', 'eat']

作业

编写一个用户登录程序。

要求:

  1. 最多尝试失误三次,过期自动提示并可重置尝试次数。
  2. 用户登录成功之后进入内部循环,用户输入什么就打印什么,并给用户提供一个结束程序的特殊指令。
  3. 获取用户输入的用户名和密码可以处理首尾空格。
  4. 用户的用户名和密码使用一个字符串存储,通过程序获取用户名和密码比对(data = 'tom|123')。

答案

is_quit = True  # 判断程序是否要继续运行的变量
login_count = 3  # 存储可输错密码的次数
login_msg = 'tom|123'  # 存储登录的用户名和密码,用|分开
real_username = login_msg.split('|')[0]  # 存储登录的用户名
real_password = login_msg.split('|')[1]  # 存储登录的密码
while is_quit:  # 让程序一直运行,直到is_quit为False
    # 获取用户输入的用户名并将首尾的空格去除
    username = input("请输入用户名:").strip()
    # 获取用户输入的密码并将首尾的空格去除
    password = input("请输入密码:").strip()
    # 判断用户输入的用户名和密码是否与存储的用户名和密码一致
    if username == real_username and password == real_password:
        print("登录成功!")  # 提示用户登录成功
        while is_quit:  # 这里用于用户登录成功后可以一直输入指令
            cmd = input("请输入指令:")  # 获取用户的输入指令
            if cmd == 'quit':  # 判断用户是否要退出
                is_quit = False  # 用于退出大while和小while的循环
                print("拜拜了您嘞!")  # 与用户的离别语
            else:  # 如果用户输入的不是quit,则执行用户的指令
                print("正在执行:%s..." % cmd)
    else: # 这里写的是用户输错用户名或密码的情况
        login_count -= 1  # 输错了用户名或密码,次数就要减1次
        # 提醒用户输错了账号,告诉用户剩余的机会
        print("用户名或密码错误,你还有%d次机会!" % login_count)
        # 判断用户的次数是否用完
        if login_count == 0:
            # 提醒用户次数用尽,并提醒用户接下来的操作
            print("你的剩余机会已用尽,是否重置(y/n)")
            while True:  # 确保用户输入的是y或者n,而不是其他
                cmd = input()  # 获取用户输入
                if cmd == 'y':
                    # 如果用户输入了y,则重置登录可输错密码的次数
                    login_count = 3
                    # 退出当前循环
                    break
                elif cmd == 'n':
                    # 如果用户输入了n,则与用户告别
                    print("拜拜了您嘞!")
                    # 因为用户布响丸啦,让最大的那个while循环条件不成立
                    is_quit = False
                else:
                    # 提醒用户不要输入y或n以外的指令
                    print("请输入y或n")