while与for循环的补充

while + else

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的嵌套

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

举例:

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

for补充

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() # 换行
'''
输出结果
***
***
***
'''

数据类型的内置方法

int整型

  1. 类型转换
# int()可以将字符串类型转换成整型
# 但是字符串不能是带有小数点的数字或文本
res = int('123')
print(res, type(res))
'''
输出结果
123 <class 'int'>
'''
  1. 进制数转换
# 将其他进制转换成十进制
# 二进制为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

float浮点型

  1. 类型转换
# float()可以将整型或者数字字符串转换成浮点型
res = float('11.11')
print(res, type(res)) # 输出结果:11.11 <class 'float'>
res = float('11')
print(res, type(res)) # 输出结果:11.0 <class 'float'>
res = float(11)
print(res, type(res)) # 输出结果:11.0 <class 'float'>

str字符串

  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
  1. 切片操作
# 在索引取值的基础上,我们可以用切片实现取出部分字符
s = 'hello,world'
print(s[1:4]) # 输出结果:ell
# 这里的1代表从s[1]:'e'开始,4代表到s[3]:'l'结束,取不到s[4]
  1. 步长
# 在切片操作的基础上,我们可以用切片中的步长来跳过一些字符
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'
  1. 切片拓展
# 如果切片里面的数值是负数,代表从右开始数
s = 'hello,world'
print(s[-1]) # 输出结果:d # 如果步长为负数,代表从右开始取值
print(s[-1:-8:-1]) # 输出结果:drwo
  1. 统计字符串长度
# len()用来计算字符串的长度
print(len('ab cd')) # 输出结果:5
  1. 成员运算
# in可以来判断某个字符串是否被另一个字符串所包含
print('ll' in 'hello,world') # 输出结果:True
  1. 移除首位指定字符
# strip()用于移除字符串首尾指定字符
s = ' asd '
print(s.strip()) # 输出结果:asd
# strip()里面不填写内容默认移除首尾空格
s = '###asd#'
print(s.strip('#')) # 输出结果:asd
  1. 按照指定字符切割字符串
# 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")

while和for循环的补充与数据类型的内置方法(int, float, str)的更多相关文章

  1. while + else 使用,while死循环与while的嵌套,for循环基本使用,range关键字,for的循环补充(break、continue、else) ,for循环的嵌套,基本数据类型及内置方法

    今日内容 内容概要 while + else 使用 while死循环与while的嵌套 for循环基本使用 range关键字 for的循环补充(break.continue.else) for循环的嵌 ...

  2. wlile、 for循环和基本数据类型及内置方法

    while + else 1.while与else连用 当while没有被关键字break主动结束的情况下 正常结束循环体代码之后执行else的子代码 """ while ...

  3. if循环&数据类型的内置方法(上)

    目录 if循环&数据类型的内置方法 for循环 range关键字 for+break for+continue for+else for循环的嵌套使用 数据类型的内置方法 if循环&数 ...

  4. python 入门基础4 --数据类型及内置方法

    今日目录: 零.解压赋值+for循环 一. 可变/不可变和有序/无序 二.基本数据类型及内置方法 1.整型 int 2.浮点型float 3.字符串类型 4.列表类型 三.后期补充内容 零.解压赋值+ ...

  5. Day 07 数据类型的内置方法[列表,元组,字典,集合]

    数据类型的内置方法 一:列表类型[list] 1.用途:多个爱好,多个名字,多个装备等等 2.定义:[]内以逗号分隔多个元素,可以是任意类型的值 3.存在一个值/多个值:多个值 4.有序or无序:有序 ...

  6. day6 基本数据类型及内置方法

    day6 基本数据类型及内置方法 一.10进制转其他进制 1. 十进制转二进制 print(bin(11)) #0b1011 2. 十进制转八进制 print(hex(11)) #0o13 3. 十进 ...

  7. python学习day7 数据类型及内置方法补充

    http://www.cnblogs.com/linhaifeng/articles/7133357.html#_label4 1.列表类型 用途:记录多个值(一般存放同属性的值) 定义方法 在[]内 ...

  8. python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05

    迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...

  9. python入门之数据类型及内置方法

    目录 一.题记 二.整形int 2.1 用途 2.2 定义方式 2.3 常用方法 2.3.1 进制之间的转换 2.3.2 数据类型转换 3 类型总结 三.浮点型float 3.1 用途 3.2 定义方 ...

随机推荐

  1. SQL之总结(四)---null问题的处理

    概述:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. NULL 值的处理方式与其他值不同. NULL 用作未知的或不适 ...

  2. java中接口interface可以持有多个类的共享常量

    3.接口持有多个类的共享常量  接口另一主要功能,马克-to-win: 可以使用接口来引入多个类的共享常量.所有的这些变量名都将作为常量看待.所有定义在接口中的常量都默认为public.static和 ...

  3. Restful-API和传统API的对比

    阮一峰 RestFul-API 详解链接:  http://www.ruanyifeng.com/blog/2014/05/restful_api.html 举例,传统api设计: 举例,RestFu ...

  4. js判断输入数字是否是整数,金额、数字

    function isIntNum(strNum){//js判断输入数字是否是整数 仅供学习思想 var strCheckNum = strNum+""; if(strCheckN ...

  5. SQL注入之延迟盲注

    延迟盲注 你不知道你输入的数据在sql被执行后是否是正确或错误的.你只知道有数据. 利用原理 借助if语句,如果正确就sleep(5),延迟5秒返回数据.通过数据返回的时间大小判断自己的语句是否正确执 ...

  6. Mybatis-typeAliases的作用

    其他具体代码请访问->mybatis的快速入门 1.在mybatis核心配置文件SqlMapperConfig.xml中配置别名 <!-- 定义别名--> <typeAlias ...

  7. MongoDB 集群-主从复制(一主二从)

    MongoDB 集群-主从复制(一主二从) 官方文档 https://docs.mongodb.com/manual/tutorial/deploy-replica-set/ https://docs ...

  8. Azure Virtual Desktop(一)创建配置管理

    一,引言 Azure 虚拟创面是一项 Azure 服务,可以让我们管理: 1)VDI(虚拟桌面基础架构) 2)云端的 RDSH:RDSH 是 RDS(远程桌面服务)中的一个角色.这些类型的服务器用于托 ...

  9. JavaScript学习总结2-对象

    JavaScript中对象除了最后一个属性以外都在结尾加逗号,同时所有属性都要在{ }内 1 <!DOCTYPE html> 2 <html lang="en"& ...

  10. partOne讲解思路

    讲解思路   分解:把一个复杂的大问题,拆解成更可执行.更好理解的小步骤. 模式识别:找出相似模式,高效解决细分问题. 抽象:聚焦最重要的信息,忽视无用细节. 算法:设计一步一步的解决路径,解决整个问 ...