学习python,从入门到放弃(7)


学习python,从入门到放弃(7)

字符串的其他内置方法

  • 移除首尾指定字符

    .strop() 用于移除首尾指定字符,当在前面加入方向时,就可以移除指定方向上的指定字符了。

    .lstrip() 用于移除左边的指定字符。

    .rstrip() 用于移除右边的指定字符。

    s1 = '$$$jason$$$'
    print(s1.strip('$'))  # jason
    print(s1.lstrip('$'))  # jason$$$
    print(s1.rstrip('$'))  # $$$jason
    
  • 大小写相关操作

    验证码识别不需要区分大小写,可以使用 .lower().upper() 两个操作。

    .lower() 可以将所有英文字母变为小写。

    .upper() 可以将所有英文字母变为大写。

    s2 = 'JaSoN666Sb'
    print(s2.lower())  # jason666sb
    print(s2.upper())  # JASON666SB
    

    .islower().isupper() 用于判断字符串中所有的英文字母是否是纯小写或大写。

    s1 = 'aaa'
    s2 = 'AAA'
    print(s1.lower())  # Ture
    print(s2.lower())  # False
    print(s1.upper())  # False
    print(s2.upper())  # Ture
    
  • 判断开头或结尾是否是指定字符

    .startswith() 用于判断字符串头或结尾是否是指定字符。返回布尔值。

    s3 = 'jason kevin jason tony 666'
    print(s3.startswith('j'))  # True
    print(s3.startswith('jason'))  # True
    print(s3.startswith('tony'))  # False
    print(s3.endswith('6'))  # True
    print(s3.endswith('666'))  # True
    print(s3.endswith('jason'))  # False
    
  • 格式化输出

    之前的格式化输出运用了占位符,而这次使用了 format 方法

    1. 与占位符一致,使用的{}占位

      print('my name is {} my age is {}'.format('jason', 18))  # my name is jason my age is 18
      

      是最简单的用法。

    2. 根据索引取值

      print('my name is {0} {0} {0} my age is {0} {1}'.format('jason', 18))  # my name is jason jason jason my age is jason 18
      

      括号中的元素相当于元组,可以反复使用多次。

    3. 根据指名道姓的方式取值

      print('my name is {name} {name} my age is {age} {pwd}'.format(name='jason', age=18, pwd=123))  # my name is jason jason my age is 18 123
      

      与字典相似,通过关键字赋值。

    4. 直接使用已经出现过的变量

      name = 'jason'
      age = 18
      print(f'my name is {name} my age is {age} {name} {age}')  # my name is jason my age is 18 jason 18
      

      比较方便,可以缩减代码量。

      注意 f 不要写漏了。

  • 拼接字符串

    字符串的拼接有多种方法。最简单的方法就是可以直接使用 + 号连起来。

    s1 = '123'
    s2 = '321'
    print(s1 + s2)  # 123321
    

    但是这种方法非常占用内存资源,效率较低。

    使用字符串的内置方法 .join() ,可以将字符或字符串插入到另一组字符串中,或者插入列表中将其拼接。

    s1 = '123'
    s2 = '666'
    print(s2.join(s1))  # 166626663
    print('$'.join(['jason', 'kevin', 'justin', 'tony']))  # jason$kevin$justin$tony
    

    注意:插入列表中时,列表中的元素必须是字符串,否则会报错。

  • 替换字符串中指定的字符

    word 与 txt 等文本编辑器中都有这个功能,在python中可以使用 .replace() 来实现。

    s1 = '111111111122235465112211111'
    print(s1.replace('1', '0'))  
    # 000000000022235465002200000
    

    这是默认的一次性替换,也可以指定替换的个数。

    s1 = '111111111122235465112211111'
    print(s1.replace('1', '0', 6))
    # 000000111122235465112211111
    
  • 判断字符串中是否是纯数字

    int() 只有当字符串中是纯数字时才能使用,所以当我们不知道容器中是不是纯数字的字符串的时候,就可以使用 .isdigit() 来判断。

    s1 = 'jason123'
    s2 = '123'
    s3 = '123.1'
    print(s1.isdigit())  # False
    print(s2.isdigit())  # True
    print(s3.isdigit())  # False
    
  • 查找指定字符对应的索引值

    .find() 用于查找字符串中指定的字符在哪个位置,如果指定 开始和结束的范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。

    str1 = "this is string example....wow!!!";
    str2 = "exam";
     
    print str1.find(str2);  # 15
    print str1.find(str2, 10);  # 15
    print str1.find(str2, 40);  # -1
    

    也可以使用 .index() 方法,用法与 .find() 一样,但是当此方法找不到指定字符时,会报错。

  • 文本位置改变

    1. .center()

      返回一个原字符串居中,并使用指定字符填充至指定长度的新字符串,字符串左右使用尽可能相同的参数提供的字符填充。默认为空格填充,当长度参数小于等于原字符串的长度时,原样返回,无法使左右字符数相等时候,字符串字符数为奇数时左侧字符会比右侧少 1,字符串字符数为偶数时左侧字符会比右侧多 1 。

      a = 'hello'
      print(a.center(20))
      '''
      hello        
      '''
      print(a.center(19, '-'))
      '''
      -------hello-------
      '''
      print(a.center(3))
      '''
      hello
      '''
      print(a.center(8, '-'))
      '''
      -hello--
      '''
      b='runoob'
      print(b.center(9, '-'))
      '''
      --runoob-
      '''
      
    2. .ljust()

    返回一个原字符串左对齐,并使用指定字符填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

    a = 'hello'
    print(a.ljust(20, '0'))  # hello000000000000000
    
    1. .rjust()

      返回一个原字符串右对齐,并使用指定字符填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

      a = 'hello'
      print(a.rjust(20, '0'))  # 000000000000000hello
      
  • 特殊符号

    斜杠与一些英文字母的组合会产生特殊的含义

    print('ja\tson\nke\avin')
    '''
    ja	son
    kevin
    '''
    

    如果想取消它们的特殊含义,可以在字符串的前面加一个字母 r 即可。

    print(r'ja\tson\nke\avin')
    '''
    ja\tson\nke\avin
    '''
    
  • .captalize() , .swapcase() , .title()

    1. .captalize() 用于首字母大写

      message = 'hello everyone nice to meet you!'
      print(message.capitalize())
      # Hello everyone nice to meet you!
      
    2. .swapcase() 用于大小写反转

      message1 = 'Hi girl, I want make friends with you!'
      print(message1.swapcase())
      # hI GIRL, i WANT MAKE FRIENDS WITH YOU!
      
    3. .title() 用于每个单词首字母大写

      msg = 'dear my friend i miss you very much'
      print(msg.title())
      # Dear My Friend I Miss You Very Much
      

列表内置方法

  • 类型转换

    列表的类型转换只能转换支持 for 循环的数据类型,字符串,列表,字典,元组,集合等,不能转换整型、浮点型和布尔型。

    print(list('jason'))  # ['j', 'a', 's', 'o', 'n']
    print(list({'name': 'jason', 'pwd': 123}))  # ['name', 'pwd']
    print(list((11,22,33,44,55)))  # [11, 22, 33, 44, 55]
    print(list({1, 2, 3, 4, 5}))  # [1, 2, 3, 4, 5]
    
  • 常见操作

    1. 索引取值

      name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
      print(name_list[0])  # jason
      print(name_list[-1])  # jerry
      
    2. 切片

      [开始:结束:方向]

      name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
      print(name_list[1:4])  # ['kevin', 'tony', 'tom']
      print(name_list[-4:-1])  # ['kevin', 'tony', 'tom']
      print(name_list[-1:-4:-1])  # ['jerry', 'tom', 'tony']
      
    3. 间隔

      print(name_list[0:4:1])  # ['jason', 'kevin', 'tony', 'tom']
      print(name_list[0:4:2])  # ['jason', 'tony']
      print(name_list[-1:-4:-1])  # ['jerry', 'tom', 'tony']
      
    4. 统计列表中元素的个数

      name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
      print(len(name_list))  # 5
      
    5. 成员运算

      与字符串不一样,只能判断元素,并不能判断元素中的单个字符。

      name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
      print('j' in name_list)  # False
      print('jason' in name_list)  # True
      
    6. 列表添加元素的方式

      1. 尾部追加单个元素

        .append() 方法只能追加单个元素。

        name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        name_list.append('小李')
        print(name_list)
        # ['jason', 'kevin', 'tony', 'tom', 'jerry', '小李']
        name_list.append([11, 22, 33, 44])
        print(name_list)
        # ['jason', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44]]
        

        当追加的元素是列表时,也作为单个元素追加上去!!

      2. 指定位置插入单个元素

        name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        name_list.insert(0, 123)
        name_list.insert(2, '可不可以插个队')
        name_list.insert(1, [11, 22, 33])
        print(name_list)
        # [123, [11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry']
        

        .insert() 方法也只能追加单个元素。

      3. 合并列表

        .extend() 方法相当于 for 循环 + .append() ,加号也可以达到相同的效果但是效率非常低。

        name_list1 = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        name_list1.extend([11, 22, 33, 44, 55])
        print(name_list1)
        name_list2 = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        for i in [11, 22, 33, 44, 55]:
            name_list2.append(i)
        print(name_list2)
        name_list3 = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        name_list3 += [11, 22, 33, 44, 55]
        print(name_list3)
        '''
        ['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55]
        ['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55]
        ['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55]
        '''
        
    7. 删除元素

      1. 通用的删除方式

        name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        del name_list[0]
        print(name_list)
        # ['kevin', 'tony', 'tom', 'jerry']
        
      2. 指定删除

        使用 .remove() 来删除直接指定元素

        name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        print(name_list.remove('jerry'))  #None
        print(name_list)  # ['jason', 'kevin', 'tony', 'tom']
        
      3. 延迟删除

        将需要删除的元素暂存,默认删除最后一位,也可以指定。

        name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
        print(name_list.pop())  # jerry
        print(name_list)  # ['jason', 'kevin', 'tony', 'tom']
        print(name_list.pop(2))  # tony
        print(name_list)  # ['jason', 'kevin', 'tom']
        
    8. 修改列表元素

      id() 函数返回指定对象的唯一 id。

      Python 中的所有对象都有其自己的唯一 id。

      id 在创建时已分配给对象。

      id 是对象的内存地址,并且在每次运行程序时都不同。(除了某些具有恒定唯一 id 的对象,比如 -5 到 256 之间的整数)

      name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
      print(id(name_list[0]))  # 1712881054472
      name_list[0] = 'jasonDSB'
      print(id(name_list[0]))  # 1712881903024
      
    9. 排序

      .sort() 可以对列表进行排序,默认进行升序,也可以修改为降序。

      ss = [44, 77, 99, 11, 22, 33, 88, 66]
      ss.sort()  # 升序
      print(ss)  # [11, 22, 33, 44, 66, 77, 88, 99]
      ss.sort(reverse=True)  # 降序
      print(ss)  # [99, 88, 77, 66, 44, 33, 22, 11]
      
    10. 翻转

      .reverse() 可以使列表中的元素前后顺序进行调换。

      ss = [44, 77, 99, 11, 22, 33, 88, 66]
      ss.reverse()  # 前后颠倒
      print(ss)
      # [66, 88, 33, 22, 11, 99, 77, 44]
      
    11. 比较运算

      列表在做比较的时候,其实比的是对应索引位置上的元素的内码,且当前面的元素相比分出高下时就不会再对比后面的元素了,但如果前面的元素都一样,那就是元素多的列表比较大。

      s1 = [11, 0, 0]
      s2 = [1, 2, 3, 4, 5, 6, 7, 8]
      print(s1 > s2)  # True
      s1 = ['A', 'B', 'C']
      s2 = ['A']
      print(s1 > s2)  # True
      
    12. 统计列表中某个元素出现的次数

      l1 = [11, 22, 33, 44, 33, 22, 11, 22, 11, 22, 33, 22, 33, 44, 55, 44, 33]
      print(l1.count(11))  # 3
      
    13. 清空列表

      l1 = [11, 123]
      l1.clear()
      print(l1)  # []
      

拓展:可变类型与不可变类型

Python的每一个对象都分为可变类型和不可变类型,主要的核心类型中数字类型字符串类型元组是不可变的,列表字典是可变的。

对不可变类型重新赋值相当于重新创建了一个不可变类型的对象,将原来的变量重新指向新创建的对象,如果没有其他变量引用原有对象的话,原有对象就会被回收。

比如 i += 1 ,实际上 i += 1 并不是真的在原有的int对象上 +1,而是重新创建一个 value 为 6 的 int 对象,i 引用自这个新的对象。

就内存代码来看,可变类型的值如果改变了,内存代码是不变的,因为修改的是它本身。但是不可变类型的值如果改变了,那它的内存地址肯定改变了,因为创建了一个新的对象来储存改变了的值。

队列与堆栈

队列属于先进先出,如排队

堆栈属于先进后出,如堆叠事物

总结

今天的知识繁多复杂,不好记忆,需要多加练习。开始有了一些比较虚的概念类知识。

作业

1.将登录功能编写成多用户模式
2.利用列表编写一个用户注册、登录程序
提示:循环
要求:成功一次即可 无需考虑用户冲突等情况
3.不使用count统计列表中指定元素出现的次数

chances = 1
is_l_again = False
is_run = True
# data = 'jason|123'
data = {'jason': '123', 'mark': '222'}
# username, password = data.split('|')
while is_run:
    l_or_r = input('登录/注册?请输入L/R')
    if l_or_r == 'l' or l_or_r == 'L':
        while chances <= 3:
            in_username = input('username:').strip()
            in_password = input('password:').strip()
            if in_username in data and in_password == data[in_username]:
                print('登录成功,欢迎你,%s' % in_username)
                while True:
                    cmd = input('>>>')
                    if cmd == 'quit':
                        print("再见,%s" % in_username)
                        is_run = False
                        break
                    else:
                        print(cmd)
                break
            else:
                print('用户名或密码错误,剩余尝试次数为 %d 次' % (3 - chances))
                if chances == 3:
                    while True:
                        again = input('是否再次尝试 y/n')
                        if again == 'y' or again == 'Y':
                            is_l_again = True
                            break
                        elif again == 'n' or again == 'N':
                            break
                        else:
                            print("请输入y/n")
                            continue
                chances += 1
                if is_l_again:
                    chances = 1
                    is_l_again = False
    elif l_or_r == 'r' or l_or_r == 'R':
        while True:
            in_username = input('username:').strip()
            if in_username in data:
                print('用户名已存在,请重新输入,如已注册,想返回登录界面在 username 处输入:back')
                continue
            elif in_username == 'back':
                break
            in_password1 = input('password:').strip()
            in_password2 = input('password again:').strip()
            if in_password1 != in_password2:
                print('两次输入的密码不一致,请重新输入')
                continue
            else:
                print('注册成功,请返回登陆界面登录')
                data[in_username] = in_password1
                break

相关