python 1.5数据类型 数字+字符串+for循环
数据类型
1、函数 type 查看数据的类型
a = "111"
print(type(a))
aa = int("3333")
print(type(aa))
整数
1、定义
1. 整形类型 int 作用: 记录个数 ,数值,年龄 月份 高 宽 游戏等级
2. 浮点型 float 小数的意思 x = 1.1
3. 作用是 记录 身高 体重 整型 和 浮点型 可以相互 运算 作用 : 数学运算 数值比较
4. python 2 有整形 和长整形 ,,python 3 只有整形
1 数字函数
-
除法 函数
print(divmod(10,3) ) # 除法中既能得到商,又能得到余数 #(3, 1) 商 和 余数 # 四舍五入,指定保留的1位小数,如果后一位是大于5,则加1 print(round(3.1515926,1)) # 3.2 -
大小的比较
max 求最大值 min 求最小数 sorted 排序从小大 revers翻转 排序 注意 字典的比较是 值的比较 ,返回的是键 排序的是根据 字符在uincode的编码的数字排序 -
位运算 绝对值
abs( ) # 取绝对值 -1 变成 1 all('迭代器')与的运算 Return True if bool(x) is True for all values x in the iterable. If the iterable is empty, return True. 传入的元素全都为真才是真,但是可迭代对象是一个空的列表 也为真 any('迭代器') 或的运算 元素中一个为真,则是真
2、独有的功能
v1 = 5
message = v1.bit_length()
获取v2的二进制有多少个位组成
3、公共的功能
- 加减乘除数字运算
4、类型转换
-
布尔转整形
n1 = int(True) n2 = int(False) -
字符串转整形
-
字符串转整型数字 ,字符串转数字有一个前提,就是字符串中不能有字符或符号存在
print(int("10",base=10)) # 字符串形式的数字 转成10进制数字 print(int("0b1010",base=2)) # 字符串形式的二进制数字转成10进制数字 print(int("0o144",base=8)) # 字符串形式的8进制数字 转成10进制数字 print(int("0x144",base=16)) # 字符串形式的16进制数字 转成10进制数字
-
-
浮点转整形
v1 = int(1.1) print(v1) = 1 # 去掉了小数点 -
进制之间的相互转换
print(bin(10)) # bin -- 10进制转换成2进制 print(oct(10)) # oct -- 10进制转换成8进制 print(hex(10)) # hex -- 10进制转换成16进制
2.进制
计算机中底层所有的数据都是以 010101的形式存在(图片、文本、视频等)。
-
二进制
0 1 10
2.1 进制转换
v1 = bin(25) # 十进制转换为二进制
print(v1) # "0b11001"
v2 = oct(23) # 十进制转换为八进制
print(v2) # "0o27"
v3 = hex(28) # 十进制转换为十六进制
print(v3) # "0x1c"
i1 = int("0b11001",base=2) # 25
i2 = int("0o27",base=8) # 23
i3 = int("0x1c",base=16) # 28
3.浮点型(float)
浮点型,一般在开发中用于表示小数。
v1 = 3.14
v2 = 9.89
关于浮点型的其他知识点如下:
-
在类型转换时需要,在浮点型转换为整型时,会将小数部分去掉。
v1 = 3.14 data = int(v1) print(data) # 3 -
想要保留小数点后N位
v1 = 3.1415926 result = round(v1,3) print(result) # 3.142
在项目中如果遇到精确的小数计算应该怎么办?
import decimal
v1 = decimal.Decimal("0.1")
v2 = decimal.Decimal("0.2")
v3 = v1 + v2
print(v3) # 0.3
其他
- python2 的除法默认是没有小数点, python3 除法默认是有小数点, / 地板除法是只要整数 //
布尔
1、定义
True False 作用: 记录真假的两种状态
不同数据类型比较 只可以 比较是否等于 不可以进行大小比较
2、独有的功能
3、公共的功能
4、类型转换
-
任何类型都可以转换成布尔类型
数字类型 -- 0 False 其他是True 字符串类型、列表 字典 集合,元组 -- "空是" False 其他都是True
其他
-
做条件的时候,会默认转换成布尔值,然后做条件判断
if 888: # 888 就会默认转成True print("123") if {"age":"123"}: #{"age":"123"}就会默认转成True print("213")
字符串
1、定义
表现一个字符串使用
'aaa'
"aaa"
info = '''
aaa
'''
2、独有的功能
- "aaa".功能()
- a1="aaa" a1.功能
判断字符串以什么开头,得到一个布尔值
if input("你是哪里人").startswith("山东"):
print("山东户口")
else:
print("非上海户口")
data.startswith("山东") # 如果输入 山东省 或者 山东的,那么startwith 就是截取前两个汉字做匹配,相等返回true
判断字符串以什么结尾,得到一个布尔值
if input("你住哪个地方").endswith("村"):
print("农村户口")
else:
print("城市户口")
data..endswith("村") # 如果输入荷花小区 或者 荷花村 ,那么startwith 就是截取后一个汉字做匹配,相等返回true
判断一个字符串是否是整数 ,返回的是布尔值
-
应用场景 电话号码的校验
-
计算加减乘除 输入
phone =input("请输入你的电话号码: ")
if phone.isdecimal():
print(phone)
else:
print("请输入正确的数字")
num1 = input("请输入数字")
num2 = input("请输入数字")
while num1.isdecimal() and num2.isdecimal(): # 判断 isdecimal 整数 返回布尔
print(int(num1)+int(num2))
break
else:
print("请输入正确的数字")
2.4 取出字符串的空格 制表符 换行符
1. 制表符 \t
2. 换行符 \n
3. 字符串功能 strip 去除的功能,lstrip左边 rstrip右边
```python
a = " aaaabbbbcccc "
# 去掉字符串中间的空格
print(a.strip())
# 去掉字符串左的空格
print(a.lstrip())
# 去掉字符串右边的空格
print(a.rstrip())
-
去掉指定 换行符 制表符
# strip() 默认空的包含(\n \r \t),只能删除头和尾的空格,中间的不会删除 a = " aaa " print(a.strip()) # 取消换行符 -
去除指定的字符串
a = "上海市在海上" #去除"上"这个字符串 print(a.strip("上")) print(a.lstrip("上")) print(a.rstrip("上")) 海市在海 海市在海上 上海市在海 -
字符串变大写,转小写 upper lower功能
场景在用户登录的时候,输入验证码,实现不区分大小写 code = input("请输入验证码:") code_big = code.upper() # 无论是否大写,全部转成大写 print(code_big) if "FB88" == code_big: print("验证成功") else: print("错误请重新输入") code = input("请输入验证码:") code_big = code.lower() # 无论是否小写,全部转成小写 print(code_big) if "fb88" == code_big: print("验证成功") else: print("错误请重新输入") -
内容替换
字符串的替换 1 在讲in not in的时候 我们有一个用户名已存在的案例 只是把已存在的匹配 messges = ["admin","root"] name = input("请输入注册的用户名") if (name not in messges)==True: print(f"恭喜{name}注册成功") else: print(f"{name},已存在,请重新注册") 2 新需求是 评论中含有 敏感词全部换成** ,打印出来 1 code = "aaaaa" print(code.replace("aaaa","bbbb")) # 前面是已存在的,后面是要替换的 2 可以做到精准替换指定字符,没有的不做操作 content = input("请填写评论:") print(content.replace("草","*")) 3 完整版 messges = ["贵","好","狗","人"] # messges = "狗 content = "贵人" for item in messges: content=content.replace(item,"*") 当item的字符串存在时,替换成*,赋值给content,没有命中时,content内容不会改变, 循环结束后,content 状态已全部替换完成。 print(type(content)) print(content) print(content) ''' <class 'str'> *人 <class 'str'> *人 <class 'str'> *人 <class 'str'> ** ** '''-
字符串的切割 split
split 默认切割 data = "stone:20 100001@qq.com" print(data.split()) # 默认参数,指以空格为分割符进行切割 ''' ['stone:20', '100001@qq.com'] ''' 指定为冒号为切割符 data = "stone:20:100001@qq.com" print(data.split(":")) ''' ['stone', '20', '100001@qq.com'] ''' 判断用户名和密码是否正确 code = "root,123456" list_code = code.split(",") key_user = input("请输入用户名:") key_passwd = input("请输入密码:") if key_user == list_code[0] and key_passwd == list_code[1]: print("登录成功") else: print("请重新输入") 配置文件 获取服务器 IP 端口号,用户名 和密码 打印出来 扩展知识 列表的解压赋值 config ="192.168.10.1,22,root,123456" ip,port,user,password= config.split(",") print(f"ssh -p{port} {user}@{ip} -u{user} -P{password}") '''ssh -p22 root@192.168.10.1 -uroot -P123456''' 指定为冒号为切割符,把前两个切割,后面不切割 data = "stone:20:100001@qq.com:20000" print(data.split(":",2)) ''' ['stone', '20', '100001@qq.com:20000'] ''' 指定为冒号为切割符,把后一个切割,前面不切割 data = "stone:20:100001@qq.com:20000" print(data.rsplit(":",1)) ''' ['stone:20:100001@qq.com', '20000'] ''' 使用场景是,获取文件中所有文件的后缀名 data = "/etc/passwd.txt" print(data.rsplit(".",1)[1]) ''' txt '''-
字符串的拼接 join
把列表的内容拼接成字符串 code = ['stone', '20', '100001@qq.com'] print("".join(code)) 如果参数默认是空值 ''' 结果 stone20100001@qq.com ''' code = ['stone', '20', '100001@qq.com'] print("*".join(code)) 指定参数 * - 等等 ''' 结果 stone*20*100001@qq.com '''
-
-
-
格式化 %s fomat f 3种类型。
总结: 内存的数据都是字符串数据,硬盘中的是utf-8编码的字节型数据
-
字符串转换成字节
date = "stone" print(type(date)) print(date.encode("utf-8")) print(date.encode("gbk")) ''' <class 'str'> b'stone' b'stone' ''' 字节的数据 本质是二进制,python 以16进制显示 code = b"aaaaaaaaa" print(type(code)) <class 'bytes'> 转为字符串类型 print(type(code.decode("utf-8"))) <class 'str'> -
将字符串内容 居中 居左 居右 显示
code = "aaaaa" print(code.center(20,"*")) # *******aaaaa******** print(code.ljust(20,"*")) # aaaaa*************** print(code.rjust(20,"*")) # ***************aaaaa -
帮忙填充0
应用场景 处理二进制数,比如1-99之间任意数 转成二级制数,然后填充成8位 num = 10 date =bin(num) # 10进制转变成2进制 date =date.split("b") # 把二进制的结果以 b 为分割符切割 date= date[1]# 把列表的1号元素拿出来 date =date.zfill(8) # 使用zfill 把二进制的形式字符串补成8位 print(date) ''' 00001010 ''' 一句话 进制转换代码 print(bin(int(input("输入要转换的数字:"))).split("b")[1].zfill(8))
3、公共的功能
4、类型转换
- 字符串转换成字节
date = "stone"
print(type(date))
print(date.encode("utf-8"))
print(date.encode("gbk"))
'''
<class 'str'>
b'stone'
b'stone'
'''
字节的数据 本质是二进制,python 以16进制显示
code = b"aaaaaaaaa"
print(type(code))
<class 'bytes'>
转为字符串类型
print(type(code.decode("utf-8")))
<class 'str'>
练习题
-
写代码实现判断用户输入的值否以 "al"开头,如果是则输出 "是的" 否则 输出 "不是的"
if input("请输入用户名:").startswith("al"): print("是的") else: print("不是的") -
写代码实现判断用户输入的值否以"Nb"结尾,如果是则输出 "是的" 否则 输出 "不是的"
if input("请输入用户名:").endswith("Nb"): print("是的") else: print("不是的") -
将 name 变量对应的值中的 所有的"l"替换为 "p",并输出结果
name = "lllloooo" print(name.replace("l","p")) -
写代码实现对用户输入的值判断,是否为整数,如果是则转换为整型并输出,否则直接输出"请输入数字"
code = input("num :") if code.isdecimal(): print(int(code)) else: print("请输入数字") -
对用户输入的数据使用"+"切割,判断输入的值是否都是数字?
提示:用户输入的格式必须是以下+连接的格式,如 5+9 、alex+999`code = input("用户输入的格式必须是以下+连接 ").split("+") if code[0].isdecimal() and code[1].isdecimal(): print("都是数字") else: print("不全是数字") -
写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5+9或5+9或5+9,计算出两个值的和(提示:先分割再转换为整型,再相加)code = input("两个数相加 1+1 :").split("+") if code[0].isdecimal() and code[1].isdecimal(): print(int(code[0])+int(code[1])) else: print("不是数字") -
写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5 +9或5+ 9或5 + 9,计算出两个值的和(提示:先分割再去除空白、再转换为整型,再相加)code = input("两个数相加 1+1 :").split("+") if code[0].strip().isdecimal() and code[1].strip().isdecimal(): print(int(code[0])+int(code[1])) else: print("不是数字") -
补充代码实现用户认证。
补充代码实现用户认证。
需求:提示用户输入手机号、验证码,全都验证通过之后才算登录成功(验证码大小写不敏感)
import random
code = random.randrange(1000, 9999) # 生成动态验证码
msg = "欢迎登录PythonAV系统,您的验证码为:{},手机号为:{}".format(code, "15112345678")
print(msg)
phone = msg.rsplit(":",1)[1]
key_phone = input("请输入登录手机号码:").strip()
key_code = int(input("请输入登录验证码:").strip())
if key_phone == phone and code == key_code:
print("欢迎登录")
else:
print("用户名或者验证码错误")
补充代码实现数据拼接
data_list = []
while True:
hobby = input("请输入你的爱好(Q/q退出):")
if hobby.upper() == 'Q':
break
# 把输入的值添加到 data_list 中,如:data_list = ["小姨子","哥们的女朋友"]
data_list.append(hobby)
# 将所有的爱好通过符号 "、"拼接起来并输出
print("、".join(data_list))
公共功能
1、字符串 + 字符串
code1 = "aaa"
code2 = "bbb"
print(code1 + code2)
2、字符串相乘
code1 = "aaa"
print(code1 *3)
3 、求字符串的长度
```python
code1 = "aaa"
print(len(code1))
```
4、获取字符串中的字符,基于索引
```python
正向取值
code1 = "abcd"
print(code1[0])
print(code1[1])
print(code1[2])
print(code1[3])
反向取值
code1 = "abcd"
print(code1[-1])
print(code1[-2])
print(code1[-3])
print(code1[-4])
把字符串的循环打印出来逐字 "获取字符串中的字符"
正序
code = "获取字符串中的字符"
index = 0
while index < len(code):
print(code[index],end="")
index +=1
反序 显示
不要陷入 固定思维,使用负数 表示索引总数依次减1 实现
code = "获取字符串中的字符"
index = len(code)-1
while index >=0 :
print(code[index],end="")
index -=1
```
4、字符的切片
code = "获取字符串中的字符"
字符的索引是锁定一个字符
字符的切片是锁定一段字符,都是根据索引值 来切的
切片有个特性就是顾头不顾尾 ,后面的索引 不取值,
code = "ABCDEFGH"
print(code[0:4]) #从开头切到4号索引
print(code[:4]) #也可以把开头省略
print(code[:]) #全部打印
反序打印
print(code[1:-1]) # 从1 到 -1 ,
print(code[5:]) # 从5 到最后全部
-
字符串可以相加 “code” + “code”
-
字符串进行相乘 “code” * 3
-
字符串索引取单个字符 code[2]
-
字符串索引取读个值,code[:-2] 在切片中,顾头不顾尾
5、步长
```python
在切片过程中,不论从左到有,还是倒序取值,跨度范围都是一个字符 而跨度就是所谓的步长
code = "ABCDEFGH"
跨两个 取值
print(code[::3])
01234567
ABCDEFGH 1 显示 0 每次加1
A C E G 2 显示 0 每次加2 02468...
A D G 3 显示 0 每次加3 036912..
根据步长 反向取值 步长的值是 -1 就是反向的意思
print(code[-1:2:-1])
ABCDEFGH
HGFED
面试题 把一个字符串进行翻转
code = "ABCDEFGH"
print(code[-1::-1])
print(code[::-1])
```
转换
只有字符串转换数字
num = int("121")
其他基本用不到
其他
字符串不可以被修改
a = "666"
a[1] = "0" 不可以 报错
for循环
扁平结构比嵌套结构更好 尽量用更方便的办法解决
条件循环 while
非条件循环 for
code = "获取字符串中的字符"
index = 0
while index < len(code):
print(code[index],end="")
index +=1
print("",end="\n")
====================================
for item in code:
print(item,end="")
通过上面的代码 显示 for 循环在取值方面比 while循环更简洁
range函数
有点像步长的意思
range(0,10,1) 开始 结束范围,步长
需求: 打印字符串
# 这种形式是取值字符串的每一个值
for item in code:
print(item,end="")
# 结合range 功能,也可以去字符串的索引
code = "获取字符串中的字符"
for item in range(len(code)):
print(code[item],end="") # code[item] 根据索引取每一个值
- For循环+ range 组合 ,需要 奇偶数
for i in range(1, 10, 1):
# 相当于1-10 之间 一个数一个数的
# for i in range(1,10):
print(i)
# 顺序打印数字
for i in range(1, 10, 2):
print(i)
# 打印奇数
for i in range(2, 10, 2):
print(i)
# 打印偶数
For循环猜年龄
GuessDang = 22
for i in range(3):
guessdang = int(input("guess :"))
if guessdang == GuessDang:
print("You are very good!")
break
elif guessdang > GuessDang:
print("Think it bigger")
else:
print("Think it small")
else:
print("too times ..fack off")
- 循环取值 字符串 列表 字典
# for i in "hello": # 取值字符串元素的个数
# print(i)
#
for i in range(0, 2, 1):
print(i)
# 延长知识点
# 在python 2 中range 的功能是 列表的形式,如果在循环1000次,
# 那么 就要造一个1000个数值的列表,非常占内存,
# 在python 3 里 就变成了,range 功能函数
# 这个是知识点是 母鸡 和 鸡蛋 的故事
x = range(1, 3)
print(x) # range(1, 3)
# 省略起始位置 省略步长 和起始位置
'''
浙公网安备 33010602011771号