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. HTML5 Canvas绘制效率如何?

    js运行效率在提升 编程语言的效率是前提,js自然比不上native的C语言效率,所以Canvas效率无疑比不上原生的2D图形绘制,但是js效率的提升是有目共睹的,以js与as为例,基本操作(运算操作 ...

  2. canvas菜鸟基于小程序实现图案在线定制功能

    前言 最近收到一个这样的需求,要求做一个基于 vue 和 element-ui 的通用后台框架页,具体要求如下: 要求通用性高,需要在后期四十多个子项目中使用,所以大部分地方都做成可配置的. 要求做成 ...

  3. 前端架构gulp与webpack(知识点整理)

    一 概念介绍 gulp 是 task runner,Webpack 是 module bundler.可以这么说, Webpack 和 gulp 本身都有 95% 的功能是不能被对方替代,或者直接说和 ...

  4. Vue UI 可视化项目管理界面

    除了直接使用npm的命令进行安装脚手架的安装以外,我们还可以使用Vue提供的GUI方法vue ui来进行项目的构建以及安装 win+R powershell 打开终端 在一个干净的目录下输入命令 vu ...

  5. ruby 版本管理RVM (ruby version manager)

    macOS. 自带的ruby 版本目录权限比较高, 经常有很多 操作需要权限而不能执行 虽然 macOS 自带了一个 ruby 环境,但是是系统自己使用的,所以权限很小,只有 system. 而/Li ...

  6. SpringBoot其他框架-JPA-Hibernate-Swagger

    SpringBoot其他框架 通过了解其他的SpringBoot框架,我们就可以在我们自己的Web服务器上实现更多更高级的功能. 邮件发送:Mail 我们在注册很多的网站时,都会遇到邮件或是手机号验证 ...

  7. 防抖-小程序-input输入频繁时搜索出bug

    html: <input type="text" class="input_search" placeholder="搜索周边店铺"  ...

  8. gin框架使用【3.路由参数】

    GET url: http://127.0.0.1:8080/users/{id} http://127.0.0.1:8080/users/1   对于id值的获取 package main impo ...

  9. 2021.08.09 P6225 抑或橙子(树状数组)

    2021.08.09 P6225 抑或橙子(树状数组) 重点: 1.异或用法 题意: Janez 喜欢橙子!他制造了一个橙子扫描仪,但是这个扫描仪对于扫描的每个橙子的图像只能输出一个 3232 位整数 ...

  10. RecyclerView + SQLite 简易备忘录-----中(1)

    在上一节讲完了登录界面的内容,现在随着Activity的跳转,来到MainActivity. 1.主界面activity_main.xml 由上图,activity_main.xml的内容很简单. 首 ...