昨日内容回顾
# 【一】八大基本数据类型
# 【1】数字类型
# (1)整数类型
# 语法 变量名 = 整数值
# 做算数运算
# (2)浮点数类型
# 语法 变量名 = 浮点数值
# 做算数运算
# 【2】字符串类型
# 语法:四种(单双引号 三个单双引号)
# (1)索引取值
# 正向索引取值 从 0 开始 从左向右
# 负向索引取值 从 -1 开始 从右向左
# (2)字符串格式化输出语法
# %s 站位
# {}站位 .format()
# f"{ 变量名}"
# 【3】列表
# 语法 变量名 = [元素1,元素2,元素3,...]
# 列表可以存储多个相同类型的变量值
# 列表是允许索引修改值
# 【4】元组
# 语法 变量名 = (元素1,元素2,元素3,...)
# 元组只有一个元素的时候要加 , 不加,就是原本的类型
# 字符串在声明的时候不要加 ,
# 元祖里面的值不能被索引修改
# 支持索引取值
# 【5】字典
# 以键值对形式存储多个值
# 语法 变量名 = {键1:值1,键2:值2,键3:值3,...}
# 字典中的键建议使用 字符串或者数字
# 字典的键底层原理是基于 哈希 出来的值去排列的
# 【6】布尔类型
# 用布尔值来表示真或假 True / False
# 语法 变量名 = True / False
# 在Python中为假的情况
# 0 空的字符串/列表/字典 ... False
# Python为真的情况就是除了假的情况以外的其他情况
# 【7】集合类型
# 无序且不重复的集合体
# 语法 变量名 = {元素1,元素2,元素3,...}
# 集合无序 ---> 针对数字以外的字符
# 不重复 ---> 自动去除掉当前集合内重复出现的元素只保留一个
# 并交差
# union
# intersection
# difference
# 【二】程序与用户进行交互
# input 向计算机中输入内容
# print 计算机向用户输出内容
# print 内部 有一个参数叫 end 默认值是 \n 换行
# 【三】基本运算符
# 【1】算数运算符
# + - * / % // **
# 【2】比较运算符
# > >= < <= == !=
# 【3】赋值运算符
# += *= /= //= %= **=
# 链式赋值 a = b= c
# 交叉赋值 a,b = b,a
# 解包赋值 a,b = [1,2] # 解出来的参数既不能多也不能少
# 【4】逻辑运算符
# 与或非
# 与 and
# 或 or
# 非 not
# 运算优先级 : not and or
# 【5】身份运算符
# is 谁知谁
# is not 不是谁
# 【6】成员运算符
# in
# not in
# 【7】 == 和 is 的区别
# == 比较的事两者的值
# is 比较的事两者的id和值
# 【四】流程控制语句
# 【1】顺序结构
# 从上之上依次执行代码 只要没有遇到报错或者主动退出就会一直执行
# 【2】分支结构
# (1)单分支结构
'''
if 条件:
条件成立执行的代码
'''
# (2)双分支
'''
if 条件:
条件成立执行的代码
else:
条件不成立执行的代码
'''
# (3)多分支
'''
if 条件:
条件成立执行的代码
elif 条件1:
条件1成立执行的代码
elif 条件2:
条件2成立执行的代码
else:
上面的所有条件都不成立执行的代码
'''
# 【3】循环结构
# (1)while 语法
# 重复执行某部分代码 直到符合终止条件为止
'''
while 终止条件:
条件成立执行的代码
'''
# (2)range关键字
# print(range(1, 6), type(range(1, 6)))
# 在 Python 2.x 版本的时候
# 如果你写 range(1,6) ---> 直接返回一个 1 - 6 的列表
# 在Python3.x 版本之后为了节省内存空间 于是做了一步优化
# range(1,6) 不会直接生成列表了 而是一个生成器 当你用的时候会自动生成,不用的时候就是 range(1,6)
# range(起始数字,终止数字,步长)
# print(list(range(1, 9)))
# 步长 隔几个索引取一次元素
# print(list(range(2, 9, 2)))
# (3)for关键字
# 遍历可迭代类型的数据
# 可迭代 含义就是能被索引取值
# 遍历 每一个元素都拿一遍
'''
data_str = "dream"
data_str = {"1":"3","2":"4"}
# for 循环在遍历字典的时候默认拿到的事当前字典的键
for i in data_str:
print(i)
'''
# (4)continue 关键
# 主要搭配逻辑语法使用
# 能够让循环退出本次循环继续下一次循环
# 当达到某个条件 continue 以后 当前打印就直接跳过继续下一次
# (5)break 关键字
# 主要搭配逻辑语法使用
# 能够让循环终止
# 当达到某个条件 break 以后 当前打印就直接退出循环
# (6)死循环
# 当前 while 循环语句没有终止条件代码一直运行
# 我们在写代码的时候应该避免出现死循环
# (7)标志位
# 主要是用在 while 循环条件上面
# 当while循环条件为 False的时候自动终止后续循环
# 将 条件做成一个标志 当达到某个条件的时候直接将 标志位设置为 False
# (8)while ~ else
'''
count = 0
while count < 6:
count += 1
print(count)
# 当while循环结束的时候会自动进入到 while 循环
# 除非主动结束当前循环
else:
print(count)
'''
'''
for i in range(0,6):
print(i)
count = 0
while count < 6:
print(count)
count += 1
'''
'''
data_str = [12, 2, 3, 45, 6, 4]
for i in data_str:
print(i)
'''
'''
count = 0
# len : 计算当前类型中的元素个数
# print(len(data_str))
while count < len(data_str):
print(data_str[count])
count += 1
'''
【一】三元运算
# 三元运算
# ● 三元表达式(三目运算符)能够简洁我们的代码
# ○ 三元表达式其实是将if...else...判断语句的简化表达,代替很多if else
# ● 和if-else一样,只有一个表达式会被执行。
# ○ 因此,三元表达式中的if和else可以包含大量的计算,但只有True的分支会被执行
# ● 在Java、C、JavaScript等语言中,他们的格式为:
# 返回布尔值的判断条件?为真时的结果:为假时的结果
# 在Python中
a, b = 10, 20
if a > b:
print(a)
else:
print(b)
# 三元表达式 优化代码
# 为真的结果 if 条件 else 条件为假的结果
print(a if a > b else b)
# 用到元组或者字典上
# a < b 布尔值 真 - 1 或 假 - 0
# (b, a) = (20 ,10)[1] ---> 10
# (b, a) = (20 ,10)[0] ---> 20
print((b, a)[a < b])
# a < b 布尔值 真 - True 或 假 - False
print({True: a, False: b}[a < b])
# 三元表达式只适用于简单的逻辑判断 而不能适用于复杂的逻辑判断
【二】整数和浮点数的内置方法
# 数据类型的内置方法
# 当我们在操作 字符串 / 列表
# 想到对字符串或者列表做一些高级的操作
# 字符串 判断这个字符是否以 某个字符开头
# 列表 添加元素 删除元素 修改元素 ...
# 官方就根据上面的功能给我们提供了一些公共的接口(方法)
# 【一】整数类型
# 语法 变量名=整数值
num = 42
# 【1】强制类型转换
# 可以将符合整数类型的字符串强制转换成整数类型
num_str = "55"
num_str_int = int(num_str)
print(num_str, type(num_str)) # 55 <class 'str'>
print(num_str_int, type(num_str_int)) # 55 <class 'int'>
# 【2】进制转换
# 十进制 : 我们平常使用的数字就是十进制
# 二进制 : 每一个元素组成都小于2 并且 以 0b 开头
print(bin(999)) # 0b1111100111
# 八进制 : 每一个元素组成都小于8 并且 以 0o 开头
print(oct(999)) # 0o1747
# 十六进制 :在元素中会出现大写或小写字母 以 0x 开头
print(hex(999)) # 0x3e7
# 【3】int 也能做类型转换
print(int("0b1111100111", 2)) # 999
print(int("0o1747", 8)) # 999
print(int("0x3e7", 16)) # 999
# 【二】浮点数类型
# 语法 变量名=浮点数值
# 【1】强制类型转换
# 能够将符合浮点数格式的字符串转换为浮点数
print(float("1.11"))
# 【整数类型和浮点数类型方法补充】
# 【1】判断当前字符串是否符合整数类型格式
num1 = b'4' # bytes
print(num1, type(num1)) # b'4' <class 'bytes'>
num2 = '4' # unicode,Python 3 中不需要在字符串前加 'u'
num3 = '四' # 中文数字
num4 = 'Ⅳ' # 罗马数字
# 【2】判断当前数字是否符合数字类型
print(num1.isdigit()) # True
print(num2.isdigit()) # True
print(num3.isdigit()) # False
print(num4.isdigit()) # False
# 二进制形式和字符串形式的整数类型都是整数
# 中文汉字和罗马数字不符合整数类型
# 【3】判断当前字符串
#
# print(num1.isdecimal())
print(num2.isdecimal()) # "4"
print(num3.isdecimal()) # "四"
print(num4.isdecimal()) # "Ⅳ"
# 小结
# 在Python中没有判断当前字符串是否是浮点数格式的方法
age = input("请输入年龄 :>>>> ")
if age.isdigit():
age = int(age)
else:
print(f"当前 {age} 不是合法的数字")
【三】字符串的内置方法
# 【一】字符串的语法
# 变量名 = "字符"
【1】优先记住的内置方法
# 【1】字符串的拼接
# + 号可以进行字符串的拼接
print("1" + "2")
# 扩充 ''.join(可迭代类型) # 借助列表或者元组
print(''.join(["1", "2", "3"]))
# "字符"
print('|'.join(["1", "2", "3"]))
print('*'.join(["1", "2", "3"]))
print("-".join("dream"))
# 【2】字符串索引取值
# 正向索引 :从0开始 从左向右
# 负向索引 : 从 -1 开始 从右向左
print("dream"[0])
print("dream"[-1])
# 字符串可以索引取值但是不支持索引改值
# name = "dream"
# name[0] = "s"
# print(name) # 'str' object does not support item assignment
# 【3】切片
# 按照指定位置将某部分隔离出来
# "dream" --> "re"
# 字符串[索引] ---> 索引取值
# 字符串[索引1:索引2] ---> 根据索引区间将整体某部分切粒出来
# 顾头不顾尾
print("dream"[1:3])
# 字符串[起始索引:终止索引:步长] ---> 根据索引区间将整体某部分按照步长切离出来
print("dream"[1:4:2])
# d r e a m
# -5 -4 -3 -2 -1
print("dream"[-1:-3])
print("dream"[-3:-1])
# 字符串[::-1] 将整个字符串进行翻转
print("dream"[::-1])
# 【4】计算长度
# len(变量名)
print(len("dream")) # 5
# 【5】成员运算
# 判断某个字符是否在某个成员内
# "dream" --> 判断 d 是否在 "dream"里面
print("d" in "dream") # True
# 【6】去除特殊字符
# 一个字符串 "$dream$" ---> 将首尾的 $ 去除掉
print("$dream$".strip("$"))
# strip 默认值 是空格或者换行
data_str = " dream "
data_str_one = '''
dream
dream
dream
'''
print(data_str)
print(data_str.strip())
print(data_str_one, len(data_str_one))
print(data_str_one.strip(), len(data_str_one.strip()))
# 控制左右去除的位置
# 去除左面的特殊字符
print("$dream$".lstrip("$")) # dream$
# 去除右面的特殊字符
print("$dream$".rstrip("$")) # $dream
# 【7】切分字符串
# 按照指定的分隔符将字符串进行切割 并且分隔符会消失
names = "dream|opp|oppp|hope"
print(names.split("|"))
user_pwd = "username:password"
username, password = user_pwd.split(":")
print(f"username :>>> {username}")
print(f"password :>>> {password}")
# 【8】遍历字符串
# for 循环遍历
# while 循环用索引取值
# 【9】字符串重复
# 字符串 * 数字
# 【10】大小写转换
name = "UserName"
# 将上面的单词转换为全大写
print(name.upper())
# 将上面的单词转换为全小写
print(name.lower())
# 【11】首尾字符判断
# "dream" 判断当前用户名是否以 d 开头 以 m 结尾
print("dream"[0] == "d")
print("dream"[-1] == "m")
print("dream".startswith("d"))
print("dream".endswith("m"))
# 【11】格式化输出语法
# %s
# '{}'.format()
# f"{a}"
# 【12】替换指定字符
# dream ---> d 替换成 a
name = "dream"
# name[0] = "a"
# 前面放需要被替换的内容,后面放替换进去的内容
print(name.replace("d", "a"))
# 【13】判断当前字符串是否是否符合整数类型
print("1".isdigit())
【2】了解的内置方法
# 【1】查找
# 在字符串中查找某个字符所在的索引位置
# (1)find
# 从左向右找 找到一个就返回索引位置 不会继续向后找
print("draeam".find("a"))
# 从右向左找 找到一个就返回索引位置 不会继续向前找
print("draeam".rfind("a"))
# 如果需要查找的字符在当前字符串中不存在 就会返回 -1
print("draeam".rfind("x"))
# (2)index
# 从左向右找 找到一个就返回索引位置 不会继续向后找
print("draeam".index("a"))
# 从右向左找 找到一个就返回索引位置 不会继续向前找
print("draeam".rindex("a"))
# 如果需要查找的字符在当前字符串中不存在 就会直接报错
# print("draeam".rindex("x"))
# 【2】统计当前字符在当前字符串中出现的次数
print("draeam".count("a")) # 2
# 【3】填充
# (1)填充在两侧
# --dream--
# center(填充的数据长度[要基于原本的数据长度进行填充],需要填充的字符)
name = "dream"
print(name.center(len(name) + 2, "*"))
# 如果填充的长度是奇数, 优先填充右侧然后在填充左侧
print(name.center(len(name) + 3, "*"))
# (2)左对齐
# 左对齐使用的是 右边的 rjust
print(name.rjust(len(name) + 3, "-"))
# (3)右对齐
# 右对齐使用的是 左边的 ljust
print(name.ljust(len(name) + 3, "-"))
# (4)填充 0
# 默认使用 0 填充至指定的长度 并且是从左向右填充
print(name.zfill(len(name) + 3))
# 【4】首字母大写
# my name is dream.
sentence = "my name is dream."
print(sentence.capitalize()) # My name is dream.
# 【5】大小写翻转
# 全大写 .upper()
# 全小写 .lower()
# 让大写变小写 小写变大写
name = "UserName"
print(name.swapcase())
# 【6】让整句话的每一个单词首字母大写
# 每个单词要用空格隔开 否则不生效
sentence = "my name is dream."
print(sentence.title()) # My Name Is Dream.
sentence = "myname is dream."
print(sentence.title()) # My Name Is Dream.
【作业】
【猜年龄】
● 设定好用户年龄,用户通过输入猜测的年龄进行匹配
● 最大尝试次数:用户最多尝试猜测3次
● 最大尝试次数后:如3次后,问用户是否还想继续玩
○ 如果回答Y或y,就再给3次机会,提示【还剩最后三次机会】
○ 3次都猜错的话游戏结束
○ 如果回答N或n,游戏结束!
○ 如果格式输入错误,提示【输入格式错误,请重新输入:】
● 如果猜对了,游戏结束!
【登陆注册】
● 设定好用户名和密码,用户通过输入指定的用户名和密码进行登陆
● 最大尝试次数:用户最多尝试猜测3次
● 最大尝试次数后:如3次后,问用户是否继续登陆
○ 如果回答Y或y,就再给3次机会,提示【还剩最后三次机会】
○ 3次都猜错的话登录结束
○ 如果回答N或n,登陆结束!
○ 如果格式输入错误,提示【输入格式错误,请重新输入:】
● 如果猜对了,登陆结束!