【一】while循环补充
continue: 结束当前当次循环
break:结束整个循环
【二】for循环
遍历可迭代类型(能索引取值的也属于可迭代类型)
字符串
name = "dream"
for a in name:
print(a)
d
r
e
a
m
列表
name = [1, 2, 3, 4]
for a in name:
print(a)
1
2
3
4
元组
name = (4, 1, 2)
for a in name:
print(a)
4
1
2
集合
name = {4, 5, 6}
for a in name:
print(a)
4
5
6
字典(特殊,只能遍历出键)
name = {"username": "dream"}
for a in name:
print(a) # 遍历出键
print(name[a]) # 遍历出值
username
dream
死循环
无法退出当前循环
不要在代码中出现死循环;会造成当前CPU飙升
while True:
print(1)
可以在while循环中定义一个标志位
tag = True
while tag:
username = input(":>>>")
if username == "dream":
tag = False
【三】range 关键字
帮我们生成指定区间内的整数列表
在 2.7 版本及之前range(1, 5) 会给你返回一个 [1,2,3,4]
3.6 之后 优化掉了
print(range(1, 5), type(range(1, 5)))
range(1, 5) <class 'range'> ---- 生成器对象
用几个取几个
顾头不顾尾
for i in range(1,5):
print(i)
1
2
3
4
默认开始的位置是从数字 0 开始到指定位置 -1
for i in range(5):
print(i)
0
1
2
3
4
【四】登录练习
# 登录认证练习
# 用列表套字典存储用户数据
# 有一个输入框输入用户名和密码 ,增加重试次数 让他一直重试知道正确位置
# 正确的话就断掉了
user_list = [{"11": "1"}, {"22": "2"}]
max_attempts = 3
attempts = 0
while attempts < max_attempts:
input_name = input("请输入用户名:>>>")
input_password = input("请输入密码:>>>")
for user in user_list:
if input_name in user and user[input_name] == input_password:
print("登录成功")
break
else:
attempts += 1
print("登录失败,请重新输入!")
continue
break
else:
print("输入错误三次,账号锁定")
user_data_list = [
{"username": "11", "password": "1"},
{"username": "22", "password": "2"},
{"username": "33", "password": "3"},
{"username": "44", "password": "4"}
]
tag_True = True
while tag_True:
user_name = input("请输入用户名;")
user_password = input("请输入密码;")
# 校验用户是否存在列表中
user_found = False # 用于检查用户是否存在的标志
for user_data_dict in user_data_list:
# 校验用户名
if user_data_dict.get("username") == user_name:
user_found = True
# 校验密码
if user_data_dict.get("password") == user_password:
print("登陆成功!")
tag_True = False
else:
print("密码错误!!!")
if not user_found:
print("用户名错误")
【五】整数类型的内置方法
【一】数据类型的内置方法
# 八大基本数据类型
# 为了更加方便操作每一个数据类型,于是开发者就将可以通过繁琐操作达到目的的代码封装成一个方法
# 帮我们快速写代码
【二】数字类型
【1】整数类型
print(1 + 1)
num = 1
print(num.__add__(2))
# 【1】类型强制转换
# 可将符合整数格式的字符串转换成整数类型
num = '1'
print(int(num))
# 只能转换副歌整数类型格式的字符串
print(int('a'))
# 【2】进制转换
# (1)十进制转八进制 0o
print(oct(999)) # 0o1747
# (2)十进制转十六进制 0x
print(hex(999)) # 0x3e7
# (3)十进制转二进制 0b
print(bin(999)) # 0b1111100111
转换回去
num = '0b1111100111'
print(int(num, 2))
num = '0o1747'
print(int(num, 8))
num = '0x3e7'
print(int(num, 16))
999
999
999
【2】浮点数的内置方法
salary = 100.01
# 强制类型转换 转换符合浮点数的字符串 可以将整数转换为 浮点数
num = 100
print(float(num))
num = '100.111'
print(float(num))
100.0
100.111
【3】判断当前类型是否是整数或者浮点数
num1 = b'4' # <class 'bytes'>
num2 = '4' # unicode,Python 3 中不需要在字符串前加 'u'
num3 = '四' # 中文数字
num4 = 'Ⅳ' # 罗马数字
# 判断当前字符串类型是否是指定的数据格式
# (1)判断当前是否为数字类型 isdigit
print(num1.isdigit()) T
print(num2.isdigit()) T
print(num3.isdigit()) F
print(num4.isdigit()) F
# (2)判断是否是小数点类型
print(num1.isdecimal()) 报错
num = 100.01
print(num.isdecimal()) 报错
print(num2.isdecimal()) T
# age = input("请输入年龄 :>>>> ")
if age.isdigit():
age = int(age)
print(type(age))
else:
print(f"语法不规范")
【六】字符串内置方法(必会)
【一】字符串的语法格式
# name = "dream"
【二】内置方法 --- 优先记住和学习
【1】字符串拼接
(1)直接字符串 + 法
name = "dream"
name_one = "hope"
print(name + name_one)
# dreamhope
(2).join字符串拼接(取出来后挨个拼接)
name = "dream"
name_one = "hope"
print(name + name_one)
print(name.join(name_one))
# hdreamodreampdreame
print(','.join(name_one))
# h,o,p,e
【2】索引取值
# 正索引 从 0开始取值
# 负索引从 -1 开始取值
# 索引取值可以,但是不能修改
【3】切片
给定一个起始位置和结束位置 截取这之间的元素
顾头不顾尾
name = "dream"
# 正常语法:[起始索引位置:截止索引位置]
print(name[2:4])
# ea
# 不正常语法: [起始索引位置:截止索引位置:步长]
# 步长;隔几个去一个 不填默认为1
print(name[0:4:2])
# de
print(name[0:-1:-2])
# 切不到
# 负索引切片 遵循坐标轴的规范 左小右大
print(name[-4:-1])
# rea
【4】计算长度
print(len(name))
【5】成员运算
print("d" in name)
【6】去除空格
username = input(">>>>")
# 去除手抖产生的空格
username = username.strip()
if username == "dream":
print(username)
# 默认是去除两侧的空格
# 去除两边的特殊字符
name = " dream "
print(name.strip(' '))
name = "$dream$"
print(name.strip("$"))
# # 去除指定一侧的特殊字符
# # right :右侧
print(name.rstrip("$"))
# # left 左侧
print(name.lstrip("$"))
【7】切分字符串
username_password = "dream|521"
# 参数是按照什么去切 切完以后这个编制就没了
username, password = username_password.split("|")
print(username, password)
# dream 521
#若没有参数,则按照空格切分
name = "dream 521"
print(name.split())
# ['dream', '521']
可以控制切的次数
name = "dream|521|11"
print(name.split("|"),1)
# ['dream','521|11']
可以修改切的方向
print(name.rsplit("|"),1)
# ['dream|521','11']
print(name.lsplit("|"),1) # 没有lsplit方法
【8】遍历
# 就是将里面的每一个元素看一遍
name = 'dream'
for i in name:
print(i)
d
r
e
a
m
range : 顾头不顾尾
for i in range(len(name)):
print(name[i])
d
r
e
a
m
【9】重复当前元素
print("*" * 10)
# **********
【10】大小写转换
name = 'Dream'
print(name.upper())
print(name.lower())
# DREAM
# dream
判断当前字符是否全大小写
name = "dream"
print(name.islower())
print(name.isupper())
# True
# False
【11】判断当前字符串以 .. 开头或者结尾
name = "dream"
# 判断开头
print(name.startswith("d"))
# 判断结尾
print(name.endswith("m"))
# True
# True
【11】格式化输出语法
# %s %d占位
name = "dream"
age = 18
print("my name is %s " % name)
print("my name is %s ,my age is %s" % (name, age))
# format
# 按位置传参数
print('my name is {} ,my age is {}'.format(name, age))
# 按关键字传参数
print('my name is {name_location} ,my age is {age_location}'.format(name_location=name, age_location=age))
# f+ {}
print(f"my name is {name} . my age is {age}")
【12】join拼接(可迭代的就能拼)
print(','.join("dream"))
print('|'.join(["dream","521"]))
print('|'.join(("dream","521")))
# d,r,e,a,m
# dream|521
# dream|521
【13】替换
把旧的字符替换成新的字符
name = 'dream_sb'
print(name.replace'_sb','')
#dream
print(name.replace'_sb','_lj')
#dream_lj
标签:username,内置,name,age,关键字,range,user,print,dream
From: https://www.cnblogs.com/yi416/p/18183489