zoukankan      html  css  js  c++  java
  • Python基础知识笔记(三)

    一. 基础数据类型

          基础数据类型有以下几种:

                 整数(int)    

                 字符串(str)    

                 布尔值(bool)

                 列表(list)

                 元组(tuple)

                 字典(dict)

                 集合(set)

    二. 整数—— int

            这里主要熟悉二进制与十进制之间的对应关系与相互转化的方法:

                1). 二进制与十进制的关系
                        

                      i = 4
                      print(i.bit_length())          # 3
                      # 获取十进制转化成二进制的有效位数

                      二进制             十进制
                      0000 0100           4
                      # 这里二进制中的 100 即是有效位数

                  2). 二进制与十进制之间的转化
                   

                      二进制转化成十进制
                      示例:
                      二进制 0010 1101
                      0             0             1             0             1             1             0             1
                      0*2**7 + 0*2**6 + 1*2**5 + 0*2**4 + 1*2**3 + 1*2**2 + 0*2**1 + 1*2**0
                     十进制结果就是上面这行所有乘积的和

                     十进制转化成二进制
                      方法:对2取余 逆向排列
                      比如十进制数 42
                      除法         商        余数
                      42/2         21          0
                      21/2         10          1
                      10/2         5            0
                      5/2           2           1
                      2/2           1           0
                      1/2           0           1
                      这里不够8位,直接补0即可,所以42对应的二进制(逆向排序)是 00101010
                      PS:前面的两个 0 是补上去的.

             补充:

    1 a = int("    56 ")
    2 b = int("56")
    3 c = int(" 5   6")
    4 
    5 print(a)    # 56
    6 print(b)    # 56
    7 print(c)    # 报错

    三. 字符串—— str

    1. 字符串的索引与切片

    1 # 注意:字符串的切片索引以及常用操作方法,都是形成新的字符串,与原来的字符串没有关系
    2 
    3 s = [1, 2, 3]
    4 s1 = s[0]
    5 print(s == s1)   # False
     1 s = "12345678"
     2 
     3 s[-2::-2]
     4 
     5 # 这种题首先看最后一个,是 -2, 即负数
     6 # 所以首尾要颠倒,即从右往左数
     7 # 再看第一个数是 -2,这里所指的是 7
     8 # 就是说从 7 开始往左执行切片操作
     9 # 然后中间没写什么,代表一直从 7 到 1 取片
    10 # 最后 步长是 2, 所以结果就是 "7531"
    11 
    12 s[-2:-1:-1]
    13 # 按照上面步骤,从 7 开始往左取片
    14 # 但是 -1 指的是 8 ,8 在 7 的右边,7 往左永远与 8 没关系
    15 # 因此这个的结果是 "", 即空字符串,取不到任何东西
    16 
    17 s[-2:7:-1]
    18 # 仔细观察发现其实这个和上面的 s[-2:-1:-1]是一样的
    19 # 即 7 指的也是从左往右索引号是 7 对应的值,即 8
    20 
    21 s[-2:0:0]
    22 # 这里步长是0 ,所以不看前面就知道会报错
    23  
    24 s[-2:-9:-2]
    25 # 结果也是 "7531"
    26 # s[-2:-100:-2] 也是一样
    27
    28 # 另外,时刻记住一点:顾头不顾尾!

    2. 字符串常用方法:

    1). capitalize() 与 title() —— 首字母大写与所有单词的首字母大写

     1 s = 'alex wusir9Taibai$xiaoHu'
     2 
     3 # capitalize() — 第一个单词的首字母大写,其他单词都是小写(!!!)
     4 s3 = s.capitalize()  
     5 # Alex wusir9taibai$xiaohu
     6 
     7 # 如果该字符串的第一个字符不是字母,那么capitalize() 就没起作用了
     8 s = "7#dakj$kdjl(dkak)dka"
     9 s.capitalize()  
    10 # 7#dakj$kdjl(dkak)dka
    11 
    12 
    13 # title()— 非字母隔开的每个单词的首字母大写
    14 s = 'alex wusir9Taibai$xiaoHu'
    15 s4 = s.title()         
    16 # Alex Wusir9Taibai$Xiaohu

    2). center() —— 将字符串居中

    1 s = "居中"
    2 
    3 s5 = s.center(20)
    4 s6 = s.center(20, "*")
    5 
    6 print(s5)    #          居中         
    7 print(s6)    # *********居中*********
    8 
    9 # 可以设置总长度,可以设置填充物

    3). swapcase() —— 字母大小写翻转

    1 s = 'TAiBai'
    2 
    3 s7 = s.swapcase()
    4 print(s7)   # taIbAI

    4). upper() 与 lower() —— 单词全部大小写

     1 s = 'taibaiJInXing'
     2 
     3 s8 = s.upper()
     4 s9 = s.lower()
     5 
     6 print(s8)    # TAIBAIJINXING
     7 print(s9)    # taibaijinxing
     8 
     9 # 这两种用法可以用在比如验证码之类
    10 
    11 username = input('请输入姓名:')
    12 password = input('请输入密码:')
    13 code = 'AeTrd'.upper()
    14 your_code = input('请输入验证码:').upper()  # 这里是关键点
    15 
    16 if your_code == code:
    17     if username == 'alex' and password == '123':
    18         print('登录成功')
    19     else:
    20         print('用户名或者密码错误')
    21 else:
    22     print('验证码不正确')

    5). startswith() 与 endswith() —— 判断是否以某些元素开始或结束

    1 s = 'alexeaaa'
    2 
    3 print(s.startswith('a'))      # True
    4 print(s.startswith('alex'))  #  True
    5 print(s.startswith('e',2,))  #  True    # 可切片

    6). find() 与 index() —— 在字符串中查找某元素是否存在及存在的位置(从0开始计数)

     1 s = 'taibaijinxing'
     2 
     3 print(s.find('a'))       # 1
     4 print(s.find('a',2,))   # 4
     5 print(s.find('X'))       # -1
     6 print(s.index('X'))     # 报错
     7 
     8 # find() —— 通过元素找索引,找到第一个就返回(可切片),找不到返回-1
     9 # index() —— 通过元素找索引,找到第一个就返回(可切片),找不到报错
    10 # 通过比较可知,能用 find() 就用它,以免使用 index() 时引起不必要的报错 

    7). strip() —— 默认去除字符串前后两端的空格,换行符及制表符

     1 name='*barry**'
     2 
     3 print(name.strip('*'))      # barry
     4 print(name.lstrip('*'))     # barry**
     5 print(name.rstrip('*'))     # *barry
     6 
     7 # 在程序的应用场景一般是用户对于验证码的输入
     8 # 因为验证码输入大小写都是可以的,所以程序必须判定只要内容相同,用户的输入就可以通过
     9 
    10 # 应用举例:
    11 username = input('请输入姓名:').strip()
    12 password = input('请输入密码:').strip()
    13 if username == 'alex' and password == '123':
    14     print('登录成功')
    15 else:
    16     print('用户名或者密码错误')
    17
    18 以后用 input()用法时后面一定要加个 .strip()

    8). split() —— 以某条件分割,最终形成一个不含有这个分割符的元素的列表

                         (字符串转化为列表的方法)

     1 # 默认以空格分割
     2 
     3 s = 'wusir alex taibai'
     4 ss = 'wusir:alex:taibai'
     5 sss = 'taibai:alex:wusir:xiaohu:日天'
     6 ssss = ':wusir:alex:taibai'
     7 
     8 s10 = s.split()               # ['wusir', 'alex', 'taibai']
     9 s11 = ss.split(":")          # ['wusir', 'alex', 'taibai']
    10 s12 = sss.split(":", 1)     # ['taibai', 'alex:wusir:xiaohu:日天']
    11 s13 = ssss.split(":")       # ['', 'wusir', 'alex', 'taibai']
    12 
    13 # 由 s13 可知分割出的元素要比分隔符数+1
    14 # rspilt()—— 从右到左分割
    15 s = "alex wusir ritian"
    16 print(s.split(" ", 1)) # ["alex", "wusir ritian"]
    17 print(s.rsplit(" ", 1)) # ["alex wusir", "ritian"]
    18 # 注意看结果对比
    19
    20 # 注意使用 split()默认以空格分隔 与 split(" ")(里面一个空格)的区别
    21 s = "alex taibai"
    22 print(s.split()) # ['alex', 'taibai']
    23 print(s.split(" ")) # ['alex', '', '', 'taibai']
    24 # 可以看出,split() 使用默认方式会把元素之间的所有空格当成一个空格来分割
    25 # 而如果在括号里指定以多少个空格来分割的话就会出现问题

     9). join()

     1 # 这种方法可以用于 列表转变成字符串 
     2 # 条件是必须全部都是字符串组成的列表
     3 
     4 s = ['wusir', 'alex', 'taibai']
     5 ss = 'alex'
     6 s14 = "_".join(ss)
     7 s15 = " ".join(s)
     8 
     9 print(s14)    # a_l_e_x
    10 print(s15)    # wusir alex taibai

    10). replace()

    1 s = 'Alex 是老男孩的创始人之一,Alex也是一个屌丝,Alex'
    2 s11 = s.replace('Alex', '日天', 1)
    3 
    4 print(s11)   # 日天 是老男孩的创始人之一,Alex也是一个屌丝,Alex

    11). format 格式化输出

     1 # 第一种方式:
     2 
     3 s = '我叫{}, 今年{}, 性别{}'.format('小虎', 25, '')
     4 print(s)    # 我叫小虎, 今年25, 性别女
     5 
     6 # 第二种方式
     7 # 注意这里的用法
     8 
     9 s = '我叫{0}, 今年{1}, 性别{2},我依然叫{0}'.format('小虎', 25, '')
    10 print(s)    # 我叫小虎, 今年25, 性别女,我依然叫小虎
    11 
    12 # 第三种方式
    13 s = '我叫{name}, 今年{age}, 性别{sex},我依然叫{name}'.format(age=25, sex='',name='小虎',)
    14 
    15 print(s)    # 我叫小虎, 今年25, 性别女,我依然叫小虎

    12). is 系列

     1 name = 'taibai123'
     2 print(name.isalnum()) #字符串由字母或数字组成    # True
     3 print(name.isalpha()) #字符串只由字母组成          # False
     4 print(name.isdigit()) # 字符串只由数字组成           # False
     5 
     6 # 注意在这里的用法
     7 # 比如购物后付钱,要用户输入前,如果不小心输入"1000a",会报错,可以这样:
     8 money = input('>>>')
     9 if money.isdigit():
    10     money = int(money)
    11
    12 # 这里注意很奇怪的一点:
    13 is.alpha() 这个用法只要是字母,中文,外文都是 True!!!

    13). count() —— 计算字符串中某个字符出现的次数

     1 s = 'fjdsklf;jdskafjdsaflsdfsdfsdafsdgsfda'
     2 
     3 print(s.count('f'))        # 8
     4 print(s.count('f',1,))     # 7
     5 
     6 # 在 name = "Alex lxnb" 这个变量中,如何判断这个变量的前四位字母中关于 "l" 出现的次数?
     7 # 方法一:
     8 n = name[:4]
     9 print(n.count("l"))  # 1
    10 
    11 # 方法二:
    12 # 要算出现几次,首先想到 count 方法
    13 # 然后在 Pycharm 中输入 "count" 选中它,按 Ctrl 键,点击这个单词
    14 # 这时会跳出一个 py 文件,专门介绍 count 用法,然后发现可以这样:
    15 print(name.count("l", 0, 4)  # 1

    14). len()

     1 s = 'fdskafl12431   fdkslfjsdlfksjd'
     2 
     3 print(len(s))    # 30
     4 
     5 # 延申用法
     6 s = "jasdjlk"
     7 num1 = 0
     8 while 1:
     9     print(s[num1])
    10     num1 = num1 + 1
    11     if num1 == len(s):
    12         break

    15). 列表嵌套的一个小技巧

    1 li = [1, 2, 3, [44, 55], 66]
    2 
    3 for i in li:
    4     if type(i) == list:
    5         for j in i:
    6             print(j)
    7     else:
    8         print(i)
    # 把下面列表中66之前的数放到字典的键key1对应的值的列表中,把之后的数放到key2对应的值的列表中
    # 前提条件:前三行不能变
    # li = [11, 22, 33, 44, 55, 77, 88, 99]
    # dic = {}
    # for i in li:
    
    li = [11, 22, 33, 44, 55, 77, 88, 99]
    dic = {}
    for i in li:
        if i < 66:
            if "key1" not in dic:
                dic["key1"] = [i]
            else:
                dic["key1"].append(i)
        else:
            if "key2" not in dic:
                dic["key2"] = [i]
            else:
                dic["key2"].append(i)
    print(dic)
    # {'key1': [11, 22, 33, 44, 55], 'key2': [77, 88, 99]}
    
    # 还可以这样:li = [11, 22, 33, 44, 55, 77, 88, 99]dic = {}for i in li:    if i < 66:        if "key1" not in dic:            dic["key1"] = []        dic["key1"].append(i)    else:        if "key2" not in dic:            dic["key2"] = []        dic["key2"].append(i)
    print(dic)
  • 相关阅读:
    MyEclipse的优化
    关于学习Hadoop中未总结的资料
    OSChina 的 Tomcat 配置 server.xml
    Linux 定时任务 Crontab命令 详解
    常用Linux命令收集
    SQL练习 高级子查询
    JAVA设计模式中的单例模式
    Linux课程笔记 Rsync数据同步服务
    Linux课程笔记 SSH介绍
    Linux课程笔记 Raid技术介绍
  • 原文地址:https://www.cnblogs.com/shawnhuang/p/10156030.html
Copyright © 2011-2022 走看看