进入python的世界_day7_python基础——数据类型的内置方法及操作


   写在开头,昨天学习了for循环、range数据,今天学的就比较多,主要是新单词,因为都是英文,必须得知道英文的意思,今天学的每种方法都建议多敲几遍并且每隔三天复习一次

一、数据类型内置方法理论

  1. 含义

    ​ 在代码世界中每种数据类型都自带了一些功能,用户在使用的过程中可以通过某些手段调用这种方法,达到省时省力的目的

  2. 表现形式(如何调用)>>>

    ​ python中:句点符

    ​ 展示出来的效果就是 名字()

    ​ 比如 append()、isdigit() ......

    可以自己在pycharm中在某一个数据类型后加'.',pycharm是后台准备好了该类型可用的内置方法的

二、整形的内置方法

  1. 类型转换

    ​ 可以将数字、浮点型(能转但是小数点后的直接舍弃)、字符串(能转但是必须内部都是纯数字不能有其他东西 ps:就算是数字也不能带小数点)转成整形

    t = int(11.11)
    print(type(t))
    print(int(t))

    >>>
    <class 'int'>
    11
    ————————————————————
    t = int('999.1116')
    print(type(t))
    print(int(t))

    >>>
    报错 
    ValueError: invalid literal for int() with base 10: '999.1116'

  1. int还可以做进制数转换——记住进制的关键单词
    print(bin(1000)) >>> 将十进制的100转换成二进制 0b1111101000
    print(oct(1000)) >>> 将十进制的100转换成八进制 0o1750
    print(hex(1000)) >>> 将十进制的100转换成十六进制 0x3e8
    还原: 注意数据值后面跟上几进制的值,让int了解按这个转换,不然他不认识
    print(int('0b1111101000', 2))  
    print(int('0o1750', 8))  
    print(int('0x3e8', 16))  
    >>>>1000

ps:如果以后看到0b开头的一串数字,可以判断是二进制的数据,以此类推0o;0x等

三、浮点型的内置方法

  1. 类型转换

    ​ 只认识数字,至多一个小数点,如果数据是纯数字没有小数点,会补齐一个小数点

    tt = '196'
    print(type(tt)) >>> <class 'str'>
    tt = float(tt)
    print(tt,type(tt)) >>> 196.0 <class 'float'>


    tt = '196.77哈哈'
    tt = float(tt)
    print(type(tt)) >>> 报错
    —————————————
    yy = '196.168.1'
    yy = float(yy)
    print(type(yy)) >>> 报错

四、字符串内置方法

  1. 首先是转换,八大常用数据类型啥都能转字符串
t = {'dsadasd':666, 'sadasd':22, 'sadsadgg':'sadasd'}
t = str(t)
print(t,type(t))
>>>
{'dsadasd': 666, 'sadasd': 22, 'sadsadgg': 'sadasd'}  <class 'str'>
  1. 索引取值

    ​ 索引位置的标号和列表取元素一样,0为首位,可以取负,意思是从该字符串结尾处拿

tt = 'hello jack'
print(tt[3])
>>> l
print(tt[-1])
>>> k
  1. 切片取值

    ​ 表现形式和range很像,顾头不顾尾,也是'头、尾'; '头、尾、步长'的组成形式,也是但是用[ ]来进行索引,用':'来连接,步长还可以用来控制索引方向

tt = 'hello jack'
print(tt[1:3])
>>> el      # 顾头不顾尾
print(tt[1:10:2])
>>> el ak 
print(tt[-1:-5:-1])
>>> kcaj    # 注意这个切片的意思,是值从结尾切到倒数第四位,方向是向左
# 注意,[]内不写一个位置的值,默认是都要
特殊:
print(tt[::2])     # [::2]=[0:10:2]
>>> hlojc
  1. 统计字符串个数(空格也算哦)

    ​ len()

tt = 'hello jack'
print(len(tt))
>>> 10
  1. 移除字符串首尾指定的字符(注意:只能首尾哦!!!)

    ​ strip()

    ​ 可以用于获取用户输入时不让用户打非相关的数据,可以直接连写在字符串后面

tt = 'hello jack'
print(tt.strip('l'))
>>> hello jack    # 没法移除中间的'l'
———————————————————
tt = 'llhello jacklll'
print(tt.strip('l'))
>>> hello jack
	昨天猜数字作业补充思考:如果一开始用户输入十八这种非整形数据,会直接报错,那我们怎么做呢?
先补充一个知识	:
	isdigit() 方法检测字符串是否只由数字组成
	>>> https://www.runoob.com/python/att-string-isdigit.html
count = 0
while True:
    if count == 3:
        choice = input('是否继续尝试 y/n 请选择:')
        if choice == 'y':
            count = 0
        else:
            print('下次再来玩')
            break
    age = input('请输入年龄>>>:').strip()
    if age.isdigit():
        age = int(age)
    else:
        print('不要输入数字以外的内容')
        continue
    if age > 18:
        print('猜大了')
        count += 1
    elif age < 18:
        print('猜小了')
        count += 1
    else:
        print('恭喜猜对')
        break

  1. 切割字符串

    ​ split()

    ​ 按照指定的字符切割字符串,切出来的是一个列表,可以用maxsplit=x 来控制切割的此时,用rsplit 来控制切割的方向

tt = 'song^dance^rap^basketball'
print(tt.split('^'))
>>> ['song', 'dance', 'rap', 'basketball']
___________________
tt = 'song^dance^rap^basketball'
hobby1, hobby2, hobby3, hobb4 = tt.split('^')
  1. 格式化输出

    ​ formart,和占位符差不多,{ } 表示占位有四个用法

    • tt = 'my name is {} my hometown is {}'
      print(tt.format('tom', 'changsha')) 
      >>>
      my name is tom my hometown is changsha
      
    • 大括号内写索引值可以打破顺序 并且可以反复使用相同位置的数据
      tt = 'my name is {0} my hometown is {1} love city is {1} {0}'.format('tom', 'changsha')    # format带着的数据看成是元组按索引的定位计数来填充
      print(tt)
      
    • 大括号内写变量名,见名知意,format后给变量名赋值填充
      tt = 'my name is {name} my hometown is {city} love city is {city} {name}'
      print(tt.format(name='tom', city='changsha'))
      >>> 
      my name is tom my hometown is changsha love city is changsha tom
      
      
    • !!!最好用的一种

      先定义变量名
      	在一个需要占位的变量名的数据值前加f,内部占位依旧用{} 填充,就可以直接使用前面出现过的变量名,{}内填充的变量命可以根据自己需要改变
      name = 'tom'
      city = 'changsha'
      t = f'my name is {name} my hometown is {city}{name}'
      print(t)
      >>>
      my name is tom my hometown is changshatom
      **很好用!!!!!!!!!			
      
  2. 字符串的拼接

    方式1  字符串相加(直接加)
    print('hello' + 'world')
    >>>
    helloworld
    ——————————————————
    方式2  join方法
    l = ['name', 'age', 'weight', 'job', 'city']
    print('|'.join(l))
    >>>
    name|age|weight|job|city
    
  3. 大小写————联想到生活中的验证码

    ​ .upper() 转大写

    ​ .lower() 转小写

    ​ isupper() 判断是否都是大写

    ​ islower() 判断是否都是小写

    t = 'Zhongguo ChangSha'
    print(t.upper())
    >>>
    ZHONGGUO CHANGSHA
    __________________
    print(t.lower())
    >>>
    zhongguo changsha
    ——————————————————
    old_code = 'aaaaA'
    print('这是返回给用户的图片验证码:%s' % old_code)
    new_code = input('输入验证码>>>:').strip()
    if old_code.upper() == new_code.upper():  # 这里也可以使用lower()
        print('验证码正确')
    else:
        print('验证码错误')
    
  4. 判断字符串中是否是纯数字

    ​ .isdigit()

    tt = '6565'
    print(tt.isdigit())
    >>>
    True
    ______________
    tt = 'HAHA'
    print(tt.isdigit())
    >>>
    False
    
  5. 替换字符串中指定的字符

    ​ .relpace(),()中填写需要替代的数据值,默认全替换,可以通过加数字来控制替换的次数

    tt = 'my hobby is music football playgame music playgame'
    print(tt.replace('music', 'dance'))
    >>>
    my hobby is dance football playgame dance playgame
    __________________________
    tt = 'my hobby is music football playgame music playgame'
    print(tt.replace('music', 'dance', 1))
    >>>
    my hobby is dance football playgame music playgame
    
  6. 统计指定字符出现的次数

        ​		.count()       ()内定义需要统计的数据值
        
        ```py
        tt = 'my hobby is music football playgame music playgame'
        print(tt.count('o'))
        >>>
        3
        ```
    
  7. 判断字符串的开头或者结尾

    ​ .startwith()

    ​ .endwith()

    ​ !!注意,字符串内数据的每一个数据值都可以进判断

  8. 找数据值

    ​ .find() 查看指定字符对应的起始索引值 从左往右找到一个就结束

    ​ .index() 找不到直接报错 substring not found

    tt = 'my hobby is music football playgame music playgame'
    print(tt.find('s'))          找到's'就报告他的索引位置
    print(tt.find('w'))          找不到'w'就反馈-1
    print(tt.index('is'))        找到'is'就反馈找到的一瞬间的索引位置
    print(tt.count('music'))     计数
    >>>
    10
    -1
    9
    2
    

五、列表内置方法

  1. 类型转换

    ​ .list() 能够被for循环的数据值都可以被转换成列表,所以可以是字符串、列表、字典、元组、集合(注意,字典依旧是K暴露在外面,默认拿不到V)

  2. 切片

    ​ [ ] 规则和字符串一致

  3. 统计计数 ////////////////////代码有点没搞懂,稍后再细看,懂了懂了

    ​ len( )

    l1 = [111, 222, 333, 444, 555, 666, 777, 888, 999, 222, 777, 666, 1111]
    print(len(l1))  
    >>>
    13
    
  4. 统计列表中指定数据出现的次数

    ​ .count()

  5. 列表内数据值修改

    ​ 直接按索引改

    tt = [111, 222, 333, 444, 555, 666, 77, 888]
    tt[1] = '嘿嘿'
    print(tt)
    >>>
    [111, '嘿嘿', 333, 444, 555, 666, 77, 888]
    
  6. 添加数据值

    • 尾部添加

      ​ .append.() 注意:括号内不管多少个数据值,都会被当成一个整体添加到表格尾部

    • 任意位置索引添加

      ​ .insert() ()先添加位置标记数,然后写数据值

    • 拓展列表 合并相加

      ​ l1 + l2

      ​ .extend

  7. 删除列表数据

    • del删除

      ​ .del[] 一样是索引

    • remove移除 注意:拿走就真的消失了

      ​ .remove()

    • pop 暂时拿出(弹出) 注意:暂时拿出来,如果以后用一次就消失

      ​ .pop() 默认是弹出尾部的数据值

      name_list = ['jason', 'kevin', 'tony', 'jack', [666, 777, 888, 999]] 
      print(name_list.remove(2))
      t = name_list.remove(2)
      >>>
      报错
      ——————————————
      name_list = ['jason', 'kevin', 'tony', 'jack', [666, 777, 888, 999]] 
      print(name_list.pop(2))
      t = name_list.pop(2)
      >>>
      tony
      _______________
      name_list = ['jason', 'kevin', 'tony', 'jack', [666, 777, 888, 999]] 
      print(name_list.pop(2))
      t = name_list.pop(2)
      m = name_list.pop(2)
      print(t)
      print(m)
      >>>
      tony
      jack
      [666, 777, 888, 999]
      
      
      
  8. 排序、颠倒顺序

    ​ .sort()默认升序

    ​ 如果要改成降序,()内填写reverse=True即可

    ​ .reverse() 倒序

六、可变与不可变

  1. 可变的:列表、集合、字典(可以进行更改,并且更改后物理地址不会发生改变)

  2. 不可变的:数字、字符串、元组(不可以进行更改,更改后就是一个新的对象了,物理地址发生了变化)

a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))
print(id(b))
a[1] ='嘿嘿'
print(a)
print(id(a))
print(a == b)
>>>
2144298344832
2144298343808
[1, '嘿嘿', 3]
2144298344832
False
  # 发现没有,a与b虽然数据值一样,但是地址不相同,而改变了后的a,虽然值大不相同,但是地址依旧没改变

七、作业

​ 1.基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123' # 一个用户数据

获取用户用户名和密码 将上述数据拆分校验用户信息是否正确

data_source = 'jason|123'  # 一个用户数据
t = data_source.split('|')
name_real = t[0]
password_real = t[1]

while True:
    name = input('请输入用户名>>>:').strip()
    password = input('请输入密码>>>:').strip()
    if name == name_real and password == password_real:
        print('登录成功')
        break
    else:
        print('请检查后重新输入')

2.基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']

data_source = ['jason|123', 'kevin|321', 'oscar|222']
username = input('请输入用户名>>>:').strip()
password = input('请输入密码>>>:').strip()
for i in data_source:
    t = i.split('|')
    # 比如 t = 'jason|123'.strip('|')
    # print(t, type(t)) # jason|123 <class 'str'>   拿到的是字符串,可以索引取值,取值后绑定给新的变量名
    username_real = t[0]
    password_real = t[1]
    if username == username_real and password == password_real:
        print('登录成功')
        break
else:
    print('请检查用户名或者密码')

3.利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构

name_list = []
while True:
    print("""
                    -------用户名系统(完善中)------
                    1.添加用户
                    2.查看用户
                    3.删除用户
                    q.退出系统
                    ---------------------
                    """)
    choice_num = input('请输入您要执行的功能编号>>>:').strip()
    if choice_num == '1':
        username = input('已进入添加用户页面,请输入用户名>>>:').strip()
        if username in name_list:
            print('该用户名已存在,请重新输入')
        else:
            name_list.append(username)
            print(f'用户{username}添加成功')  # 给一个反馈 用format占位法

    elif choice_num == '2':
        for i in name_list:
            print(f"""
                -------userinfo------
                用户名:{i}
                ---------------------
                """)
    elif choice_num == '3':
        delete_username = input('已进入删除用户页面,请出入您想删除的用户名>>>:').strip()
        if delete_username in name_list:
            name_list.remove(delete_username)
            print(f'用户名{delete_username}已经删除')
        else:
            print('戳啦,找不到这个用户名')
    elif choice_num == 'q':
        print('系统已退出,感谢使用')
        break
    else:
        print('功能完善中')
posted @ 2022-09-29 21:10  yiwufish  阅读(579)  评论(0)    收藏  举报