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 数字函数

  1. 除法 函数

    print(divmod(10,3) ) # 除法中既能得到商,又能得到余数 
    #(3, 1)   商 和 余数  
    
    
    
    
    # 四舍五入,指定保留的1位小数,如果后一位是大于5,则加1
    print(round(3.1515926,1))
    # 3.2
    
    
    
  2. 大小的比较

     max  求最大值
    
     min 求最小数 
    
     sorted 排序从小大
      
    revers翻转 排序
    注意 字典的比较是 值的比较 ,返回的是键
       排序的是根据 字符在uincode的编码的数字排序
    
  3. 位运算 绝对值

    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、公共的功能

  1. 加减乘除数字运算

4、类型转换

  1. 布尔转整形

    n1 = int(True)
    n2 = int(False)
    
  2. 字符串转整形

    • 字符串转整型数字 ,字符串转数字有一个前提,就是字符串中不能有字符或符号存在

      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进制数字
      
      
  3. 浮点转整形

    v1 = int(1.1)
    print(v1)  = 1  # 去掉了小数点
    
  4. 进制之间的相互转换

    print(bin(10))   # bin -- 10进制转换成2进制
    print(oct(10))   # oct -- 10进制转换成8进制
    print(hex(10))   # hex -- 10进制转换成16进制
    
    

2.进制

计算机中底层所有的数据都是以 010101的形式存在(图片、文本、视频等)。

  • 二进制

    0
    1
    10
    
image-20201025174321969

2.1 进制转换

image-20201025180124802
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

其他

  1. ​ python2 的除法默认是没有小数点, python3 除法默认是有小数点, / 地板除法是只要整数 //

布尔

1、定义

True False 作用: 记录真假的两种状态

不同数据类型比较 只可以 比较是否等于 不可以进行大小比较

2、独有的功能

3、公共的功能

4、类型转换

  1. ​ 任何类型都可以转换成布尔类型

    数字类型  --  0 False   其他是True
    字符串类型、列表 字典 集合,元组   -- "空是" False  其他都是True
    
    

其他

  1. ​ 做条件的时候,会默认转换成布尔值,然后做条件判断

    if 888:  # 888 就会默认转成True
     print("123")
    if {"age":"123"}: #{"age":"123"}就会默认转成True
     print("213")
    

字符串

1、定义

表现一个字符串使用 
'aaa'
"aaa"
info = '''
aaa
'''

2、独有的功能

  1. "aaa".功能()
  2. a1="aaa" a1.功能

判断字符串以什么开头,得到一个布尔值

if  input("你是哪里人").startswith("山东"):
    print("山东户口")
else:
    print("非上海户口")
   
data.startswith("山东")  # 如果输入 山东省 或者 山东的,那么startwith 就是截取前两个汉字做匹配,相等返回true

判断字符串以什么结尾,得到一个布尔值

if  input("你住哪个地方").endswith("村"):
    print("农村户口")
else:
    print("城市户口")
   
data..endswith("村")  # 如果输入荷花小区 或者 荷花村 ,那么startwith 就是截取后一个汉字做匹配,相等返回true

判断一个字符串是否是整数 ,返回的是布尔值

  1. 应用场景 电话号码的校验

  2. 计算加减乘除 输入

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())
   
  1. 去掉指定 换行符 制表符

    # strip()  默认空的包含(\n \r  \t),只能删除头和尾的空格,中间的不会删除
    
    a = "   aaa  "
    print(a.strip()) # 取消换行符
    
  2. 去除指定的字符串

    a = "上海市在海上"  #去除"上"这个字符串
    print(a.strip("上"))  
    print(a.lstrip("上"))
    print(a.rstrip("上"))
    海市在海
    海市在海上
    上海市在海
    
    
  3. 字符串变大写,转小写 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("错误请重新输入")
    
    
  4. 内容替换

    字符串的替换
    
    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'>
    **
    **
    '''
    
    1. 字符串的切割 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 '''
      
      1. 字符串的拼接 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
        '''
        
        
        
  5. 格式化 %s fomat f 3种类型。

总结: 内存的数据都是字符串数据,硬盘中的是utf-8编码的字节型数据

  1. 字符串转换成字节

    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'>
    
    
    
    
  2. 将字符串内容 居中 居左 居右 显示

    code = "aaaaa"
    
    print(code.center(20,"*"))
    # *******aaaaa********
    
    print(code.ljust(20,"*"))
    # aaaaa***************
    print(code.rjust(20,"*"))
    # ***************aaaaa
    
  3. 帮忙填充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、类型转换

  1. ​ 字符串转换成字节
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'>



练习题

  1. 写代码实现判断用户输入的值否以 "al"开头,如果是则输出 "是的" 否则 输出 "不是的"

    if input("请输入用户名:").startswith("al"):
        print("是的")
    else:
        print("不是的")
    
  2. 写代码实现判断用户输入的值否以"Nb"结尾,如果是则输出 "是的" 否则 输出 "不是的"

    if input("请输入用户名:").endswith("Nb"):
        print("是的")
    else:
        print("不是的")
    
  3. 将 name 变量对应的值中的 所有的"l"替换为 "p",并输出结果

    name = "lllloooo"
    print(name.replace("l","p"))
    
  4. 写代码实现对用户输入的值判断,是否为整数,如果是则转换为整型并输出,否则直接输出"请输入数字"

    code = input("num :")
    if code.isdecimal():
        print(int(code))
    else:
        print("请输入数字")
    
  5. 对用户输入的数据使用"+"切割,判断输入的值是否都是数字?
    提示:用户输入的格式必须是以下+连接的格式,如 5+9 、alex+999`

    code = input("用户输入的格式必须是以下+连接 ").split("+")
    if code[0].isdecimal() and code[1].isdecimal():
        print("都是数字")
    else:
        print("不全是数字")
    
  6. 写代码实现一个整数加法计算器(两个数相加)
    需求:提示用户输入: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("不是数字")
    
  7. 写代码实现一个整数加法计算器(两个数相加)
    需求:提示用户输入: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("不是数字")
    
  8. 补充代码实现用户认证。


补充代码实现用户认证。
需求:提示用户输入手机号、验证码,全都验证通过之后才算登录成功(验证码大小写不敏感)


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 到最后全部


  1. 字符串可以相加 “code” + “code”

  2. 字符串进行相乘 “code” * 3

  3. 字符串索引取单个字符 code[2]

  4. 字符串索引取读个值,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] 根据索引取每一个值
  1. 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")
  1. 循环取值 字符串 列表 字典
# 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)

# 省略起始位置  省略步长  和起始位置


'''



  

  
posted @ 2021-08-10 16:16  mmszxc  阅读(501)  评论(0)    收藏  举报