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. Flutter入门教程(四)第一个flutter项目解析

    一.创建一个Flutter工程 1.1 命令行创建 首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd: 使用 flutter create <projectname ...

  2. 关于CDN那些事

    对于前端性能优化我们不得不了解的几个知识点:CDN.HTTP header信息 今天我就来谈谈我对cdn的理解 1.CDN是什么:CDN全称是Content Delivery Network,即内容分 ...

  3. link和@import的区别浅析

    我们都知道,外部引入 CSS 有2种方式,link标签和@import.它们有何本质区别,有何使用建议,在考察外部引入 CSS 这部分内容时,经常被提起. 如今,很多学者本着知其然不欲知其所以然的学习 ...

  4. java中单态模式或单例模式(Singleton)有什么意义?

    8.单态模式或单例模式(Singleton) 单态模式有什么用呢?想一下Adobe Photoshop ,处理两张图,会启动两个photoshop吗?多耗费内存呀! ( Consider Adobe ...

  5. CSS简单样式练习(五)

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  6. nodejs教程---基于expressJs框架,实现文件上传(upload)?

    文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是m ...

  7. 动态修改svg的颜色,svg做背景色时候修改颜色

    svg修改背景色可以使用fill属性来修改,但是我现在需要动态改变svg的颜色,例如我hover的时候 现在发现一种兼容性还不错的方法是css属性mask 类似于给路径填充上颜色,结合backgrou ...

  8. FFMPEG第一次学习

    习惯用OneNote笔记,直接复制了,链接和一些命令放在最下面了 里面的库文件是我下的雷神的课件文件,我传到了自己github,链接也放最后了 转载自:https://blog.csdn.net/le ...

  9. Angular项目构建指南 - 不再为angular构建而犹豫不决(转)

    如果你不知道什么是Angular或者根本没听说过,那么我接下来所说的对你来说毫无益处,不过如果你打算以后会接触Angular或者干脆要涨涨姿势~读下去还是有点用的. Angular和它之前所出现的其余 ...

  10. 算法基础⑦搜索与图论--BFS(宽度优先搜索)

    宽度优先搜索(BFS) #include<cstdio> #include<cstring> #include<iostream> #include<algo ...