Python全栈开发武沛齐day02基础和数据类型

day02 基础和数据类型

1.知识点回顾
1.1 环境搭建
• typora+md笔记
• Python解释器
C:\python39
- python.exe
- Scripts
- pip.exe
- pip3.exe
- pip3.9.exe
- Lib
- re.py
- random.py
- site-packages
- ?
>>>C:\python39\python.exe D:\code.py

C:\python39\Scripts\pip.exe install openpyxl
• 系统环境变量
C:\python39
C:\python39\Scripts
python D:\code.py
pip install openpyxl
注意:如果有多个Python解释器。
python3.9 D:\code.py
pip3.9 install openpyxl
• 运行方式
– 代码形式
python3.9 D:\code.py
– 交互式环境
python3.9
py代码
...
exit()
• Pycharm(Python集成开发环境)【社区版】
– 写代码 + 提示
– 运行代码 + 选择解释器
– 终端(cmd + powershell)

1.2 入门语法
• 编码
编码本质,一套“密码本”存储文字 -> 01001001 对应关系。
文件以什么编码进行保存,就要以什么编码进行打开,否则乱码。
开发Python程序时:
- py文件 -> utf-8编码保存
- python解释器运行代码 -> 解释器必须用utf-8编码读取(默认)
>>>python D:\code.py
换编码运行程序:
- py文件 -> gbk编码保存
# -- coding:gbk --
...
...
- python解释器运行代码 -> 解释器必须用gbk编码读取

** Python3默认解释器是utf-8编码 **
常见编码:
ascii码,只有256种对应关系 【不含中文】
gbk编码,有65536种对应关系【包含中文】
unicode,有4294967296种对应关系【包含中文】
utf-8,压缩【包含中文】
Python2默认解释器编码ascii码
编写python2程序【乱码】
- 写代码 -> ascii码
- 运行 -> python -> ascii码的编码方式打开
>>>python D:\code.py

编写python2程序
- 写代码 -> utf-8
# -- coding:utf-8 --

- 运行   -> python  -> 默认解释器ascii更换成utf-8
	>>>python  D:\code.py

• 输入和输出
text = input("提示...")

print("阿斯顿发送到发斯蒂芬")

注意:input输入的内容都会是字符串类型 "123"
• 数据类型
– 整型 int
age = 18
size = 50
– 字符串 str
name = "武沛齐"
addr = "中国北京"
– 布尔类型 bool(真假)
res = 19 > 20
print(res) # False

data = 1 < 19
print(data) # True
使用场景A:
if 1 < 19:
print("真...")
else:
print("假...")
使用场景B:
- 转换规则: 19 0 "xxx" -> bool(19) bool(0) bool("xxx")
- 常见转换:
0 "" => 转换布尔值是False
-1 99 "xxx" " " => 转换布尔值是True
使用场景C:放一个值内部会转换。
if "xxx":
print("成立..")
else:
print("不成立")
• 变量
- 规范
- 字母数组下划线
- 数字不能开头
- 不能是内置关键字

  • 建议
    • 见名知意
    • 多个单词 小写+下划线
      name = "武沛齐"
      old_addr = "背景"
      new_addr = "中国台湾"
      _ = "xxxx"
      • 注释

    单行注释

"""多行注释"""

control + ?

2.条件语句
2.1 基本条件
print("开始")

if 条件 :
print("11")
print("88")
print("sdfasdfasdf")
else:
print("xxxx")
print("xxxxxx")

print("结束")

提示用户输入一个数字,判断用户输入的是否666,如果是则提示中奖;否则提示未中奖

num = input("请输入你的幸运数字") # "1232"
if num == "666":
print("中奖了")
else:
print("未中奖")

提示输入用户名+密码,对用户名和密码进行校验,root 123 成功;否则失败

user = input("用户名:")
pwd = input("密码:")

if user == "root" and pwd == "123": # && ||
print("登录成功")
else:
print("登录失败")

2.2 多条件判断
print("开始")

if 条件A :
print("11")
print("88")
print("sdfasdfasdf")
elif 条件B:
print('...')
elif 条件C:
print('...')
else:
print("xxxx")
print("xxxxxx")

print("结束")

联通客服案例10010

print("欢迎致电10010")
print("1.花费查询 2.宽带办理 3.企业服务 4.VIP会员")

choice = input("请输入序号:") # "1" "2"
if choice == "1":
print('花费剩余1000')
elif choice == "2":
print("宽带1000M FTTR")
elif choice == "3":
print("企业IP申请成功")
elif choice == "4":
print("VIP通道")
else:
print("选择错误")

print("感谢致电")

2.3 条件嵌套
print("开始")

if 条件 :
print("11")
print("88")
if 1>2:
print("xxx")
else:
print("....")
print("sdfasdfasdf")
else:
print("xxxx")
print("xxxxxx")

print("结束")

联通客服案例10010

print("欢迎致电10010")
print("1.花费查询 2.宽带办理 3.企业服务 4.VIP会员")

choice = input("请输入序号:") # "1" "2"
if choice == "1":
mobile = input('请输入手机号')
if mobile == "15131288888":
print("剩余100")
elif mobile == "15131288889":
print("剩余10")
else:
print('号码未绑定')
elif choice == "2":
print("宽带1000M FTTR")
elif choice == "3":
print("企业IP申请成功")
elif choice == "4":
print("VIP通道")
else:
print("选择错误")

print("感谢致电")

2.4 单条件
print("开始")
if 条件 :
...
...
print("结束")
message = "未中奖"

num = input("输入数字:")
if num == "999":
message = "恭喜中奖"

print(message)

3.循环语句
• while循环,未知循环次数
• for循环,有限次数的循环。

3.1 while
while 条件:
print("1")
print("2")
print("开始")
while True:
print("你好")
print("结束")
print("开始")
while 1 < 5:
print("你好")
print("结束")
print("开始")
counter = 0
while counter < 5:
print("你好")
counter = 10

print("结束")
print("开始")
counter = 0
while counter < 5:
print("你好")
counter = counter + 1

print("结束")

案例:猜数字,直到猜测正确为止。

print("开始")
flag = True
while flag:
num = input("请输入数字:")
if num == "666":
print("猜对了")
flag = False
else:
print("猜错了,继续")

print("结束")

3.2 break和continue关键字
这两个关键字必须要放在 while或for循环里面。
• break,终止循环,后续所有循环都不再执行。
• continue,结束本次循环(下面代码不再执行,回到while条件部分,开始下次循环)
print("开始")
while True:
print("中国")
break
print("北京")
print("结束")

-----------------------------

开始

中国

结束

print("开始")
while True:
print("中国")
continue
print("北京")
print("结束")

-----------------------------

开始

中国

中国

中国

...

案例:猜数字,直到猜测正确为止。

print("开始")
while True:
num = input("请输入数字:")
if num == "666":
print("猜对了")
break
else:
print("猜错了,继续")
continue

print("结束")

3.3 for循环
for 变量 in 容器:
print(变量)
for i in [0,1,2,3,4,5]:
print(i)
一般for循环会结合range一起来实现。
v1 = range(5) # [0,1,2,3,4]
v2 = range(7) # [0,1,2,3,4,5,6]
v3 = range(1,6) # [0,1,2,3,4,5]
v4 = range(1,10,2) # [1,3,5,7,9]
for i in range(3):
print(i) # 0 1 2
for i in range(5):
print(i) # 0 1 2
for num in range(1,101):
info = "中国联通-工号" + str(num)
print(info)

注意:for循环中支持break和continue
print("开始")
for i in range(5):
if i == 3:
break
print(i) # 0 1 2
print("结束")

---------------------------

开始
0
1
2
结束
print("开始")
for i in range(5):
if i == 3:
continue
print(i) # 0 1 2
print("结束")

---------------------------

开始
0
1
2
4
结束

案例:猜数字,最多猜三次。

print("开始")
for x in range(3):
num = input("数字:")
if num == "666":
print("猜对了")
break
else:
print("猜错了")
print("结束")

4.pass
保持语法的完整性。
if 条件:
pass
else:
print('...')
while True:
pass

print("结束")

5.字符串格式化
name = input("姓名:")
age = input("年龄:")

"我叫xx,今年xx岁"

text = "我叫" + name ",今年" + age + "岁"
print(text)

5.1 %
name = "武沛齐"
age = 18

text = "我叫%s,今年%s岁" %(name,age)
print(text)
name = "武沛齐"
age = 18

text = "我叫%(n1)s,今年%(n9)s岁" % {"n1": name, "n9": age}
print(text)

5.2 format
text = "我叫{0},今年{1}岁".format("武沛齐",19)
print(text)
name = "武沛齐"
age = 19

text = "我叫{0},今年{1}岁".format(name,age)
print(text)
text = "我叫{0},今年{1}岁,真实姓名:{0}".format("武沛齐",19)
print(text)


text = "我叫{},今年{}岁".format("武沛齐",19)
print(text)
text = "我叫{},今年{}岁,真实姓名:{}".format("武沛齐",19,"武沛齐")
print(text)

提醒:
• 无论是%还是format,含有占位符的字符串是可以被复用。
v1 = "我叫%s,今年%s岁" %("武沛齐",123)
print(v1)

v2 = "我叫{},今年{}岁".format("武沛齐",19)
print(v2)
v0 = "我叫%s,今年%s岁"
v1 = v0 %("武沛齐",123)
v2= v0 %("张开",123)
print(v1)
print(v2)
v0 = "我叫{},今年{}岁"
v1 = v0.format("武沛齐",123)
v2 = v0.format("张开",123)
print(v1)
print(v2)
• 字符串中还有特殊的字符
text = "我是台湾{中国的身份}的一名中学生,名字叫:%s,今年%s岁。" % ("武沛齐", 19)
print(text)
text = "我的手机电池剩余50%s的使用时间,{}".format("武沛齐")
print(text)

5.3 f-string(py3.6+)
name = input("姓名:")
age = input("年龄:")

text = f"我的名字{name},今年{age}岁"
print(text)
name = input("姓名:")
age = 10

text = f"我的名字{'欧阳' + name},今年{age + 1}岁"
print(text)

案例
• 输出多个用户的工号信息
for i in range(1,101):
print(f"中国联通工号-{i}")
• 倒计时效果
for i in range(1, 6):
info = f"剩余{5-i}"
print("联通", info)
• 案例:猜数字,最多猜5次。每次错误之后,提醒剩余次数
print("开始")
for x in range(1, 6):
num = input("数字:")
if num == "666":
print("猜对了")
break
else:
message = f"猜错了,剩余次数{5-x}"
print(message)
print("结束")
• 需求:
– 实现输入用户名和密码进行登录;成功输出登录成功;否则登录失败
– 用户名=root并且密码=qwe,就算成功,否则就是失败
– 最多重试3次,展示剩余次数
print("开始")
for x in range(1, 4):
user = input("用户名:")
pwd = input("密码:")
if user == "root" and pwd == "qwe":
print("登录成功")
break
else:
message = f"登录失败,剩余次数{3-x}"
print(message)
print("结束")
v1 = range(5) # [0,1,2,3,4]
v2 = range(1,5) # [1,2,3,4]
v3 = range(1,5,2) # [1,3]
v4 = range(1,5,-1) # []
v5 = range(4, -1, -1) # [4, 3, 2, 1, 0]

注意:Python中想要获取倒序的数字,就可以基于range负值来实现。
print("开始")
for x in range(4, -1, -1):
user = input("用户名:")
pwd = input("密码:")
if user == "root" and pwd == "qwe":
print("登录成功")
break
else:
message = f"登录失败,剩余次数{x}"
print(message)
print("结束")

扩展
之前都是使用 range + for循环,得到连续的数字。
for i in [0,1,2,3,4]:
pass

for i in range(5): # [0,1,2,3,4]
pass
for i in ["江苏","河北","山东","青海"]:
print(i)
data_list = ["江苏","河北","山东","青海"]
for item in data_list:
print(item)
data_list = ["江苏","河北","山东","青海"]
num_list = [10,11,12,13,14]

6.数据类型

6.1 字符串 str

单行

v1 = "武沛齐"
v2 = '北京'

多行

v3 = """背景上海深圳"""
v4 = '''背景上海深圳'''
v1 = "root"
v2 = v1.upper()
print(v1) # root
print(v2) # ROOT
data = "alex"
new_info = data.upper()
print(new_info) # ALEX
print(data) # alex

6.1.1 独有功能
• 大写
name = "root"
res = name.upper()
print(res) # ROOT
print(name) # root
• 小写
name = "ROOT"
res = name.lower()

print(res) # root
print(name) # ROOT
# 案例:输入 q或Q 停止

while True:
num = input("数字:") #"123" # "xxxx"
data = num.upper()
if data=="Q":
break
print(f"您输入的数字是:{num}")
# 案例:输入 q或Q 停止

while True:
num = input("数字:") #"123" # "xxxx"
if num.upper() == "Q":
break
print(f"您输入的数字是:{num}")

# 案例:输入 q或Q 停止

while True:
num = input("数字:") #"123" # "xxxx"
if num == "q" or name == "Q":
break
print(f"您输入的数字是:{num}")
# 案例:系统提示输出图片验证码:uyWT8 -> uywt8 或 UYWT8
import string
import random

1.随机获取6个字符,并拼接起来成为字符串

data_list = random.sample(string.ascii_letters, 6)
random_string = "".join(data_list)
print(f"图片验证码内容:{random_string}")

2.用户输入

code = input("请输入验证码:")

3.变大写后,再进行比较

if code.upper() == random_string.upper():
print("验证码正确")
else:
print("失败")
# 需求:循环提示用户输入姓名,再基于f-string格式化输出:恭喜xxx,获得500w奖金。

- 如果输入 q/Q则停止

- 输入其他,则继续

while True:
name = input("姓名:")
if name.lower() == "q":
break
else:
print(f"恭喜{name},获得500w奖金")
while True:
name = input("姓名:")
if name.lower() == "q":
break
print(f"恭喜{name},获得500w奖金")
• isdecimal,判断字符串是不是整数
v1 = "123"
res = int(v1)
print(res) # 123
v1 = "qwe"
res = int(v1) # 报错
print(res)
choice = "123"

ret = choice.isdecimal()
print(ret) # True / False
choice = input('请输入数字:')
if choice.isdecimal():
print(f"是数字 {int(choice) + 100}")
else:
print("不是数字")
# 扩展+案例

0 1 2 3

-3 -2 -1

goods_list = ["宝马M3", "宝马X5", "奔驰s650", "奥迪Q7"]

idx = 0
for item in goods_list:
print(idx, item)
idx = idx + 1

choice = input("请输入序号:") # "1"
if choice.isdecimal():
num = int(choice)
print(goods_list[num])
else:
print("序号必须是数字")
• startswith / endswith
text = "中国联通"

if text.startswith("中国"):
print("是")
else:
print("否")

if text.endswith("联通"):
print("是")
else:
print("否")
# 案例:请输入你的家庭住址,判断是否是上海人员
addr = input("地址:")
if addr.startswith("上海"):
print("上海户口")
else:
print("非上海户口")
file_name = "视频.mp4"
if file_name.endswith(".mp4"):
print("视频文件")
else:
print("非视频文件")
# 案例:读取某个目录下的所有文件,把mp4为后缀的文件输出。
import os

获取某个目录下的所有文件

data_list = os.listdir(r"E:\vVideo\网络编程")

print(data_list)

for file_name in data_list:
if file_name.endswith("mp4"):
print(file_name)
• replace替换
text = "中国联通青海男神李东宁"

v1 = text.replace("联通","移动")

print(text) # "中国联通青海男神李东宁"
print(v1) # "中国移动青海男神李东宁"
text = "中国联通青海男神李东宁"
print( text.replace("联通","移动") ) # # "中国移动青海男神李东宁"
text = "中国联通青海男神李东宁"
text = text.replace("联通","移动")
print(text) # "中国移动青海男神李东宁"
# 案例:用户输入一段文本,请将文本中的 移动、联通、电信 替换成 **

我在中国移动办了张卡,换成了电信,更垃圾了,最后换成联通,完美。

text = input("文本:")
v1 = text.replace("移动","")
v2 = v1.replace("电信","
")
v3 = v2.replace("联通",'')
print(v3)
text = input("文本:")
text = text.replace("移动","
")
text = text.replace("电信","")
text = text.replace("联通",'
')
print(text)
text = input("文本:")
res = text.replace("移动","").replace("电信","").replace("联通","**")
print(res)
text = input("文本:")

key_list = ["移动","电信","联通"]
for key in key_list:
text = text.replace(key,"**")
• split切割
text = "武沛齐,30,xxx@live.com"
data_list = text.split(",")
print(data_list) # ['武沛齐', '30', 'xxx@live.com']

data_list[0]
data_list[1]
data_list[2]
text = "武沛齐,30,xxx@live.com"
data_list = text.split(",")
print(data_list) # ['武沛齐', '30', 'xxx@live.com']
text = "武沛齐,30,xxx@live.com"
data_list = text.split(",",maxsplit=1)
print(data_list) # ['武沛齐', '30,xxx@live.com']
• rsplit切割
text = "武沛齐,30,xxx@live.com"
data_list = text.rsplit(",")
print(data_list) # ['武沛齐', '30', 'xxx@live.com']
text = "武沛齐,30,xxx@live.com"
data_list = text.rsplit(",",maxsplit=1)
print(data_list) # ['武沛齐', '30', 'xxx@live.com']
import os

获取某个目录下的所有文件

data_list = os.listdir(r"E:\EvVideo\网络编程")
for file_name in data_list:
part_list = file_name.rsplit(".", maxsplit=1)
ext = part_list[-1] # 最后一个元素
if ext.lower() == "mp4":
print(file_name)
• join拼接
name_list = ["北京","上海","深圳"]

ret = "=".join(name_list)
print(ret) # "背景=上海=深圳"
data_list = ["name=wupeiqi","age=99","email=xxx.com"]
ret = "&".join(data_list)
print(ret) # name=wupeiqi&age=99&email=xxx.com
• strip/lstrip/rstrip 空白:空 \t \n
text = " 中国联通 "

ret = text.strip()
print(ret) # "中国联通"
print(text) # " 中国联通 "
text = input("请输入:")
text = text.strip()
if text == "武沛齐":
print("登录成功")
else:
print("登录失败")
text = input("请输入:").strip()
if text == "武沛齐":
print("登录成功")
else:
print("登录失败")
line = "中国来同\t"
print(line.strip())

line = "中国来同\n"
print(line.strip())
# 案例+扩展:读取文件中的所有内容

1.打开文件

f = open(r"E:\db.txt", mode='r', encoding='utf-8')

2.读取文件(全部的内容)

content = f.read()

print(content)

2.读取文件(读取所有内容并换行分别放在列表中)

data_list = f.readlines()

print(data_list)

2.读取文件(逐行读取)

for line in f:
line = line.strip()
print(line)

3.关闭文件

f.close()
• 包含
info = "中国移动通信"

v1 = info.contains("移x动")
print(v1)

v2 = "移动" in info
print(v2)
# 案例:给你一个txt文件,请读取文件中的每一行数据,如果当前行数据中包含"联通",输出
f = open(r"E:\db.txt", mode='r', encoding='utf-8')
for line in f:
line = line.strip()
if "联通" in line:
print(line)

f.close()
f = open(r"E:\db.txt", mode='r', encoding='utf-8')
for line in f:
line = line.strip()
# if "联通" in line:
if line.contains("联通"):
print(line)

f.close()
# 案例:遍历某个目录下的所有文件名,文件名中是否包含 联通,则输出
import os

name_list = os.listdir(r"E:\EvVideo\网络编程")
print(name_list)

for name in name_list:
if "络" in name:
print(name)
• 汇总
upper/lower/isdecimal/split/replace/startswith/endswith/join/containers

第一类:upper/lower/join/replace
v1 = "root"
res = v1.upper()
print(res) # "ROOT"

v1 = "root"
res = v1.strip().lower().replace('xxx',"xxx").replace('..',"..")
print(res)

第二类:startswith/endswith/isdecimal/containers
v1 = "xxx"
res = v2.startswith("xx") # True/False
if 条件:
pass
while 条件:
pass
第三类:split
info = "北京,上海,深圳"
data_list = info.split(",")
print(data_list) # ["北京","上海","深圳"]

注意:字符串中的方法无论执行那一个,原来的值永远不变。

6.1.2 公共功能
name = "中国联通广西分公司"
• 长度
v1 = len(name)
print(v1) # 9

v2 = len("root")
print(v2) # 4
• 索引
# 0 1 23 4 5

-3 -2 -1

name = "中国广西联通"
print(name)

print( name[1] )
print( name[3] )
print( name[199] )

name[-1]
name[-2]
# 案例:长度+while循环+索引,给你 "中国广西联通" 输出每一个字符

name = "中国广西联通"
idx = 0
while True:
print(name[idx])
idx = idx + 1
if idx >= len(name):
break
name = "中国广西联通"
idx = 0
while idx < len(name):
print(name[idx])
idx = idx + 1
• 切片
# 0 1 23 4 5
name = "中国广西联通"

name[0:3]
name[1:3]
name[:4]
name[2:]
name[1:-1]
补充:索引和切片支持负值
• for循环
v1 = "中国联通"
for item in v1:
print(item)
v2 = [11,22,33,44]
for item in v2:
print(item)
v3 = True
v4 = 123
• in包含
if "下课" in "赶紧下课吧":
print("在")
else:
print("不在")
if "移动" in ["联通","中国移动","电信"]:
print("在")
else:
print("不在")

6.1.3 案例
• 用户注册系统,提供用户输入姓名、年龄、邮箱,写入到文件中。
name = input("姓名:")
age = input("年龄:")
email = input("邮箱:")

line = f"{name},{age},{email}\n"

写入到一个文件中

f = open(r"E:\new.txt",mode='a',encoding='utf-8')
f.write(line)
f.close()
• 绝对路径和相对路径
• 注册多个用户,输入Q或q则停止
while True:
name = input("姓名:").strip()
if name.upper() == "Q":
break
age = input("年龄:").strip()
if age.upper() == "Q":
break
email = input("邮箱:").strip()
if email.upper() == "Q":
break

line = f"{name},{age},{email}\n"

# 写入到一个文件中
f = open(r"new.txt",mode='a',encoding='utf-8')
f.write(line)
f.close()

• 是否允许空?
while True:
name = input("姓名:").strip() # "" "sdf"
if not name:
# 输入空
print("输入为空,请重新开始")
continue
if name.upper() == "Q":
break
age = input("年龄:").strip()
if age == "":
print("输入为空,请重新开始")
continue
if age.upper() == "Q":
break
email = input("邮箱:").strip()
if email == "":
print("输入为空,请重新开始")
continue
if email.upper() == "Q":
break

line = f"{name},{age},{email}\n"

# 写入到一个文件中
f = open(r"new.txt",mode='a',encoding='utf-8')
f.write(line)
f.close()
while True:
while True:
    name = input("姓名:").strip()
    if name == "":
        print("姓名为空,请重新输入")
        continue
    else:
        break

while True:
    age = input("年龄:").strip()
    if age == "":
        print("年龄为空,请重新输入")
        continue
    else:
        break

while True:
    email = input("邮箱:").strip()
    if email == "":
        print("邮箱为空,请重新输入")
        continue
    else:
        break

print(name, age, email)

• 读取用户信息
f = open("new.txt", mode='r', encoding='utf-8')
data_list = f.readlines()
f.close()

for line in data_list:
line = line.strip()
if line == "":
continue
else:
# print(line) # "root,123,root@xx.com"
res = line.replace(",", "|")
item_list = res.split("|") # ["root","123","root@xx.com"]
# print(f"邮箱地址是:{item_list[-1]}")
print(f"姓名:{item_list[0]},年龄:{item_list[1]},邮箱地址是:{item_list[-1]}")

posted @ 2024-03-11 22:07  lang333333  阅读(22)  评论(0)    收藏  举报