一. 基础数据类型
基础数据类型有以下几种:
整数(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) # 566 print(b) # 567 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 对应的值,即 820 21 s[-2:0:0]22 # 这里步长是0 ,所以不看前面就知道会报错23 24 s[-2:-9:-2]25 # 结果也是 "7531"26 # s[-2:-100:-2] 也是一样2728 # 另外,时刻记住一点:顾头不顾尾!
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)dka11 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')) # True4 print(s.startswith('alex')) # True5 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_x10 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")) # 110 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 + 111 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)